Пример #1
0
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"
Пример #2
0
    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()
Пример #3
0
    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()
Пример #4
0
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"
Пример #5
0
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"
Пример #6
0
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"