Skip to content

Commit

Permalink
finish the resource package tweaks and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
vreuter committed Jun 8, 2017
1 parent 8082842 commit d9cdad0
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 12 deletions.
10 changes: 8 additions & 2 deletions looper/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1819,9 +1819,13 @@ def choose_resource_package(self, pipeline_name, file_size):
return {}

# Require default resource package specification.
if DEFAULT_COMPUTE_RESOURCES_NAME not in resources:
try:
default_resource_package = \
resources[DEFAULT_COMPUTE_RESOURCES_NAME]
except KeyError:
raise _InvalidResourceSpecificationException(
"Pipeline resources specification lacks 'default' section")
"Pipeline resources specification lacks '{}' section".
format(DEFAULT_COMPUTE_RESOURCES_NAME))

# Parse min file size to trigger use of a resource package.
def file_size_ante(name, data):
Expand All @@ -1840,6 +1844,8 @@ def file_size_ante(name, data):
return fsize

# Enforce default package minimum of 0.
if "file_size" in default_resource_package:
del default_resource_package["file_size"]
resources[DEFAULT_COMPUTE_RESOURCES_NAME]["min_file_size"] = 0
# Sort packages by descending file size minimum to return first
# package for which given file size satisfies the minimum.
Expand Down
71 changes: 61 additions & 10 deletions tests/models/independent/test_PipelineInterface.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,8 @@ def test_negative_file_size_request(


@pytest.mark.parametrize(argnames="file_size", argvalues=[0, 10, 101])
def test_resources_not_required(self, use_new_file_size, file_size, pi_with_resources):
def test_resources_not_required(
self, use_new_file_size, file_size, pi_with_resources):
""" Compute resource specification is optional. """
pi = pi_with_resources
for pipe_data in pi.pipelines:
Expand All @@ -211,7 +212,8 @@ def test_selects_proper_resource_package(
for pipe_name, pipe_data in pi_with_resources:
observed_package = pi_with_resources.choose_resource_package(
pipe_name, file_size)
expected_package = copy.deepcopy(pipe_data["resources"][expected_package_name])
expected_package = copy.deepcopy(
pipe_data["resources"][expected_package_name])
assert expected_package == observed_package


Expand Down Expand Up @@ -265,17 +267,66 @@ def clear_file_size(resource_package):
pi.choose_resource_package(pipe_name, 0.001)


@pytest.mark.skip("Not implemented")
@pytest.mark.parametrize(
argnames="min_file_size", argvalues=[None, -1, 0, 1])
def test_default_package_enforces_zero_file_size(self, use_new_file_size, min_file_size):
argnames="min_file_size", argvalues=[-1, 1])
def test_default_package_new_name_zero_size(
self, use_new_file_size, min_file_size, pi_with_resources):
""" Default resource package sets minimum file size to zero. """
pass


@pytest.mark.skip("Not implemented")
def test_file_size_spec_required_for_non_default_packages(self, use_new_file_size):
pass
for pipe_name, pipe_data in pi_with_resources:
# Establish faulty default package setting for file size.
default_resource_package = pipe_data["resources"]["default"]
if use_new_file_size:
if "file_size" in default_resource_package:
del default_resource_package["file_size"]
default_resource_package["min_file_size"] = min_file_size
else:
if "min_file_size" in default_resource_package:
del default_resource_package["min_file_size"]
default_resource_package["file_size"] = min_file_size

# Get the resource package to validate.
# Requesting file size of 0 should always trigger default package.
observed_resource_package = \
pi_with_resources.choose_resource_package(pipe_name, 0)

# Default package is an early adopter of the new file size name.
expected_resource_package = copy.deepcopy(default_resource_package)
if "file_size" in expected_resource_package:
del expected_resource_package["file_size"]
# Default packages forces its file size value to 0.
expected_resource_package["min_file_size"] = 0

assert expected_resource_package == observed_resource_package


def test_file_size_spec_required_for_non_default_packages(
self, use_new_file_size, basic_pipe_iface_data):
""" Resource packages besides default require file size. """

# Establish the resource specification.
resource_package_data = {
"default": copy.deepcopy(DEFAULT_RESOURCES),
"huge": copy.deepcopy(HUGE_RESOURCES)}

# Remove file size for non-default; set it for default.
del resource_package_data["huge"]["file_size"]
if use_new_file_size:
resource_package_data["default"]["min_file_size"] = \
resource_package_data["default"].pop("file_size")

# Create the PipelineInterface.
for pipe_data in basic_pipe_iface_data.values():
pipe_data["resources"] = resource_package_data
pi = PipelineInterface(basic_pipe_iface_data)

# Attempt to select resource package should fail for each pipeline,
# regardless of the file size specification; restrict to nonnegative
# file size requests to avoid collision with ValueError that should
# arise if requesting resource package for a negative file size value.
for pipe_name in pi.pipeline_names:
with pytest.raises(KeyError):
pi.choose_resource_package(pipe_name, random.randrange(0, 10))



Expand Down

0 comments on commit d9cdad0

Please sign in to comment.