def test_load_config_external_app(self): """Test load config for external app""" params = [{ 'name': 'key1', 'description': 'key1' }, { 'name': 'key2', 'description': 'key2' }] initial_config = { 'general': { 'a': 'b', 'key2': 'val2' }, 'some-app': { 'key1': 'val1' } } config = Config(answers=initial_config) mock_nulecule = mock.Mock(name='nulecule', spec=Nulecule('some-id', '0.0.2', config, [], 'some/path')) nc = NuleculeComponent('some-app', 'some/path', params=params) nc._app = mock_nulecule nc.config = config nc.load_config() mock_nulecule.load_config.assert_called_once_with(config=config, ask=False, skip_asking=False)
def test_load_config_external_app(self, mock_merge_config): """Test load config for external app""" mock_nulecule = mock.Mock(name='nulecule', spec=Nulecule('some-id', '0.0.2', {}, [], 'some/path')) params = [{'name': 'key1'}, {'name': 'key2'}] initial_config = { 'general': { 'a': 'b', 'key2': 'val2' }, 'some-app': { 'key1': 'val1' } } nc = NuleculeComponent('some-app', 'some/path', params=params) nc._app = mock_nulecule nc.load_config(config=copy.deepcopy(initial_config)) mock_nulecule.load_config.assert_called_once_with(config={ 'general': { 'a': 'b', 'key2': 'val2' }, 'some-app': { 'key1': 'val1', 'key2': 'val2' } }, ask=False, skip_asking=False) mock_merge_config.assert_called_once_with(nc.config, mock_nulecule.config)
def test_load_config(self): config = {'group1': {'a': 'b'}} mock_component_1 = mock.Mock() mock_component_1.config = { 'group1': { 'a': 'c', 'k': 'v' }, 'group2': { '1': '2' } } n = Nulecule('some-id', '0.0.2', {}, [], 'some/path') n.components = [mock_component_1] n.load_config(config) self.assertEqual(n.config, { 'group1': { 'a': 'b', 'k': 'v' }, 'group2': { '1': '2' } })
def test_load_config_with_default_provider(self): """ Test Nulecule load_config with a default provider. """ config = Config(answers={}) params = [{ "name": "key1", "default": "val1", }, { "name": "key3", "default": "val3" }, { "name": "provider", "default": "docker" }] graph = [{ "name": "component1", "params": [{ "name": "key1", }, { "name": "key2", "default": "val2" }], "artifacts": [] }] n = Nulecule(id='some-id', specversion='0.0.2', metadata={}, graph=graph, params=params, basepath='some/path', config=config) n.load_components() n.load_config(config) self.assertEqual( n.config.runtime_answers(), { 'general': { 'namespace': 'default', 'provider': 'docker', 'key1': 'val1', 'key3': 'val3' }, 'component1': { 'key2': 'val2' } }) self.assertEqual( n.components[0].config.context(scope=n.components[0].namespace), { 'key3': 'val3', 'key2': 'val2', 'key1': 'val1', 'provider': 'docker', 'namespace': 'default' })
def test_stop(self): provider = 'docker' dryrun = False mock_component_1 = mock.Mock() mock_component_2 = mock.Mock() n = Nulecule('some-id', '0.0.2', {}, [], 'some/path') n.components = [mock_component_1, mock_component_2] n.stop(provider) mock_component_1.stop.assert_called_once_with(provider, dryrun) mock_component_2.stop.assert_called_once_with(provider, dryrun)
def test_run(self): provider = 'docker' dryrun = False mock_component_1 = mock.Mock() mock_component_2 = mock.Mock() config = Config(answers={}) n = Nulecule('some-id', '0.0.2', [{}], 'some/path', {}, config=config) n.components = [mock_component_1, mock_component_2] n.run(provider) mock_component_1.run.assert_called_once_with(provider, dryrun) mock_component_2.run.assert_called_once_with(provider, dryrun)
def test_render(self): mock_component_1 = mock.Mock() mock_component_2 = mock.Mock() provider_key = 'foo' dryrun = True n = Nulecule('some-id', '0.0.2', {}, [], 'some/path') n.components = [mock_component_1, mock_component_2] n.render(provider_key, dryrun) mock_component_1.render.assert_called_once_with( provider_key=provider_key, dryrun=dryrun) mock_component_2.render.assert_called_once_with( provider_key=provider_key, dryrun=dryrun)
def test_load_config_with_defaultprovider_overridden_by_provider_in_answers( self): """ Test Nulecule load_config with default provider specified in global params in Nulecule spec, but overridden in answers config. """ config = { 'general': { 'provider': 'new-provider' }, 'group1': { 'a': 'b' } } mock_component_1 = mock.Mock() mock_component_1.config = { 'group1': { 'a': 'c', 'k': 'v' }, 'group2': { '1': '2' } } n = Nulecule(id='some-id', specversion='0.0.2', metadata={}, graph=[], basepath='some/path', params=[{ 'name': 'provider', 'default': 'some-provider' }]) n.components = [mock_component_1] n.load_config(config) self.assertEqual( n.config, { 'general': { 'provider': 'new-provider' }, 'group1': { 'a': 'b', 'k': 'v' }, 'group2': { '1': '2' } })
def test_load_components(self, MockNuleculeComponent): graph = [{ 'name': 'app1', 'source': 'docker://somecontainer', 'params': [] }, { 'name': 'app2', 'artifacts': [{ 'a': 'b' }] }] n = Nulecule('some-id', '0.0.2', graph, 'some/path', {}) n.load_components() MockNuleculeComponent.assert_any_call(graph[0]['name'], n.basepath, 'somecontainer', graph[0]['params'], None, {}) MockNuleculeComponent.assert_any_call(graph[1]['name'], n.basepath, None, graph[1].get('params'), graph[1].get('artifacts'), {})
def test_load_config_without_specified_provider(self): """ Test Nulecule load_config without specifying a provider. """ config = {'general': {}, 'group1': {'a': 'b'}} mock_component_1 = mock.Mock() mock_component_1.config = { 'group1': { 'a': 'c', 'k': 'v' }, 'group2': { '1': '2' } } n = Nulecule(id='some-id', specversion='0.0.2', metadata={}, graph=[], basepath='some/path') n.components = [mock_component_1] n.load_config(config) self.assertEqual( n.config, { 'general': { 'provider': 'kubernetes' }, 'group1': { 'a': 'b', 'k': 'v' }, 'group2': { '1': '2' } })
def test_invalid_nulecule_format(self): n = Nulecule('some-id', '0.0.2', {}, [], 'some/path') with pytest.raises(NuleculeException): n.load_from_path(src=os.path.dirname(__file__) + '/invalid_nulecule/')
def test_missing_nulecule(self): n = Nulecule('some-id', '0.0.2', {}, [], 'some/path') with pytest.raises(NuleculeException): n.load_from_path(src='foo/bar')