class AppConfigTestCase(unittest.TestCase): def setUp(self): self.expected_keys = ['config', 'provider'] self.app = AppConfig() self.db_file = tempfile.NamedTemporaryFile() self.app.state = KV(self.db_file.name) self.app.provider = AWS() self.app.provider.controller = "fake-tester-controller" self.app.provider.model = "fake-tester-model" self.app.provider.cloud_type = "ec2" self.app.config = {'spell': 'kubernetes-core'} self.app.juju.client = AsyncMock() self.app.log = MagicMock() def tearDown(self): self.db_file.close() def test_provider_form_query_key(self): "app_config.provider_form_widget_query_key" self.app.provider.form = Form([ Field(label='test widget', widget=StringEditor(default='hai2u'), key='test-key') ]) assert self.app.provider.form.field('test-key').value == 'hai2u' @unittest.skip("FIXME: Finish save/restore " "state for juju model config") def test_config_juju_model_save(self): "app_config.test_config_juju_model_save" self.app.juju.authenticated = True with test_loop() as loop: loop.run_until_complete(self.app.save()) assert self.app.juju.client.set_config.called @unittest.skip("FIXME: Finish save/restore " "state for juju model config") def test_config_juju_restore(self): "app_config.test_config_juju_restore" class FakeExtraInfo: def __init__(self): self.value = b'{"controller": "moo"}' self.app.juju.authenticated = True self.app.juju.client.get_config.return_value = { "extra-info": FakeExtraInfo() } with test_loop() as loop: loop.run_until_complete(self.app.restore()) assert self.app.provider.controller == 'moo' def test_config_guard_unknown_attribute(self): "app_config.test_config_guard_unknown_attribute" with self.assertRaises(Exception): self.app.chimichanga = "Yum"
def setUp(self): self.expected_keys = ['config', 'provider'] self.app = AppConfig() self.db_file = tempfile.NamedTemporaryFile() self.app.state = KV(self.db_file.name) self.app.provider = AWS() self.app.provider.controller = "fake-tester-controller" self.app.provider.model = "fake-tester-model" self.app.provider.cloud_type = "ec2" self.app.config = {'spell': 'kubernetes-core'} self.app.juju.client = AsyncMock() self.app.log = MagicMock()
def setUp(self): self.expected_keys = [ 'config', 'bundles', 'current_bundle', 'argv', 'jaas_ok', 'jaas_controller', 'is_jaas', 'current_model', 'current_controller', 'current_cloud', 'current_cloud_type', 'current_region', 'current_view', 'session_id', 'notrack', 'noreport', 'complete', 'headless', 'endpoint_type', 'exit_code' ] self.app = AppConfig() self.app.state = fakeredis.FakeStrictRedis() self.app.current_controller = "fake-tester-controller" self.app.current_model = "fake-tester-model" self.app.current_cloud_type = "ec2" self.app.config = {'spell': 'kubernetes-core'} self.app.juju.client = AsyncMock() self.app.log = MagicMock()
class AppConfigTestCase(unittest.TestCase): def setUp(self): self.expected_keys = ['config', 'provider'] self.app = AppConfig() self.db_file = tempfile.NamedTemporaryFile() os.environ['UNIT_STATE_DB'] = self.db_file.name self.app.state = unitdata.kv() self.app.provider = AWS() self.app.provider.controller = "fake-tester-controller" self.app.provider.model = "fake-tester-model" self.app.provider.cloud_type = "ec2" self.app.config = {'spell': 'kubernetes-core'} self.app.juju.client = AsyncMock() self.app.log = MagicMock() def tearDown(self): self.db_file.close() @unittest.skip("This requires our app_config.restore/save " "to serialize/deserialize app.provider class") def test_config_state_save(self): "app_config.test_config_state_save" self.app.juju.authenticated = False with test_loop() as loop: loop.run_until_complete(self.app.save()) results = self.app.state.get(self.app._internal_state_key) assert set(json.loads(results.decode('utf8')).keys()) == set( self.expected_keys) def test_config_juju_model_save(self): "app_config.test_config_juju_model_save" self.app.juju.authenticated = True with test_loop() as loop: loop.run_until_complete(self.app.save()) assert self.app.juju.client.set_config.called def test_config_restore(self): "app_config.test_config_restore" self.app.juju.authenticated = False with test_loop() as loop: yield self.app.save() loop.run_until_complete(self.app.restore()) results_json = self.app.state.get(self.app._internal_state_key) results = json.loads(results_json.decode('utf8')) assert self.app.app.controller == results['controller'] @unittest.skip("Also need serialize/deserialize during " "save/restore of app.provider class") def test_config_juju_restore(self): "app_config.test_config_juju_restore" class FakeExtraInfo: def __init__(self): self.value = b'{"controller": "moo"}' self.app.juju.authenticated = True self.app.juju.client.get_config.return_value = { "extra-info": FakeExtraInfo() } with test_loop() as loop: loop.run_until_complete(self.app.restore()) assert self.app.provider.controller == 'moo' def test_config_guard_unknown_attribute(self): "app_config.test_config_guard_unknown_attribute" with self.assertRaises(Exception): self.app.chimichanga = "Yum"
class AppConfigTestCase(unittest.TestCase): def setUp(self): self.expected_keys = [ 'config', 'bundles', 'current_bundle', 'argv', 'jaas_ok', 'jaas_controller', 'is_jaas', 'current_model', 'current_controller', 'current_cloud', 'current_cloud_type', 'current_region', 'current_view', 'session_id', 'notrack', 'noreport', 'complete', 'headless', 'endpoint_type', 'exit_code' ] self.app = AppConfig() self.app.state = fakeredis.FakeStrictRedis() self.app.current_controller = "fake-tester-controller" self.app.current_model = "fake-tester-model" self.app.current_cloud_type = "ec2" self.app.config = {'spell': 'kubernetes-core'} self.app.juju.client = AsyncMock() self.app.log = MagicMock() def test_config_redis_save(self): "app_config.test_config_redis_save" self.app.juju.authenticated = False with test_loop() as loop: loop.run_until_complete(self.app.save()) results = self.app.state.get(self.app._redis_key) json.loads(results.decode('utf8')).keys() == self.expected_keys def test_config_juju_model_save(self): "app_config.test_config_juju_model_save" self.app.juju.authenticated = True with test_loop() as loop: loop.run_until_complete(self.app.save()) assert self.app.juju.client.set_config.called def test_config_juju_model_save_removes_redis_cache(self): "app_config.test_config_juju_model_save_remove_redis_cache" self.app.state.set(self.app._redis_key, "fake data") self.app.juju.authenticated = True with test_loop() as loop: loop.run_until_complete(self.app.save()) assert self.app.state.get(self.app._redis_key) is None def test_config_redis_restore(self): "app_config.test_config_redis_restore" self.app.juju.authenticated = False with test_loop() as loop: yield self.app.save() loop.run_until_complete(self.app.restore()) results_json = self.app.state.get(self.app._redis_key) results = json.loads(results_json.decode('utf8')) assert self.app.current_controller == results['current_controller'] def test_config_juju_restore(self): "app_config.test_config_juju_restore" class FakeExtraInfo: def __init__(self): self.value = b'{"current_controller": "moo"}' self.app.juju.authenticated = True self.app.juju.client.get_config.return_value = { "extra-info": FakeExtraInfo() } with test_loop() as loop: loop.run_until_complete(self.app.restore()) assert self.app.current_controller == 'moo' def test_config_guard_unknown_attribute(self): "app_config.test_config_guard_unknown_attribute" with self.assertRaises(Exception): self.app.chimichanga = "Yum"
class AppConfigTestCase(unittest.TestCase): def setUp(self): self.expected_keys = ['config', 'provider'] self.app = AppConfig() self.db_file = tempfile.NamedTemporaryFile() self.app.state = KV(self.db_file.name) self.app.provider = AWS() self.app.provider.controller = "fake-tester-controller" self.app.provider.model = "fake-tester-model" self.app.provider.cloud_type = "ec2" self.app.config = {'spell': 'kubernetes-core'} self.app.juju.client = AsyncMock() self.app.log = MagicMock() def tearDown(self): self.db_file.close() @unittest.skip("This requires our app_config.restore/save " "to serialize/deserialize app.provider class") def test_config_state_save(self): "app_config.test_config_state_save" self.app.juju.authenticated = False with test_loop() as loop: loop.run_until_complete(self.app.save()) results = self.app.state.get(self.app._internal_state_key) assert set(json.loads(results.decode('utf8')).keys()) == set( self.expected_keys) def test_provider_form_query_key(self): "app_config.provider_form_widget_query_key" self.app.provider.form = Form([ Field(label='test widget', widget=StringEditor(default='hai2u'), key='test-key') ]) assert self.app.provider.form.field('test-key').value == 'hai2u' def test_config_juju_model_save(self): "app_config.test_config_juju_model_save" self.app.juju.authenticated = True with test_loop() as loop: loop.run_until_complete(self.app.save()) assert self.app.juju.client.set_config.called def test_config_restore(self): "app_config.test_config_restore" self.app.juju.authenticated = False with test_loop() as loop: loop.run_until_complete(self.app.save()) loop.run_until_complete(self.app.restore()) results_json = self.app.state.get(self.app._internal_state_key) results = json.loads(results_json) # FIXME: provider is currently blacklisted, so we can't save or # restore state for it; adding that will take a bit of work # assert self.app.provider.controller == results['controller'] assert self.app.config['spell'] == results['config']['spell'] @unittest.skip("Also need serialize/deserialize during " "save/restore of app.provider class") def test_config_juju_restore(self): "app_config.test_config_juju_restore" class FakeExtraInfo: def __init__(self): self.value = b'{"controller": "moo"}' self.app.juju.authenticated = True self.app.juju.client.get_config.return_value = { "extra-info": FakeExtraInfo() } with test_loop() as loop: loop.run_until_complete(self.app.restore()) assert self.app.provider.controller == 'moo' def test_config_guard_unknown_attribute(self): "app_config.test_config_guard_unknown_attribute" with self.assertRaises(Exception): self.app.chimichanga = "Yum"