def test_resolve_service_from_env(self, monkeypatch, service): monkeypatch.setenv(service.upper() + "_SERVICE_HOST", "host") monkeypatch.setenv(service.upper() + "_SERVICE_PORT", "1234") config = Configuration([]) host, port = config.resolve_service(service) assert host == "host" assert port == 1234
def test_has_service(self, monkeypatch, service_exists): service = "service" if service_exists: monkeypatch.setenv(service.upper() + "_SERVICE_HOST", "host") monkeypatch.setenv(service.upper() + "_SERVICE_PORT", "1234") config = Configuration([]) assert service_exists == config.has_service(service)
def test_resolve_service_from_dns(self, dns_resolver): dns_resolver.side_effect = None dns_resolver.return_value = dns.rdataset.from_text( 'IN', 'SRV', 3600, '10 100 7794 kafka-pipeline.default.svc.cluster.local.') config = Configuration([]) target, port = config.resolve_service('service', 'port') assert target == 'kafka-pipeline.default.svc.cluster.local' assert port == 7794
def test_global_env_keyvalue(self): args = ("pattern=value", "FIAAS_ENV=test") config = Configuration(["--global-env=%s" % arg for arg in args]) assert config.global_env == { KeyValue(arg).key: KeyValue(arg).value for arg in args }
def test_resolve_namespace_env_should_be_used_if_unable_to_open_file( self, getenv): expected = "namespace-from-env" getenv.side_effect = lambda key: expected if key == "NAMESPACE" else None config = Configuration([]) assert config.namespace == expected
def config(self): config = mock.create_autospec(Configuration([]), spec_set=True) config.ingress_suffixes = ["svc.test.example.com", "127.0.0.1.xip.io"] config.host_rewrite_rules = [ HostRewriteRule("rewrite.example.com=test.rewrite.example.com"), HostRewriteRule(r"([a-z0-9](?:[-a-z0-9]*[a-z0-9])?).rewrite.example.com=test.\1.rewrite.example.com") ] return config
def test_datadog_global_tags_keyvalue(self): args = ("pattern=value", "FIAAS_DD_tag=test") config = Configuration( ["--datadog-global-tags=%s" % arg for arg in args]) assert config.datadog_global_tags == { KeyValue(arg).key: KeyValue(arg).value for arg in args }
def test_host_rewrite_rules(self): args = ("pattern=value", r"(\d+)\.\example\.com=$1.example.net", "www.([a-z]+.com)={env}.$1") config = Configuration( ["--host-rewrite-rule=%s" % arg for arg in args]) assert config.host_rewrite_rules == [ HostRewriteRule(arg) for arg in args ]
def test_tls_issuers(self): issuer_types = ["foo.bar.com=issuer", "woo.foo.bar.com=other"] args = [ "--tls-certificate-issuer-type-overrides=%s" % issuer_type for issuer_type in issuer_types ] config = Configuration(args) assert config.tls_certificate_issuer_type_overrides == { "foo.bar.com": "issuer", "woo.foo.bar.com": "other" }
def config(self, request, environment): infra, global_env, use_in_memory_emptydirs = request.param config = mock.create_autospec(Configuration([]), spec_set=True) config.infrastructure = infra config.environment = environment config.global_env = global_env config.pre_stop_delay = 1 config.log_format = "json" config.use_in_memory_emptydirs = use_in_memory_emptydirs config.deployment_max_surge = u"25%" config.deployment_max_unavailable = 0 yield config
def config(self): config = mock.create_autospec(Configuration([]), spec_set=True) config.ingress_suffixes = ["svc.test.example.com", "127.0.0.1.xip.io"] config.host_rewrite_rules = [ HostRewriteRule("rewrite.example.com=test.rewrite.example.com"), HostRewriteRule( r"([a-z0-9](?:[-a-z0-9]*[a-z0-9])?).rewrite.example.com=test.\1.rewrite.example.com" ) ] config.tls_certificate_issuer_type_default = DEFAULT_TLS_ISSUER config.tls_certificate_issuer_type_overrides = {} return config
def test_default_parameter_values(self): config = Configuration([]) assert not config.debug assert config.api_server == 'https://kubernetes.default.svc.cluster.local' assert config.api_token is None assert config.environment == "" assert config.infrastructure == "diy" assert config.log_format == "plain" assert config.image == "" assert config.enable_deprecated_multi_namespace_support is False assert config.enable_deprecated_tls_entry_per_host is False
def test_host_rewrite_rules_from_file(self, tmpdir): args = ("pattern=value", r"(\d+)\.\example\.com=$1.example.net", "www.([a-z]+.com)={env}.$1") config_file = tmpdir.join("config.yaml") with config_file.open("w") as fobj: pyaml.dump({"host-rewrite-rule": args}, fobj, safe=True, default_style='"') config = Configuration(["--config-file", config_file.strpath]) assert config.host_rewrite_rules == [ HostRewriteRule(arg) for arg in args ]
def test_behavior_for_undefined_flags_in_config_yml(self, tmpdir): config_flags = { "undefined_configuration_parameter": "a value", "debug": "true", } config_file = tmpdir.join("config.yaml") with config_file.open("w") as fobj: pyaml.dump(config_flags, fobj, safe=True, default_style='"') config = Configuration(["--config-file", config_file.strpath]) # Defined configuration flags should be set assert config.debug is True # Undefined configuration flags should not be available with pytest.raises(AttributeError): config.undefined_configuration_parameter
def test_log_format_param(self, format): config = Configuration(["--log-format", format]) assert config.log_format == format
def test_invalid_log_format_env(self, monkeypatch): monkeypatch.setenv("LOG_FORMAT", "fail") with pytest.raises(SystemExit): Configuration([])
def test_resolve_log_format_env(self, monkeypatch, format): monkeypatch.setenv("LOG_FORMAT", format) config = Configuration([]) assert config.log_format == format
def test_resolve_namespace_raise_if_unable_to_open_file_and_no_env_var( self, getenv): getenv.return_value = None with pytest.raises(InvalidConfigurationException): Configuration([])
def test_infrastructure_env(self, monkeypatch): monkeypatch.setenv("FIAAS_INFRASTRUCTURE", "gke") config = Configuration([]) assert config.infrastructure == "gke"
def test_infrastructure_param(self): config = Configuration(["--infrastructure", "gke"]) assert config.infrastructure == "gke"
def test_env(self, monkeypatch, env, key): monkeypatch.setenv(env, "value") config = Configuration([]) assert getattr(config, key) == "value"
def test_mutually_exclusive_lists(self): with pytest.raises(SystemExit): Configuration( ["--blacklist", "blacklisted", "--whitelist", "whitelisted"])
def test_config_from_file(self, key, attr, value, tmpdir): config_file = tmpdir.join("config.yaml") with config_file.open("w") as fobj: pyaml.dump({key: value}, fobj, safe=True, default_style='"') config = Configuration(["--config-file", config_file.strpath]) assert getattr(config, attr) == value
def test_proxy(self, monkeypatch, cmdline, envvar, expected): if envvar: monkeypatch.setenv("http_proxy", envvar) config = Configuration(cmdline) assert config.proxy == expected
def test_invalid_log_format_param(self): with pytest.raises(SystemExit): Configuration(["--log-format", "fail"])
def test_resolve_namespace_file_should_take_precedence_over_env(self): config = Configuration([]) assert config.namespace == "namespace-from-file"
def test_parameters(self, arg, key): config = Configuration([arg, "value"]) assert getattr(config, key) == "value"
def k8s(self, service_deployer, deployment_deployer, ingress_deployer, autoscaler_deployer): config = mock.create_autospec(Configuration([]), spec_set=True) config.version = FIAAS_VERSION return K8s(config, service_deployer, deployment_deployer, ingress_deployer, autoscaler_deployer)
def config(self): return Configuration([])
def test_flags(self, key): flag = "--{}".format(key.replace("_", "-")) config = Configuration([]) assert getattr(config, key) is False config = Configuration([flag]) assert getattr(config, key) is True