Allow model settings to be added or overridden
This commit is contained in:
@@ -19,6 +19,21 @@ application versions, topologies or config options. functest-run-suite will
|
||||
run through each phase listed below in order for each bundle that is to be
|
||||
tested.
|
||||
|
||||
0) Environment Variables
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Optionally setting the **MODEL_SETTINGS** environment variable allows model
|
||||
settings to be applied to the models created by zaza to run tests in. The
|
||||
settings will be applied on top of those set
|
||||
**charm_lifecycle.prepare.MODEL_DEFAULTS** so it can be used to override any
|
||||
default setting.
|
||||
|
||||
**MODEL_SETTINGS** should be a list of key/value pairs delimited by
|
||||
semicolon e.g.::
|
||||
|
||||
export MODEL_SETTINGS="virt-type=kvm;no-proxy=jujucharms.com"
|
||||
|
||||
|
||||
1) Prepare
|
||||
~~~~~~~~~~
|
||||
|
||||
|
||||
@@ -1,11 +1,62 @@
|
||||
import copy
|
||||
import mock
|
||||
|
||||
import zaza.charm_lifecycle.prepare as lc_prepare
|
||||
import unit_tests.utils as ut_utils
|
||||
|
||||
|
||||
class TestCharmLifecyclePrepare(ut_utils.BaseTestCase):
|
||||
|
||||
MODEL_CONFIG_DEFAULTS = lc_prepare.MODEL_DEFAULTS
|
||||
|
||||
def base_get_model_settings(self, env, expect):
|
||||
with mock.patch.dict(lc_prepare.os.environ, env):
|
||||
self.assertEqual(lc_prepare.get_model_settings(), expect)
|
||||
|
||||
def test_get_model_settings_no_config(self):
|
||||
expect_config = copy.deepcopy(self.MODEL_CONFIG_DEFAULTS)
|
||||
self.base_get_model_settings({}, expect_config)
|
||||
|
||||
def test_get_model_settings_empty_config(self):
|
||||
expect_config = copy.deepcopy(self.MODEL_CONFIG_DEFAULTS)
|
||||
self.base_get_model_settings({'MODEL_SETTINGS': ''}, expect_config)
|
||||
|
||||
def test_get_model_settings_single_value(self):
|
||||
expect_config = copy.deepcopy(self.MODEL_CONFIG_DEFAULTS)
|
||||
expect_config.update({'virt-type': 'kvm'})
|
||||
self.base_get_model_settings(
|
||||
{'MODEL_SETTINGS': 'virt-type=kvm'},
|
||||
expect_config)
|
||||
|
||||
def test_get_model_settings_multiple_values(self):
|
||||
expect_config = copy.deepcopy(self.MODEL_CONFIG_DEFAULTS)
|
||||
expect_config.update({
|
||||
'virt-type': 'kvm',
|
||||
'no-proxy': 'jujucharms.com'})
|
||||
self.base_get_model_settings(
|
||||
{'MODEL_SETTINGS': 'virt-type=kvm;no-proxy=jujucharms.com'},
|
||||
expect_config)
|
||||
|
||||
def test_get_model_settings_multiple_values_override(self):
|
||||
expect_config = copy.deepcopy(self.MODEL_CONFIG_DEFAULTS)
|
||||
expect_config.update({'test-mode': 'false'})
|
||||
self.base_get_model_settings(
|
||||
{'MODEL_SETTINGS': 'test-mode=false'},
|
||||
expect_config)
|
||||
|
||||
def test_get_model_settings_whitespace(self):
|
||||
expect_config = copy.deepcopy(self.MODEL_CONFIG_DEFAULTS)
|
||||
expect_config.update({
|
||||
'test-mode': 'false',
|
||||
'virt-type': 'kvm'})
|
||||
self.base_get_model_settings(
|
||||
{'MODEL_SETTINGS': ' test-mode= false ; virt-type= kvm'},
|
||||
expect_config)
|
||||
|
||||
def test_prepare(self):
|
||||
self.patch_object(lc_prepare.zaza.controller, 'add_model')
|
||||
self.patch_object(lc_prepare, 'get_model_settings')
|
||||
self.get_model_settings.return_value = lc_prepare.MODEL_DEFAULTS
|
||||
lc_prepare.prepare('newmodel')
|
||||
self.add_model.assert_called_once_with(
|
||||
'newmodel',
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
"""Run prepare phase."""
|
||||
import argparse
|
||||
import copy
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
|
||||
import zaza.controller
|
||||
@@ -21,13 +23,28 @@ MODEL_DEFAULTS = {
|
||||
}
|
||||
|
||||
|
||||
def get_model_settings():
|
||||
"""Construct settings for model from defaults and env variables.
|
||||
|
||||
:returns: Settings to usee for model
|
||||
:rtype: Dict
|
||||
"""
|
||||
model_settings = copy.deepcopy(MODEL_DEFAULTS)
|
||||
for setting in os.environ.get('MODEL_SETTINGS', '').split(';'):
|
||||
if not setting:
|
||||
continue
|
||||
key, value = setting.split('=')
|
||||
model_settings[key.strip()] = value.strip()
|
||||
return model_settings
|
||||
|
||||
|
||||
def prepare(model_name):
|
||||
"""Run all steps to prepare the environment before a functional test run.
|
||||
|
||||
:param model: Name of model to add
|
||||
:type bundle: str
|
||||
"""
|
||||
zaza.controller.add_model(model_name, config=MODEL_DEFAULTS)
|
||||
zaza.controller.add_model(model_name, config=get_model_settings())
|
||||
|
||||
|
||||
def parse_args(args):
|
||||
|
||||
Reference in New Issue
Block a user