Esempio n. 1
0
    def test_sub_step_with_environment_config(self):
        config = Config({
            Config.CONFIG_KEY: {
                'step-foo': [{
                    'implementer': 'foo1',
                    'config': {
                        'test1': 'foo'
                    },
                    'environment-config': {
                        'env1': {
                            'test2': 'bar'
                        }
                    }
                }]
            }
        })

        step_config = config.get_step_config('step-foo')
        self.assertEqual(len(step_config.sub_steps), 1)

        self.assertEqual(
            ConfigValue.convert_leaves_to_values(
                step_config.get_sub_step('foo1').sub_step_config),
            {'test1': 'foo'})
        self.assertEqual(
            ConfigValue.convert_leaves_to_values(
                step_config.get_sub_step('foo1').get_sub_step_env_config(
                    'env1')), {'test2': 'bar'})
Esempio n. 2
0
    def test_multiple_sub_steps(self):
        config = Config({
            Config.CONFIG_KEY: {
                'step-foo': [{
                    'implementer': 'foo1',
                    'config': {
                        'test1': 'foo'
                    }
                }, {
                    'implementer': 'foo2',
                    'config': {
                        'test2': 'foo'
                    }
                }]
            }
        })

        step_config = config.get_step_config('step-foo')
        self.assertEqual(len(step_config.sub_steps), 2)

        self.assertEqual(
            ConfigValue.convert_leaves_to_values(
                step_config.get_sub_step('foo1').sub_step_config, ),
            {'test1': 'foo'})
        self.assertEqual(
            ConfigValue.convert_leaves_to_values(
                step_config.get_sub_step('foo2').sub_step_config),
            {'test2': 'foo'})
Esempio n. 3
0
    def test_list_of_config_value(self, container_registry_login_mock):
        registries = [
            ConfigValue({
                'uri': 'registry.redhat.io',
                'username': '******',
                'password': '******'
            }),
            ConfigValue({
                'uri': 'registry.internal.example.xyz',
                'username': '******',
                'password': '******'
            })
        ]

        container_registries_login(registries)

        calls = [
            call(container_registry_uri='registry.redhat.io',
                 container_registry_username='******',
                 container_registry_password='******',
                 container_registry_tls_verify=True,
                 containers_config_auth_file=None,
                 container_command_short_name=None),
            call(container_registry_uri='registry.internal.example.xyz',
                 container_registry_username='******',
                 container_registry_password='******',
                 container_registry_tls_verify=True,
                 containers_config_auth_file=None,
                 container_command_short_name=None)
        ]
        container_registry_login_mock.assert_has_calls(calls)
Esempio n. 4
0
    def test_sub_step_with_continue_sub_steps_on_failure_str(self):
        config = Config({
            Config.CONFIG_KEY: {
                'step-foo': [{
                    'implementer': 'foo1',
                    'continue-sub-steps-on-failure': 'true',
                    'config': {
                        'test1': 'foo'
                    }
                }, {
                    'implementer': 'foo2',
                    'config': {
                        'test2': 'foo'
                    }
                }]
            }
        })

        step_config = config.get_step_config('step-foo')
        self.assertEqual(len(step_config.sub_steps), 2)

        self.assertEqual(
            ConfigValue.convert_leaves_to_values(
                step_config.get_sub_step('foo1').sub_step_config, ),
            {'test1': 'foo'})
        self.assertEqual(
            ConfigValue.convert_leaves_to_values(
                step_config.get_sub_step('foo2').sub_step_config),
            {'test2': 'foo'})
        self.assertTrue(
            step_config.get_sub_step(
                'foo1').sub_step_contine_sub_steps_on_failure)
        self.assertFalse(
            step_config.get_sub_step(
                'foo2').sub_step_contine_sub_steps_on_failure)
    def test_global_defaults(self):
        config = Config({
            Config.CONFIG_KEY: {
                'global-defaults': {
                    'test1': 'global-default-1',
                    'test2': 'global-default-2'
                },
                'step-foo': [{
                    'implementer': 'foo1',
                    'config': {
                        'test1': 'foo'
                    }
                }]
            }
        })

        step_config = config.get_step_config('step-foo')
        sub_step = step_config.get_sub_step('foo1')

        self.assertEqual(
            sub_step.global_defaults, {
                'test1':
                ConfigValue(
                    'global-default-1', None,
                    ["step-runner-config", "global-defaults", "test1"]),
                'test2':
                ConfigValue('global-default-2', None,
                            ["step-runner-config", "global-defaults", "test2"])
            })
    def test_convert_leaves_to_values_mixed_leaves(self):
        source_values = {
            Config.CONFIG_KEY: {
                'step-foo': [
                    {
                        'implementer': ConfigValue('foo1', None, None),
                        'config': {
                            'test1': ConfigValue('foo', None, None),
                            'test': 'not a config value object'
                        }
                    }
                ]
            }
        }

        converted = ConfigValue.convert_leaves_to_values(source_values)

        self.assertEqual(
            converted,
            {
                Config.CONFIG_KEY: {
                    'step-foo': [
                        {
                            'implementer': 'foo1',
                            'config': {
                                'test1': 'foo',
                                'test': 'not a config value object'
                            }
                        }
                    ]
                }
            }
        )
    def test_convert_leaves_to_config_values_0(self):
        source = {
            Config.CONFIG_KEY: {
                'step-foo': [
                    {
                        'implementer': 'foo1',
                        'config': {
                            'test1': 'foo'
                        }
                    }
                ]
            }
        }

        ConfigValue.convert_leaves_to_config_values(
            values=source[Config.CONFIG_KEY],
            parent_source=source,
            path_parts=[Config.CONFIG_KEY]
        )

        expected = {
            Config.CONFIG_KEY: {
                'step-foo': [
                    {
                        'implementer': ConfigValue('foo1', None, None),
                        'config': {
                            'test1': ConfigValue('foo', None, None)
                        }
                    }
                ]
            }
        }

        self.assertEqual(source, expected)
    def test_global_environment_defaults(self):
        config = Config({
            Config.CONFIG_KEY: {
                'global-environment-defaults' : {
                    'env1': {
                        'test1': 'env1',
                        'test2': 'test2'
                    },
                    'env2': {
                        'test1': 'env2',
                        'test3': 'test3'
                    }
                }
            }
        })

        self.assertEqual(config.global_defaults, {})
        self.assertEqual(
            ConfigValue.convert_leaves_to_values(config.global_environment_defaults),
            {
                'env1': {
                    'environment-name' : 'env1',
                    'test1' : 'env1',
                    'test2' : 'test2'
                },
                'env2': {
                    'environment-name' : 'env2',
                    'test1' : 'env2',
                    'test3' : 'test3'
                }
            }
        )
        self.assertEqual(
            ConfigValue.convert_leaves_to_values(
                config.get_global_environment_defaults_for_environment('env1')
            ),
            {
                'environment-name' : 'env1',
                'test1' : 'env1',
                'test2' : 'test2'
            }
        )
        self.assertEqual(
            ConfigValue.convert_leaves_to_values(
                config.get_global_environment_defaults_for_environment('env2')
            ), {
                'environment-name' : 'env2',
                'test1' : 'env2',
                'test3' : 'test3'
            }
        )
        self.assertEqual(config.get_global_environment_defaults_for_environment('does-not-exist'), {})
        self.assertEqual(config.get_global_environment_defaults_for_environment(None), {})
    def test_value_decyrpt(self, sops_mock):
        encrypted_config_file_path = os.path.join(
            os.path.dirname(__file__),
            'decryptors',
            'files',
            'step-runner-config-secret-stuff.yml'
        )

        config_value = ConfigValue(
            value='ENC[AES256_GCM,data:UGKfnzsSrciR7GXZJhOCMmFrz3Y6V3pZsd3P,iv:yuReqA+n+rRXVHMc+2US5t7yPx54sooZSXWV4KLjDIs=,tag:jueP7/ZWLfYrEuhh+4eS8g==,type:str]',
            parent_source=encrypted_config_file_path,
            path_parts=['step-runner-config', 'global-environment-defaults', 'DEV', 'kube-api-token']
        )

        DecryptionUtils.register_config_value_decryptor(SOPS())

        sops_mock.side_effect=create_sops_side_effect('mock decrypted value')
        decrypted_value = config_value.value
        sops_mock.assert_called_once_with(
            '--decrypt',
            '--extract=["step-runner-config"]["global-environment-defaults"]["DEV"]["kube-api-token"]',
            None,
            encrypted_config_file_path,
            _in=None,
            _out=Any(StringIO),
            _err=Any(StringIO)
        )
        self.assertEqual(
            decrypted_value,
            'mock decrypted value'
        )
    def test_sub_step_with_name(self):
        config = Config({
            Config.CONFIG_KEY: {
                'step-foo': [
                    {
                        'name': 'sub-step-name-test',
                        'implementer': 'foo1',
                        'config': {
                            'test1': 'foo'
                        }
                    }
                ]

            }
        })

        step_config = config.get_step_config('step-foo')
        self.assertEqual(len(step_config.sub_steps), 1)

        self.assertEqual(
            ConfigValue.convert_leaves_to_values(
                step_config.get_sub_step('sub-step-name-test').sub_step_config
            ),
            {
                'test1': 'foo'
            }
        )
    def test_add_or_update_sub_step_config_exising_sub_step(self):
        config = Config([
            {
                Config.CONFIG_KEY: {
                    'step-foo': [{
                        'implementer': 'foo1',
                        'config': {
                            'test1': 'foo'
                        }
                    }]
                }
            },
            {
                Config.CONFIG_KEY: {
                    'step-foo': [{
                        'implementer': 'foo1',
                        'config': {
                            'test2': 'foo'
                        }
                    }]
                }
            },
        ])

        step_config = config.get_step_config('step-foo')
        self.assertEqual(len(step_config.sub_steps), 1)

        self.assertEqual(
            ConfigValue.convert_leaves_to_values(
                step_config.get_sub_step('foo1').sub_step_config), {
                    'test1': 'foo',
                    'test2': 'foo'
                })
Esempio n. 12
0
    def test_value_path_given_no_inital_value_path_parts(self):
        source = {
            Config.CONFIG_KEY: {
                'step-foo': [{
                    'implementer': 'foo1',
                    'config': {
                        'test1': 'foo'
                    }
                }]
            }
        }

        ConfigValue.convert_leaves_to_config_values(values=source,
                                                    parent_source=source)

        self.assertEqual(
            source[Config.CONFIG_KEY]['step-foo'][0]['config']
            ['test1'].path_parts,
            ['step-runner-config', 'step-foo', 0, 'config', 'test1'])
Esempio n. 13
0
    def test__repr__(self):
        source = {
            Config.CONFIG_KEY: {
                'step-foo': [{
                    'implementer': 'foo1',
                    'config': {
                        'test1': 'foo'
                    }
                }]
            }
        }

        ConfigValue.convert_leaves_to_config_values(
            values=source[Config.CONFIG_KEY],
            parent_source=source,
            path_parts=[Config.CONFIG_KEY])

        self.assertEqual(
            str(source[Config.CONFIG_KEY]['step-foo'][0]['config']['test1']),
            "ConfigValue(value=foo, value_path='['step-runner-config', 'step-foo', 0, 'config', 'test1']')"
        )
Esempio n. 14
0
    def test_global_defaults(self):
        config = Config(
            {Config.CONFIG_KEY: {
                'global-defaults': {
                    'test1': 'foo1'
                }
            }})

        self.assertEqual(
            ConfigValue.convert_leaves_to_values(config.global_defaults),
            {'test1': 'foo1'})
        self.assertEqual(config.global_environment_defaults, {})
    def test_global_environment_defaults(self):
        config = Config({
            Config.CONFIG_KEY: {
                'global-environment-defaults': {
                    'env1': {
                        'test1': 'global-env1-default-1',
                        'test2': 'global-env1-default-2'
                    },
                    'env2': {
                        'test1': 'global-env2-default-1',
                        'test2': 'global-env2-default-2'
                    }
                },
                'step-foo': [{
                    'implementer': 'foo1',
                    'config': {
                        'test1': 'foo'
                    }
                }]
            }
        })

        step_config = config.get_step_config('step-foo')
        sub_step = step_config.get_sub_step('foo1')

        self.assertEqual(
            ConfigValue.convert_leaves_to_values(
                sub_step.get_global_environment_defaults('env1')), {
                    'environment-name': 'env1',
                    'test1': 'global-env1-default-1',
                    'test2': 'global-env1-default-2'
                })
        self.assertEqual(
            ConfigValue.convert_leaves_to_values(
                sub_step.get_global_environment_defaults('env2')), {
                    'environment-name': 'env2',
                    'test1': 'global-env2-default-1',
                    'test2': 'global-env2-default-2'
                })
    def test_merge_valid_global_environment_defaults_same_env_diff_keys(self):
        with TempDirectory() as temp_dir:
            config_dir = "test"

            config_files = [
                {
                    'name': os.path.join(config_dir,'foo.yml'),
                    'contents' : {
                        Config.CONFIG_KEY: {
                            'global-environment-defaults' : {
                                'env1' : {
                                    'foo-key': 'foo'
                                }
                            }
                        }
                    }
                },
                {
                    'name': os.path.join(config_dir,'bar.yml'),
                    'contents' : {
                        Config.CONFIG_KEY: {
                            'global-environment-defaults' : {
                                'env1' : {
                                    'bar-key': 'bar'
                                }
                            }
                        }
                    }
                },
            ]

            for config_file in config_files:
                config_file_name = config_file['name']
                config_file_contents = config_file['contents']
                temp_dir.write(
                    config_file_name,
                    bytes(f"{config_file_contents}", 'utf-8')
                )

            config = Config()
            config.add_config(os.path.join(temp_dir.path, config_dir))
            self.assertEqual(
                ConfigValue.convert_leaves_to_values(
                    config.get_global_environment_defaults_for_environment('env1')
                ),
                {
                    'environment-name': 'env1',
                    'foo-key': 'foo',
                    'bar-key': 'bar'
                }
            )
Esempio n. 17
0
    def test_configvalue_params(self, which_mock, container_command_mock):
        which_mock.side_effect = create_which_side_effect(
            cmd='buildah', cmd_path='/mock/buildah')

        container_registry_login(
            container_registry_uri=ConfigValue('registry.example.xyz'),
            container_registry_username=ConfigValue('example'),
            container_registry_password=ConfigValue('nope'),
            container_registry_tls_verify=ConfigValue(True),
            containers_config_auth_file=ConfigValue('/tmp/test/auth.json'))

        container_command_mock.bake.assert_called_once()
        container_command_mock.bake().login.bake.assert_called_once_with(
            password_stdin=True,
            username='******',
            tls_verify='true',
            authfile='/tmp/test/auth.json')
        container_command_mock.bake().login.bake().assert_called_once_with(
            'registry.example.xyz',
            _in='nope',
            _out=Any(IOBase),
            _err=Any(IOBase),
            _tee='err')
    def test__eq__is_not_equal_both_config_value_objects(self):
        test1 = ConfigValue('foo1', None, None)
        test2 = ConfigValue('foo2', None, None)

        self.assertNotEqual(test1, test2)
    def test__eq__is_equal_basic(self):
        test1 = ConfigValue('foo1', None, None)
        test2 = ConfigValue('foo1', None, None)

        self.assertEqual(test1, test2)
    def test__eq__is_equal_diff_source(self):
        test1 = ConfigValue('foo1', "does not matter for equality", None)
        test2 = ConfigValue('foo1', "really does not matter for equality", None)

        self.assertEqual(test1, test2)
    def test__eq__is_equal_diff_path_parts(self):
        test1 = ConfigValue('foo1', None, ['a','b'])
        test2 = ConfigValue('foo1', None, ['1', '2'])

        self.assertEqual(test1, test2)
    def test_get_copy_of_runtime_step_config_default_global_defaults_global_env_defaults_sub_step_config_sub_step_env_config_step_config_overrides(
            self):
        config = Config({
            Config.CONFIG_KEY: {
                'global-defaults': {
                    'global-default-unique-0': 'global-default',
                    'global-default-override-by-global-env-default-0':
                    'global-default-override-me',
                    'global-default-override-by-step-config-0':
                    'global-default-override-me',
                    'global-default-override-by-step-env-config-0':
                    'global-default-override-me',
                    'global-default-override-by-step-config-override-0':
                    'global-default-override-me',
                    'default-overriden-by-global-default': 'global-default',
                },
                'global-environment-defaults': {
                    'env1': {
                        'global-default-override-by-global-env-default-0':
                        'global-environment-defaults-1',
                        'global-env-default-env1-unique-0':
                        'global-environment-defaults-1',
                        'global-env-default-override-by-step-config':
                        'global-environment-defaults-1',
                        'default-overriden-by-global-env-default':
                        'global-environment-defaults-1'
                    },
                    'env2': {
                        'global-default-override-by-global-env-default-0':
                        'global-environment-defaults-2',
                        'global-env-default-env2-unique-0':
                        'global-environment-defaults-2',
                        'global-env-default-override-by-step-config':
                        'global-environment-defaults-2',
                        'default-overriden-by-global-env-default':
                        'global-environment-defaults-2'
                    }
                },
                'step-foo': [{
                    'implementer': 'foo1',
                    'config': {
                        'step-foo-foo1-unique-0': 'step-foo-foo1',
                        'step-foo-foo1-override-by-step-env-config':
                        'step-foo-foo-override-me',
                        'step-foo-foo1-override-by-step-override':
                        'step-foo-foo-override-me',
                        'global-default-override-by-step-config-0':
                        'step-foo-foo1',
                        'global-env-default-override-by-step-config':
                        'step-foo-foo1',
                        'default-overriden-by-step-config': 'step-foo-foo1'
                    },
                    'environment-config': {
                        'env1': {
                            'step-foo-foo1-override-by-step-env-config':
                            'step-foo-foo-env1',
                            'global-default-override-by-step-env-config-0':
                            'step-foo-foo-env1',
                            'step-foo-foo1-env1-unique-0':
                            'step-foo-foo-env1',
                            'step-foo-foo1-env-specific':
                            'step-foo-foo-env1',
                            'default-overriden-by-step-env-config':
                            'step-foo-foo-env1',
                        },
                        'env2': {
                            'step-foo-foo1-override-by-step-env-config':
                            'step-foo-foo-env2',
                            'global-default-override-by-step-env-config-0':
                            'step-foo-foo-env2',
                            'step-foo-foo1-env2-unique-0':
                            'step-foo-foo-env2',
                            'step-foo-foo1-env-specific':
                            'step-foo-foo-env2',
                            'default-overriden-by-step-env-config':
                            'step-foo-foo-env2',
                        }
                    }
                }]
            }
        })

        config.set_step_config_overrides(
            'step-foo', {
                'global-default-override-by-step-config-override-0':
                'step-foo-step-config-override',
                'step-foo-foo1-override-by-step-override':
                'step-foo-step-config-override',
                'step-config-override-unique-0':
                'step-config-override-unique',
                'default-overriden-by-step-config-overrides':
                'step-foo-step-config-override'
            })

        step_config = config.get_step_config('step-foo')
        sub_step = step_config.get_sub_step('foo1')

        defaults = {
            'default-unique': 'not-overriden-default',
            'default-overriden-by-global-default': 'override-me',
            'default-overriden-by-global-env-default': 'override-me',
            'default-overriden-by-step-config': 'override-me',
            'default-overriden-by-step-env-config': 'override-me',
            'default-overriden-by-step-config-overrides': 'override-me'
        }

        runtime_step_config_no_given_env = sub_step.get_copy_of_runtime_step_config(
            None, defaults)
        self.assertEqual(
            ConfigValue.convert_leaves_to_values(
                runtime_step_config_no_given_env), {
                    'global-default-unique-0':
                    'global-default',
                    'global-default-override-by-global-env-default-0':
                    'global-default-override-me',
                    'global-default-override-by-step-config-0':
                    'step-foo-foo1',
                    'global-default-override-by-step-env-config-0':
                    'global-default-override-me',
                    'step-foo-foo1-unique-0':
                    'step-foo-foo1',
                    'step-foo-foo1-override-by-step-env-config':
                    'step-foo-foo-override-me',
                    'global-default-override-by-step-config-override-0':
                    'step-foo-step-config-override',
                    'step-foo-foo1-override-by-step-override':
                    'step-foo-step-config-override',
                    'step-config-override-unique-0':
                    'step-config-override-unique',
                    'global-env-default-override-by-step-config':
                    'step-foo-foo1',
                    'default-unique':
                    'not-overriden-default',
                    'default-overriden-by-global-default':
                    'global-default',
                    'default-overriden-by-global-env-default':
                    'override-me',
                    'default-overriden-by-step-config':
                    'step-foo-foo1',
                    'default-overriden-by-step-env-config':
                    'override-me',
                    'default-overriden-by-step-config-overrides':
                    'step-foo-step-config-override'
                })

        runtime_step_config_env1 = sub_step.get_copy_of_runtime_step_config(
            'env1', defaults)
        self.assertEqual(
            ConfigValue.convert_leaves_to_values(runtime_step_config_env1), {
                'environment-name':
                'env1',
                'global-default-unique-0':
                'global-default',
                'global-default-override-by-global-env-default-0':
                'global-environment-defaults-1',
                'global-default-override-by-step-config-0':
                'step-foo-foo1',
                'global-default-override-by-step-env-config-0':
                'step-foo-foo-env1',
                'step-foo-foo1-unique-0':
                'step-foo-foo1',
                'step-foo-foo1-override-by-step-env-config':
                'step-foo-foo-env1',
                'global-default-override-by-step-config-override-0':
                'step-foo-step-config-override',
                'step-foo-foo1-override-by-step-override':
                'step-foo-step-config-override',
                'step-config-override-unique-0':
                'step-config-override-unique',
                'global-env-default-override-by-step-config':
                'step-foo-foo1',
                'global-env-default-env1-unique-0':
                'global-environment-defaults-1',
                'step-foo-foo1-env1-unique-0':
                'step-foo-foo-env1',
                'step-foo-foo1-env-specific':
                'step-foo-foo-env1',
                'default-unique':
                'not-overriden-default',
                'default-overriden-by-global-default':
                'global-default',
                'default-overriden-by-global-env-default':
                'global-environment-defaults-1',
                'default-overriden-by-step-config':
                'step-foo-foo1',
                'default-overriden-by-step-env-config':
                'step-foo-foo-env1',
                'default-overriden-by-step-config-overrides':
                'step-foo-step-config-override'
            })

        runtime_step_config_env2 = sub_step.get_copy_of_runtime_step_config(
            'env2', defaults)
        self.assertEqual(
            ConfigValue.convert_leaves_to_values(runtime_step_config_env2), {
                'environment-name':
                'env2',
                'global-default-unique-0':
                'global-default',
                'global-default-override-by-global-env-default-0':
                'global-environment-defaults-2',
                'global-default-override-by-step-config-0':
                'step-foo-foo1',
                'global-default-override-by-step-env-config-0':
                'step-foo-foo-env2',
                'step-foo-foo1-unique-0':
                'step-foo-foo1',
                'step-foo-foo1-override-by-step-env-config':
                'step-foo-foo-env2',
                'global-default-override-by-step-config-override-0':
                'step-foo-step-config-override',
                'step-foo-foo1-override-by-step-override':
                'step-foo-step-config-override',
                'step-config-override-unique-0':
                'step-config-override-unique',
                'global-env-default-override-by-step-config':
                'step-foo-foo1',
                'global-env-default-env2-unique-0':
                'global-environment-defaults-2',
                'step-foo-foo1-env2-unique-0':
                'step-foo-foo-env2',
                'step-foo-foo1-env-specific':
                'step-foo-foo-env2',
                'default-unique':
                'not-overriden-default',
                'default-overriden-by-global-default':
                'global-default',
                'default-overriden-by-global-env-default':
                'global-environment-defaults-2',
                'default-overriden-by-step-config':
                'step-foo-foo1',
                'default-overriden-by-step-env-config':
                'step-foo-foo-env2',
                'default-overriden-by-step-config-overrides':
                'step-foo-step-config-override'
            })
    def test__eq__is_equal_diff_source_and_path_parts(self):
        test1 = ConfigValue('foo1', "does not matter for equality", ['a','b'])
        test2 = ConfigValue('foo1', "really does not matter for equality", ['1', '2'])

        self.assertEqual(test1, test2)
    def test__eq__is_not_equal_different_objects(self):
        test1 = ConfigValue('foo1', None, None)
        test2 = "foo1"

        self.assertNotEqual(test1, test2)