fuel-web/nailgun/nailgun/test/unit/test_logs_utils.py

103 lines
3.3 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import mock
import os
import shutil
import tempfile
from nailgun.db.sqlalchemy.models import Cluster
from nailgun import objects
from nailgun.test.base import BaseTestCase
from nailgun.utils import logs as logs_utils
class TestNodeLogsUtils(BaseTestCase):
def create_env(self, nodes):
cluster = self.env.create(nodes_kwargs=nodes)
cluster_db = self.db.query(Cluster).get(cluster['id'])
objects.Cluster.prepare_for_deployment(cluster_db)
self.db.flush()
return cluster_db
def test_generate_log_paths_for_node(self):
cluster = self.create_env([{'roles': ['controller']}])
node = cluster.nodes[0]
prefix = "/var/log/remote"
log_paths = logs_utils.generate_log_paths_for_node(node, prefix)
self.assertItemsEqual(
['links', 'old', 'bak', 'new'],
log_paths.keys())
self.assertEqual(len(log_paths['links']), 1)
self.assertEqual(
"{prefix}/{node_ip}".format(prefix=prefix, node_ip=node.ip),
log_paths['links'][0])
self.assertEqual(
"{prefix}/{node_ip}".format(prefix=prefix, node_ip=node.ip),
log_paths['old'])
fqdn = objects.Node.get_node_fqdn(node)
self.assertEqual(
"{prefix}/{node_fqdn}".format(
prefix=prefix,
node_fqdn=fqdn),
log_paths['new'])
self.assertEqual(
"{prefix}/{node_fqdn}.bak".format(
prefix=prefix,
node_fqdn=fqdn),
log_paths['bak'])
def test_delete_node_logs(self):
prefix = tempfile.mkdtemp()
self.addCleanup(shutil.rmtree, prefix)
cluster = self.create_env([{'roles': ['controller']}])
node = cluster.nodes[0]
log_paths = logs_utils.generate_log_paths_for_node(node, prefix)
link = log_paths['links'][0]
os.symlink(log_paths['old'], link)
folder = log_paths['new']
os.mkdir(folder)
file_ = log_paths['bak']
with open(file_, 'w') as f:
f.write("RANDOMCONTENT")
logs_utils.delete_node_logs(node, prefix)
self.assertTrue(
all(not os.path.lexists(path) for path in [link, folder, file_]))
@mock.patch('os.path.islink', side_effect=OSError)
def test_delete_node_no_existing_logs(self, _):
"""Only checks whether errors are passing silently
That's why there's no assertions, just expecting no errors.
"""
prefix = tempfile.mkdtemp()
self.addCleanup(shutil.rmtree, prefix)
cluster = self.create_env([{'roles': ['controller']}])
node = cluster.nodes[0]
logs_utils.delete_node_logs(node, prefix)