def test_requirement_status_repr():
    requirement = EnvVarRequirement(registry=RequirementsRegistry(),
                                    env_var='FOO')
    status = requirement.check_status(dict(FOO=''), tmp_local_state_file(),
                                      'default', UserConfigOverrides())
    assert "RequirementStatus(False,'Environment variable FOO is not set.',EnvVarRequirement(env_var='FOO'))" == repr(
        status)
def test_requirement_default_as_string():
    no_default = dict()
    string_default = dict(default="foo")
    int_default = dict(default=42)
    float_default = dict(default=3.14)

    req = EnvVarRequirement(registry=RequirementsRegistry(),
                            env_var='FOO',
                            options=no_default)
    assert req.default_as_string is None

    req = EnvVarRequirement(registry=RequirementsRegistry(),
                            env_var='FOO',
                            options=string_default)
    assert req.default_as_string == "foo"

    req = EnvVarRequirement(registry=RequirementsRegistry(),
                            env_var='FOO',
                            options=int_default)
    assert req.default_as_string == "42"

    req = EnvVarRequirement(registry=RequirementsRegistry(),
                            env_var='FOO',
                            options=float_default)
    assert req.default_as_string == "3.14"
예제 #3
0
    def check_provide_contents(dirname):
        environ = dict()
        local_state_file = LocalStateFile.load_for_directory(dirname)
        local_state_file.set_service_run_state("myservice", dict(port=42))
        requirement = EnvVarRequirement(RequirementsRegistry(), env_var="FOO")
        status = requirement.check_status(environ, local_state_file, 'default',
                                          UserConfigOverrides())
        context = ProvideContext(environ=environ,
                                 local_state_file=local_state_file,
                                 default_env_spec_name='default',
                                 status=status,
                                 mode=PROVIDE_MODE_DEVELOPMENT,
                                 frontend=NullFrontend())

        def transform_it(state):
            assert 42 == state['port']
            state['port'] = 43
            state['foo'] = 'bar'
            return 1234

        result = context.transform_service_run_state("myservice", transform_it)
        assert 1234 == result
        assert dict(
            port=43,
            foo='bar') == local_state_file.get_service_run_state("myservice")
def test_empty_variable_treated_as_unset():
    requirement = EnvVarRequirement(registry=RequirementsRegistry(),
                                    env_var='FOO')
    status = requirement.check_status(dict(FOO=''), tmp_local_state_file(),
                                      'default', UserConfigOverrides())
    assert not status
    assert "Environment variable FOO is not set." == status.status_description
    assert [] == status.errors
예제 #5
0
 def check_provide_contents(dirname):
     environ = dict(foo='bar')
     local_state_file = LocalStateFile.load_for_directory(dirname)
     requirement = EnvVarRequirement(RequirementsRegistry(), env_var="FOO")
     status = requirement.check_status(environ, local_state_file, 'default', UserConfigOverrides())
     context = ProvideContext(environ=environ,
                              local_state_file=local_state_file,
                              default_env_spec_name='default',
                              status=status,
                              mode=PROVIDE_MODE_DEVELOPMENT,
                              frontend=NullFrontend())
     assert dict(foo='bar') == context.environ
     assert context.status is status
예제 #6
0
 def check_provide_contents(dirname):
     environ = dict()
     local_state_file = LocalStateFile.load_for_directory(dirname)
     requirement = EnvVarRequirement(RequirementsRegistry(), env_var="FOO")
     status = requirement.check_status(environ, local_state_file, 'default', UserConfigOverrides())
     context = ProvideContext(environ=environ,
                              local_state_file=local_state_file,
                              default_env_spec_name='default',
                              status=status,
                              mode=PROVIDE_MODE_DEVELOPMENT,
                              frontend=NullFrontend())
     with pytest.raises(IOError) as excinfo:
         context.ensure_service_directory("foo")
     assert "this is not EEXIST" in repr(excinfo.value)
예제 #7
0
    def _parse(cls, varname, item, problems):
        """Parse an item from the services: section."""
        service_type = None
        if is_string(item):
            service_type = item
            options = dict(type=service_type)
        elif isinstance(item, dict):
            service_type = item.get('type', None)
            if service_type is None:
                problems.append(
                    "Service {} doesn't contain a 'type' field.".format(
                        varname))
                return None
            options = deepcopy(item)
        else:
            problems.append(
                "Service {} should have a service type string or a dictionary as its value."
                .format(varname))
            return None

        if not EnvVarRequirement._parse_default(options, varname, problems):
            return None

        return dict(service_type=service_type,
                    env_var=varname,
                    options=options)
예제 #8
0
    def check_provide_contents(dirname):
        environ = dict()
        local_state_file = LocalStateFile.load_for_directory(dirname)
        requirement = EnvVarRequirement(RequirementsRegistry(), env_var="FOO")
        status = requirement.check_status(environ, local_state_file, 'default', UserConfigOverrides())
        context = ProvideContext(environ=environ,
                                 local_state_file=local_state_file,
                                 default_env_spec_name='default',
                                 status=status,
                                 mode=PROVIDE_MODE_DEVELOPMENT,
                                 frontend=NullFrontend())
        workpath = context.ensure_service_directory("foo")
        assert os.path.isdir(workpath)
        assert workpath.endswith("foo")
        parent = os.path.dirname(workpath)
        assert parent.endswith("services")
        parent = os.path.dirname(parent)
        assert parent == dirname

        # be sure we can create if it already exists
        workpath2 = context.ensure_service_directory("foo")
        assert os.path.isdir(workpath2)
        assert workpath == workpath2
예제 #9
0
def test_requirement_parse_default():
    null_default = dict(default=None)
    string_default = dict(default="foo")
    int_default = dict(default=42)
    float_default = dict(default=3.14)

    # invalid defaults
    bool_default = dict(default=True)
    list_default = dict(default=[])

    def type_error(value):
        return "default value for variable FOO must be null, a string, or a number, not {value}.".format(value=value)

    problems = []

    EnvVarRequirement._parse_default(null_default, "FOO", problems)
    assert null_default == dict()
    assert problems == []

    EnvVarRequirement._parse_default(string_default, "FOO", problems)
    assert string_default == dict(default="foo")
    assert problems == []

    EnvVarRequirement._parse_default(int_default, "FOO", problems)
    assert int_default == dict(default=42)
    assert problems == []

    EnvVarRequirement._parse_default(float_default, "FOO", problems)
    assert float_default == dict(default=3.14)
    assert problems == []

    EnvVarRequirement._parse_default(bool_default, "FOO", problems)
    assert problems == [type_error(True)]

    problems = []
    EnvVarRequirement._parse_default(list_default, "FOO", problems)
    assert problems == [type_error([])]
예제 #10
0
def test_requirement_repr():
    requirement = EnvVarRequirement(registry=RequirementsRegistry(), env_var='FOO')
    assert "EnvVarRequirement(env_var='FOO')" == repr(requirement)
예제 #11
0
 def req(env_var, options=None):
     return EnvVarRequirement(registry=RequirementsRegistry(), env_var=env_var, options=options)