def test_interpolation_of_env_vars_kube_deploy_spec( self, environMock, chartConfigMock): chart = Chart({'name': {'values': {}}}, None) chartConfig = chartConfigMock() chartConfig.course_base_directory = '.' chartConfig.dryrun = False chartConfig.debug = False chart.args = ['thing=$(environVar)'] environMock.environ = {} chart._check_env_vars() self.assertEqual(chart.args[0], 'thing=$(environVar)')
def test_interpolation_of_env_vars(self, environMock, chartConfigMock): chart = Chart({'name': {'values': {}}}, None) chartConfig = chartConfigMock() chartConfig.course_base_directory = '.' chartConfig.dryrun = False chart.args = ['thing=${environVar}', 'another=$environVar'] environMock.environ = {'environVar': 'asdf'} chart._check_env_vars() self.assertEqual(chart.args[0], 'thing=asdf') self.assertEqual(chart.args[1], 'another=asdf')
def test_flat_key_values(self, chartConfigMock): chart = Chart(self.chart_object, None) chartConfig = chartConfigMock() chartConfig.course_base_directory = '.' chartConfig.dryrun = False self.assertEqual(chart.args, [], "self.args should be empty before running") chart.build_set_string_arguments() self.assertEqual( chart.args, ["--set-string", "keyone=valueone"], "Expected build_set_arguments to build --set args correctly.")
def test_interpolation_of_missing_env_vars(self, environMock, chartConfigMock): chart = Chart({'name': {'values': {}}}, None) chartConfig = chartConfigMock() chartConfig.course_base_directory = '.' chartConfig.dryrun = False chart.args = ['thing=${environVar}'] environMock.environ = {} with self.assertRaises(Exception): chart._check_env_vars()
def test_chart_install(self, repositoryMock): repo_mock = repositoryMock() repo_mock.chart_path = "" helm_client_mock = mock.MagicMock() chart = Chart({'nameofchart': {'namespace': 'fakenamespace', 'set-values': {}}}, helm_client_mock) chart.config.dryrun = False chart.install() helm_client_mock.upgrade.assert_called_once() upgrade_call = helm_client_mock.upgrade.call_args self.assertEqual(upgrade_call[0][0], ['nameofchart', '', '--namespace', 'fakenamespace'])
def test_null_value(self, chartConfigMock): chart = Chart(self.chart_object, None) chartConfig = chartConfigMock() chartConfig.course_base_directory = '.' chartConfig.dryrun = False chart.values_strings = { "testnull": None, } chart.build_set_string_arguments() self.assertEqual(chart.args, [ "--set-string", "testnull=null", ])
def test_chart_initializes_empty_file_paths(self, chartConfigMock): """Assert that we initialize the empty list for new charts""" chart = Chart({"fake-chart": {}}, None) chartConfig = chartConfigMock() chartConfig.course_base_directory = '.' chartConfig.dryrun = False self.assertEqual(chart._temp_values_file_paths, [])
def test_yaml_loaded_integration(self): yaml_file = StringIO(''' --- charts: my-chart: values-strings: keyone: value one keytwo: keythree: value three keyfour: - --settings keyfive: - --one - --two deeplynested_objects: - name: hiya another: nested: value nesting: value - non: conforming lists: - more lists - and more - and: a_random_dict: value ''') course = Handler.load(yaml_file) chart = Chart(course["charts"], None) chart.build_set_string_arguments() self.assertEqual(chart.args, [ "--set-string", "keyone=value one", "--set-string", "keytwo.keythree=value three", "--set-string", "keytwo.keyfour[0]=--settings", "--set-string", "keyfive[0]=--one", "--set-string", "keyfive[1]=--two", "--set-string", "deeplynested_objects[0].name=hiya", "--set-string", "deeplynested_objects[0].another.nested=value", "--set-string", "deeplynested_objects[0].another.nesting=value", "--set-string", "deeplynested_objects[1].non=conforming", "--set-string", "deeplynested_objects[1].lists[0]=more lists", "--set-string", "deeplynested_objects[1].lists[1]=and more", "--set-string", "deeplynested_objects[1].lists[2].and.a_random_dict=value", ])
def test_chart_install(self, repositoryMock, chartConfigMock): repo_mock = repositoryMock() repo_mock.chart_path = "" helm_client_mock = mock.MagicMock() chart = Chart( {'nameofchart': { 'namespace': 'fakenamespace', 'set-values': {} }}, helm_client_mock) chartConfig = chartConfigMock() chartConfig.course_base_directory = '.' chartConfig.dryrun = False chartConfig.debug = False chartConfig.create_namespace = True chartConfig.cluster_namespaces = [] chart.install() helm_client_mock.upgrade.assert_called_once() upgrade_call = helm_client_mock.upgrade.call_args self.assertEqual(upgrade_call[0][0], ['nameofchart', '', '--namespace', 'fakenamespace'])
def test_dicts(self): chart = Chart(self.chart_object, None) chart.values_strings = { "levelone": { "leveltwo": "valuetwo", } } chart.build_set_string_arguments() self.assertEqual(chart.args, ["--set-string", "levelone.leveltwo=valuetwo"]) chart.args = [] chart.values_strings = { "levelone": { "leveltwo": { "levelthree": { "levelfour": "value four", } } } } chart.build_set_string_arguments() self.assertEqual(chart.args, ["--set-string", "levelone.leveltwo.levelthree.levelfour=value four"])
def get_chart(self, *args): chart = Chart( {'name': { 'hooks': { 'pre_install': [ 'omg', ], 'post_install': [ 'fetchez --la-vache', 'mooooooooo!', ] } } }, None, ) chart.config.dryrun = False return chart
def test_extra_config_args(self, chartConfigMock): chartConfig = chartConfigMock() chartConfig.course_base_directory = '.' chartConfig.dryrun = True chartConfig.helm_args = ['extra', 'helm', 'args'] chartConfig.dryrun = True helm_client_mock = mock.MagicMock() chart = Chart( { 'nameofchart': { 'namespace': 'fakenamespace', 'hooks': { 'pre_install': 'command' }, 'plugin': 'someplugin', 'set-values': {} } }, helm_client_mock) self.assertEqual(chart.helm_args, ['extra', 'helm', 'args']) self.assertEqual(chart.debug_args, ['--dry-run', '--debug'])
def test_hooks_parsed(self, chartConfigMock): helm_client_mock = mock.MagicMock() chartConfig = chartConfigMock() chartConfig.course_base_directory = '.' chart = Chart( { 'nameofchart': { 'namespace': 'fakenamespace', 'hooks': { 'pre_install': 'command' }, 'plugin': 'someplugin', 'set-values': {} } }, helm_client_mock) self.assertIsInstance(chart.hooks, (dict)) self.assertIsInstance(chart.pre_install_hook, (Hook)) self.assertIsInstance(chart.post_install_hook, (Hook)) self.assertEqual(chart.pre_install_hook.commands, ['command']) self.assertEqual(chart.post_install_hook.commands, [])
def test_flat_key_values(self): chart = Chart(self.chart_object, None) self.assertEqual(chart.args, [], "self.args should be empty before running") chart.build_set_string_arguments() self.assertEqual(chart.args, ["--set-string", "keyone=valueone"], "Expected build_set_arguments to build --set args correctly.")
def test_remove_temp_files(self, mock_os): """Assert that a temp file in the list has os.remove called against it""" chart = Chart({"fake-chart": {}}, None) chart._temp_values_file_paths.append('non/existent-path') chart.clean_up_temp_files() mock_os.remove.assert_called_once()
def test_chart_initializes_empty_file_paths(self): """Assert that we initialize the empty list for new charts""" chart = Chart({"fake-chart": {}}, None) self.assertEqual(chart._temp_values_file_paths, [])