Added unit tests for deploy.py
Increased unit tests coverage from 0 up to 90 % for deploy.py and removed "test" directory from the coverage report. Also fixed issue with not initialized variable in deploy.py Change-Id: If2ab0f4bd7823da6c9386179113f4736abaac3f7 Closes-Bug: #1519127 Closes-Bug: #1535930
This commit is contained in:
parent
9042c81fad
commit
f6c32531f7
|
@ -1,7 +1,10 @@
|
|||
[run]
|
||||
branch = True
|
||||
source = kolla_mesos
|
||||
omit = kolla_mesos/openstack/*
|
||||
omit =
|
||||
kolla_mesos/openstack/*
|
||||
.tox/*
|
||||
kolla_mesos/tests/*
|
||||
|
||||
[report]
|
||||
ignore_errors = True
|
||||
|
|
|
@ -133,8 +133,8 @@ class KollaWorker(object):
|
|||
def gen_deployment_id(self):
|
||||
|
||||
if CONF.kolla.deployment_id_prefix and CONF.kolla.deployment_id:
|
||||
LOG.info('You cant use "deployment-id" and "deployment-id-prefix" '
|
||||
'together. Choose one.')
|
||||
LOG.info('You can\'t use "deployment-id" and '
|
||||
'"deployment-id-prefix" together. Choose one.')
|
||||
sys.exit(1)
|
||||
|
||||
uniq_name = CONF.kolla.deployment_id is not None
|
||||
|
@ -170,6 +170,7 @@ class KollaWorker(object):
|
|||
zk.ensure_path(script_node)
|
||||
source_path = common_cfg[script]['source']
|
||||
|
||||
src_file = source_path
|
||||
if not source_path.startswith('/'):
|
||||
src_file = file_utils.find_file(source_path)
|
||||
with open(src_file) as fp:
|
||||
|
|
|
@ -0,0 +1,221 @@
|
|||
# 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 datetime
|
||||
import mock
|
||||
from oslo_config import cfg
|
||||
import requests_mock
|
||||
import yaml
|
||||
|
||||
from kolla_mesos.cmd import deploy
|
||||
from kolla_mesos.tests import base
|
||||
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.import_group('kolla', 'kolla_mesos.config.kolla')
|
||||
|
||||
YAML_SERVICES_CONFIG = """
|
||||
config:
|
||||
source: "test1.yml"
|
||||
keystone:
|
||||
keystone-api:
|
||||
keystone-api.conf:
|
||||
source: ["config/keystone/templates/keystone-api.conf.j2",
|
||||
"/etc/kolla/config/keystone.conf"]
|
||||
dest: /etc/keystone/keystone-api.conf
|
||||
owner: glance
|
||||
perm: "0600"
|
||||
rabbitmq:
|
||||
rabbitmq-server:
|
||||
rabbitmq-server.conf:
|
||||
source: ["config/rabbitmq/templates/rabbitmq-server.conf.j2",
|
||||
"/etc/kolla/config/rabbitmq-server.conf"]
|
||||
dest: /etc/rabbitmq/rabbitmq-server.conf
|
||||
mariadb:
|
||||
mariadb-server:
|
||||
mariadb-server.conf:
|
||||
source: ["config/mariadb/templates/mariadb-server.conf.j2",
|
||||
"/etc/kolla/config/mariadb-server.conf"]
|
||||
dest: /etc/mariadb/mariadb-server.conf
|
||||
glance:
|
||||
glance-api:
|
||||
glance-api.conf:
|
||||
source: "/config/glance/templates/glance-api.conf.j2"
|
||||
dest: /etc/glance/glance-api.conf
|
||||
glance-registry:
|
||||
glance-registry.conf:
|
||||
source: "config/glance/templates/glance-registry.conf.j2"
|
||||
dest: /etc/glance/glance-registry.conf
|
||||
horizon:
|
||||
horizon:
|
||||
openstack-horizon.conf:
|
||||
source: "/config/horizon/templates/openstack-dashboard.conf.j2"
|
||||
dest: /etc/horizon/openstack-dashboard.conf
|
||||
commands:
|
||||
source: "/etc/test2.yaml"
|
||||
glance:
|
||||
glance-api:
|
||||
db_sync:
|
||||
run_once: True
|
||||
command: kolla_extend_start
|
||||
glance_api:
|
||||
daemon: True
|
||||
command: /usr/bin/glance-api
|
||||
requires: [/kolla/1/variables/glance_database/.done,
|
||||
/kolla/1/variables/glance_database_user_create/.done]
|
||||
register: /kolla/1/variables/glance_setup/.done
|
||||
glance-registry:
|
||||
glance-registry:
|
||||
daemon: True
|
||||
command: /usr/bin/glance-registry
|
||||
keystone:
|
||||
keystone-api:
|
||||
keystone-api:
|
||||
daemon: True
|
||||
command: /usr/bin/keystone-api
|
||||
mariadb:
|
||||
mariadb-server:
|
||||
mariadb-server:
|
||||
daemon: True
|
||||
command: service mariadb-server start
|
||||
rabbitmq:
|
||||
rabbitmq-server:
|
||||
rabbitmq-server:
|
||||
daemon: True
|
||||
command: service rabbitmq-server start
|
||||
horizon:
|
||||
horizon:
|
||||
apache:
|
||||
daemon: False
|
||||
command: service apache2 start
|
||||
"""
|
||||
|
||||
|
||||
class TestClient(base.BaseTestCase):
|
||||
|
||||
@requests_mock.mock()
|
||||
def setUp(self, req_mock):
|
||||
super(TestClient, self).setUp()
|
||||
CONF.set_override('host', 'http://localhost:4400', group='chronos')
|
||||
CONF.set_override('timeout', 5, group='chronos')
|
||||
CONF.set_override('host', 'http://127.0.0.1:8080', group='marathon')
|
||||
CONF.set_override('deployment_id', None, group='kolla')
|
||||
CONF.set_override('deployment_id_prefix', None, group='kolla')
|
||||
req_mock.get('http://127.0.0.1:8080/v2/info', json={
|
||||
'version': '0.11.0'
|
||||
})
|
||||
|
||||
self.worker = deploy.KollaWorker()
|
||||
|
||||
def test_create_worker(self):
|
||||
self.assertIsInstance(self.worker, deploy.KollaWorker)
|
||||
|
||||
@mock.patch('kolla_mesos.cmd.deploy.tempfile')
|
||||
def test_setup_working_dir(self, mock_tmpfile):
|
||||
self.worker.setup_working_dir()
|
||||
parameters = mock_tmpfile.mkdtemp.call_args[1]
|
||||
self.assertTrue(parameters['prefix'].startswith('kolla'))
|
||||
|
||||
def test_gen_deployment_id(self):
|
||||
CONF.set_override('deployment_id', 'test', group='kolla')
|
||||
self.worker.gen_deployment_id()
|
||||
self.assertEqual(self.worker.deployment_id, 'test')
|
||||
|
||||
def test_gen_deployment_id_prefix(self):
|
||||
CONF.set_override('deployment_id_prefix', 'test', group='kolla')
|
||||
self.worker.gen_deployment_id()
|
||||
self.assertIn('test', self.worker.deployment_id)
|
||||
self.assertNotEqual(self.worker.deployment_id, 'test')
|
||||
|
||||
def test_gen_deployment_id_without_parameters(self):
|
||||
self.worker.gen_deployment_id()
|
||||
date = datetime.datetime.fromtimestamp(self.worker.start_time)
|
||||
new_id = date.strftime('%Y-%m-%d-%H-%M-%S')
|
||||
self.assertTrue(self.worker.deployment_id.startswith(new_id[:10]))
|
||||
|
||||
@mock.patch('kolla_mesos.cmd.deploy.sys')
|
||||
def test_gen_deployment_id_with_extra_parameters(self, mock_sys):
|
||||
CONF.set_override('deployment_id', 'test', group='kolla')
|
||||
CONF.set_override('deployment_id_prefix', 'test2', group='kolla')
|
||||
self.worker.gen_deployment_id()
|
||||
mock_sys.exit.assert_called_once_with(1)
|
||||
|
||||
@mock.patch('kolla_mesos.cmd.deploy.open')
|
||||
@mock.patch('kolla_mesos.cmd.deploy.file_utils')
|
||||
@mock.patch('kolla_mesos.cmd.deploy.yaml')
|
||||
@mock.patch('kolla_mesos.cmd.deploy.json')
|
||||
@mock.patch('kolla_mesos.cmd.deploy.zk_utils')
|
||||
def test_write_to_zookeeper(self, mock_utils, mock_json, mock_yaml,
|
||||
mock_file_utils, mock_open):
|
||||
CONF.set_override('force', True)
|
||||
|
||||
self.worker.get_jinja_vars = mock.MagicMock(
|
||||
return_value={'image': 'test1', 'test2': ''})
|
||||
mock_yaml.load = mock.MagicMock(
|
||||
return_value=yaml.load(YAML_SERVICES_CONFIG))
|
||||
mock_file_utils = mock.MagicMock()
|
||||
mock_file_utils.find_file = mock.MagicMock(spec=file)
|
||||
mock_open.return_value = mock.MagicMock(spec=file)
|
||||
|
||||
self.worker.setup_working_dir()
|
||||
self.worker.gen_deployment_id()
|
||||
self.worker.write_to_zookeeper()
|
||||
|
||||
self.assertTrue(len(mock_utils.mock_calls) > 1)
|
||||
expected_calls = ['set', 'delete', 'ensure_path', 'exists']
|
||||
for call in mock_utils.mock_calls:
|
||||
methods = str(call).split('.')
|
||||
if len(methods) > 3:
|
||||
function_name = methods[3].split('(')[0]
|
||||
self.assertIn(function_name, expected_calls)
|
||||
|
||||
@mock.patch('kolla_mesos.cmd.deploy.open')
|
||||
def test_write_openrc(self, mock_open):
|
||||
mock_open.return_value = mock.MagicMock(spec=file)
|
||||
file_handle = mock_open.return_value.__enter__.return_value
|
||||
|
||||
self.worker.write_openrc()
|
||||
|
||||
mock_open.assert_called_once_with('openrc', 'w')
|
||||
self.assertEqual(file_handle.write.call_count, 1)
|
||||
|
||||
@mock.patch('kolla_mesos.cmd.deploy.json')
|
||||
@mock.patch('kolla_mesos.cmd.deploy.open')
|
||||
@mock.patch('kolla_mesos.cmd.deploy.os')
|
||||
def test_start(self, mock_os, mock_open, mock_json):
|
||||
self.worker._start_chronos_job = mock.MagicMock()
|
||||
self.worker._start_marathon_app = mock.MagicMock()
|
||||
mock_os.path = mock.MagicMock()
|
||||
mock_os.walk = mock.MagicMock(
|
||||
return_value=[('/', ('tmp1', 'tmp2'), ('file1', )),
|
||||
('/', ('mdir', ), ('marathon', 'marathon2'))])
|
||||
|
||||
self.worker.setup_working_dir()
|
||||
self.worker.gen_deployment_id()
|
||||
self.worker.start()
|
||||
|
||||
self.assertEqual(self.worker._start_chronos_job.call_count, 1)
|
||||
self.assertEqual(self.worker._start_marathon_app.call_count, 2)
|
||||
|
||||
@mock.patch('kolla_mesos.cmd.deploy.jinja_utils')
|
||||
@mock.patch('kolla_mesos.cmd.deploy.yaml')
|
||||
@mock.patch('kolla_mesos.cmd.deploy.open')
|
||||
def test_get_jinja_vars(self, mock_open, mock_yaml, mock_jutils):
|
||||
CONF.set_override('deployment_id', 'test', group='kolla')
|
||||
mock_yaml.load = mock.MagicMock(return_value={})
|
||||
self.worker.setup_working_dir()
|
||||
self.worker.gen_deployment_id()
|
||||
result = self.worker.get_jinja_vars()
|
||||
|
||||
self.assertIsInstance(result, dict)
|
||||
self.assertEqual(result['deployment_id'], 'test')
|
||||
self.assertEqual(result['node_config_directory'], '')
|
Loading…
Reference in New Issue