Skip to content

Commit

Permalink
Fix additional tests
Browse files Browse the repository at this point in the history
  • Loading branch information
saville committed Feb 6, 2024
1 parent a91382d commit 64dc67c
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 69 deletions.
6 changes: 4 additions & 2 deletions buildrunner/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
SOURCE_DOCKERFILE = os.path.join(os.path.dirname(__file__), "SourceDockerfile")


class BuildRunner: # pylint: disable=too-many-instance-attributes
class BuildRunner:
"""
Class used to manage running a build.
"""
Expand Down Expand Up @@ -221,7 +221,9 @@ def __init__(

if steps_to_run:
missing_steps = [
step for step in steps_to_run if step not in self.run_config["steps"]
step
for step in steps_to_run
if step not in buildrunner_config.run_config.steps
]
if missing_steps:
raise BuildRunnerConfigurationError(
Expand Down
2 changes: 1 addition & 1 deletion buildrunner/config/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ def validate_steps(cls, vals) -> None:
Validate the config file
Raises:
ValueError | pydantic.ValidationError : If the config file is invalid
ValueError : If the config file is invalid
"""

if not vals:
Expand Down
4 changes: 2 additions & 2 deletions buildrunner/config/validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ def validate_multiplatform_are_not_retagged(steps: Dict[str, Step]):
Validate multi-platform are not re-tagged
Raises:
ValueError | pydantic.ValidationError: If the config file is invalid
ValueError: If the config file is invalid
"""
step_images = {}

Expand Down Expand Up @@ -237,7 +237,7 @@ def validate_multiplatform_build(
mp_push_tags (Set[str]): Set of all tags used in multi-platform build steps
Raises:
ValueError | pydantic.ValidationError: If the config file is invalid
ValueError: If the config file is invalid
"""
# Iterate through each step and validate multi-platform multi-platform steps
for step_name, step in steps.items():
Expand Down
2 changes: 1 addition & 1 deletion buildrunner/steprunner/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ def run(self):
if not task_data:
continue
self.log.write(f"==> Running step: {self.name}:{task_name}\n")
if isinstance(task_data, StepBuild | StepRun):
if isinstance(task_data, (StepBuild, StepRun)):
if self.local_images:
task_data.pull = False
if self.platform:
Expand Down
27 changes: 15 additions & 12 deletions buildrunner/steprunner/tasks/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,18 +53,21 @@ def __init__(

buildrunner_config = BuildRunnerConfig.get_instance()

for cache_from_image in self.cache_from:
try:
self._docker_client.pull(cache_from_image, platform=self.platform)
# If the pull is successful, add the image to be cleaned up at the end of the script
self.step_runner.build_runner.generated_images.append(cache_from_image)
self.step_runner.log.write(
f"Using cache_from image: {cache_from_image}\n"
)
except Exception: # pylint: disable=broad-except
self.step_runner.log.write(
f"WARNING: Unable to pull the cache_from image: {cache_from_image}\n"
)
if self.cache_from:
for cache_from_image in self.cache_from:
try:
self._docker_client.pull(cache_from_image, platform=self.platform)
# If the pull is successful, add the image to be cleaned up at the end of the script
self.step_runner.build_runner.generated_images.append(
cache_from_image
)
self.step_runner.log.write(
f"Using cache_from image: {cache_from_image}\n"
)
except Exception: # pylint: disable=broad-except
self.step_runner.log.write(
f"WARNING: Unable to pull the cache_from image: {cache_from_image}\n"
)

for src_glob, dest_path in (step.inject or {}).items():
if not dest_path:
Expand Down
8 changes: 4 additions & 4 deletions buildrunner/steprunner/tasks/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -466,7 +466,7 @@ def _start_service_container(self, name, service: Service):

# see if there are any provisioners defined
_provisioners = None
if service.provisions:
if service.provisioners:
_provisioners = create_provisioners(
service.provisioners,
service_logger,
Expand Down Expand Up @@ -508,7 +508,7 @@ def _start_service_container(self, name, service: Service):

# wait for ports on this container to be listening
# before moving on
_wait_for = service.wait_for
_wait_for = []
if service.wait_for:
_wait_for = service.wait_for

Expand Down Expand Up @@ -564,8 +564,8 @@ def _start_service_container(self, name, service: Service):
# instantiate and start the runner
image_config = DockerRunner.ImageConfig(
_image,
service.pull if service.pull is not None else True,
service.platform,
self.step.pull if service.pull is not None else True,
self.step.platform,
)
service_runner = DockerRunner(
image_config,
Expand Down
20 changes: 9 additions & 11 deletions tests/test_dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import copy
import graphlib

from buildrunner import BuildRunnerConfig
from buildrunner.config import loader


class TestDependencies(unittest.TestCase):
Expand Down Expand Up @@ -104,7 +104,7 @@ def test_reorder_steps(self):
config[self.KEYWORD_VERSION] = 2.0
expected_step_names = iter(["step1", "step3", "step4", "step2"])

reordered_steps = BuildRunnerConfig._reorder_dependency_steps(config)
reordered_steps = loader._reorder_dependency_steps(config)

self.check_steps_equal(reordered_steps, expected_step_names)

Expand All @@ -113,15 +113,15 @@ def test_reorder_steps_higher_version(self):
config[self.KEYWORD_VERSION] = 2.1
expected_step_names = iter(["step1", "step3", "step4", "step2"])

reordered_steps = BuildRunnerConfig._reorder_dependency_steps(config)
reordered_steps = loader._reorder_dependency_steps(config)

self.check_steps_equal(reordered_steps, expected_step_names)

config = copy.deepcopy(self.config)
config[self.KEYWORD_VERSION] = 3.1
expected_step_names = iter(["step1", "step3", "step4", "step2"])

reordered_steps = BuildRunnerConfig._reorder_dependency_steps(config)
reordered_steps = loader._reorder_dependency_steps(config)

self.check_steps_equal(reordered_steps, expected_step_names)

Expand All @@ -134,23 +134,23 @@ def test_no_reorder(self):
if self.KEYWORD_DEPENDS in step:
del step[self.KEYWORD_DEPENDS]

reordered_steps = BuildRunnerConfig._reorder_dependency_steps(config)
reordered_steps = loader._reorder_dependency_steps(config)

self.assertDictEqual(config, reordered_steps)

def test_not_supported_version(self):
config = copy.deepcopy(self.config)
config[self.KEYWORD_VERSION] = 1.9

reordered_steps = BuildRunnerConfig._reorder_dependency_steps(config)
reordered_steps = loader._reorder_dependency_steps(config)

del reordered_steps[self.KEYWORD_VERSION]
self.assertDictEqual(self.config, reordered_steps)

def test_missing_version(self):
config = copy.deepcopy(self.config)

reordered_steps = BuildRunnerConfig._reorder_dependency_steps(config)
reordered_steps = loader._reorder_dependency_steps(config)

self.assertDictEqual(self.config, reordered_steps)

Expand All @@ -159,13 +159,11 @@ def test_cycle_dependency(self):
config[self.KEYWORD_VERSION] = 2.0
config[self.KEYWORD_STEPS]["step4"][self.KEYWORD_DEPENDS] = ["step3", "step2"]

self.assertRaises(
graphlib.CycleError, BuildRunnerConfig._reorder_dependency_steps, config
)
self.assertRaises(graphlib.CycleError, loader._reorder_dependency_steps, config)

def test_not_defined_dependency(self):
config = copy.deepcopy(self.config)
config[self.KEYWORD_VERSION] = 2.0
config[self.KEYWORD_STEPS]["step4"][self.KEYWORD_DEPENDS] = ["step1-typo"]

self.assertRaises(KeyError, BuildRunnerConfig._reorder_dependency_steps, config)
self.assertRaises(KeyError, loader._reorder_dependency_steps, config)
57 changes: 21 additions & 36 deletions tests/test_version.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import tempfile
from collections import OrderedDict

import pytest
from buildrunner.config import (
BuildRunnerConfig,
from buildrunner.config import loader
from buildrunner.config.loader import (
BuildRunnerVersionError,
ConfigVersionFormatError,
ConfigVersionTypeError,
Expand All @@ -19,38 +18,32 @@ def fixture_config_file():
yield config


@pytest.fixture(name="version_file")
def fixture_setup_version_file():
with tempfile.TemporaryDirectory() as tmp_dir_name:
version_file = f"{tmp_dir_name}/version.py"
@pytest.fixture(name="version_file", autouse=True)
def fixture_setup_version_file(tmp_path):
version_file = tmp_path / "version.py"
version_file.write_text(f"__version__ = '{buildrunner_version}'")
original_path = loader.VERSION_FILE_PATH
loader.VERSION_FILE_PATH = str(version_file)
yield str(version_file)
loader.VERSION_FILE_PATH = original_path

with open(version_file, "w") as file:
file.write(f"__version__ = '{buildrunner_version}'")

yield version_file
def test_valid_version_file(config):
loader._validate_version(config=config)


def test_valid_version_file(config, version_file):
BuildRunnerConfig._validate_version(
config=config, version_file_path=f"{version_file}"
)


def test_missing_version_file(config, version_file):
def test_missing_version_file(config):
# No exception for a missing version file it just prints a warning
BuildRunnerConfig._validate_version(
config=config, version_file_path=f"{version_file}-bogus"
)
loader.VERSION_FILE_PATH = "bogus"
loader._validate_version(config=config)


def test_missing_version_in_version_file(config, version_file):
with open(version_file, "w") as file:
file.truncate()

with pytest.raises(BuildRunnerVersionError):
BuildRunnerConfig._validate_version(
config=config, version_file_path=f"{version_file}"
)
loader._validate_version(config=config)


def test_invalid_delim_version(config, version_file):
Expand All @@ -59,9 +52,7 @@ def test_invalid_delim_version(config, version_file):
file.write("__version__: '1.3.4'")

with pytest.raises(ConfigVersionFormatError):
BuildRunnerConfig._validate_version(
config=config, version_file_path=f"{version_file}"
)
loader._validate_version(config=config)


def test_invalid_config_number_version(config, version_file):
Expand All @@ -70,9 +61,7 @@ def test_invalid_config_number_version(config, version_file):
file.write("__version__ = '1'")

with pytest.raises(ConfigVersionFormatError):
BuildRunnerConfig._validate_version(
config=config, version_file_path=f"{version_file}"
)
loader._validate_version(config=config)


def test_invalid_config_version_type(config, version_file):
Expand All @@ -81,15 +70,11 @@ def test_invalid_config_version_type(config, version_file):
file.write("__version__ = 'two.zero.five'")

with pytest.raises(ConfigVersionTypeError):
BuildRunnerConfig._validate_version(
config=config, version_file_path=f"{version_file}"
)
loader._validate_version(config=config)


def test_bad_version(config, version_file):
def test_bad_version(config):
config = OrderedDict({"version": 2.1})

with pytest.raises(ConfigVersionFormatError):
BuildRunnerConfig._validate_version(
config=config, version_file_path=f"{version_file}"
)
loader._validate_version(config=config)

0 comments on commit 64dc67c

Please sign in to comment.