Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#291: Fixed that test container gets rebuild when force_rebuild is true #315

Merged
merged 5 commits into from
May 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/changes/changes_1.6.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ If you need further versions, please open an issue.
- #294: Fixed that the client logging config gets overwritten
- #295: Fixed that the test_container_content parameter pollutes the logs
- #300: Fixed BucketFS uploads during reusing of an environment
- #291: Fixed that test container gets rebuild when force_rebuild is true
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
from typing import Set, Dict

from luigi.parameter import ParameterVisibility

from exasol_integration_test_docker_environment.lib.base.json_pickle_parameter import JsonPickleParameter
from exasol_integration_test_docker_environment.lib.config.build_config import build_config
from exasol_integration_test_docker_environment.lib.config.docker_config import target_docker_repository_config, \
source_docker_repository_config
from exasol_integration_test_docker_environment.lib.data.test_container_content_description import \
TestContainerContentDescription
from exasol_integration_test_docker_environment.lib.docker.images.create.docker_build_base import DockerBuildBase
from exasol_integration_test_docker_environment.lib.docker.images.create.docker_image_analyze_task import \
DockerAnalyzeImageTask
Expand Down Expand Up @@ -45,7 +41,8 @@ def get_dockerfile(self):
return str(self.test_container_content.docker_file)

def is_rebuild_requested(self) -> bool:
return False
config = build_config()
return config.force_rebuild


class DockerTestContainerBuildBase(DockerBuildBase, TestContainerParameter):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,18 @@
from exasol_integration_test_docker_environment.lib.data.test_container_content_description import \
TestContainerContentDescription, TestContainerBuildMapping, TestContainerRuntimeMapping

TEST_CONTAINER_PATH = Path(__file__).parent / "resources" / "test_container"
TEST_CONTAINER_ROOT_PATH = Path(__file__).parent / "resources" / "test_container"

FULL_TEST_CONTAINER_PATH = TEST_CONTAINER_ROOT_PATH / "full"
MOCK_TEST_CONTAINER_PATH = TEST_CONTAINER_ROOT_PATH / "mock"

def get_test_container_content(runtime_mapping: Tuple[TestContainerRuntimeMapping] = tuple()) \

def get_test_container_content(test_container_path: Path = FULL_TEST_CONTAINER_PATH,
runtime_mapping: Tuple[TestContainerRuntimeMapping] = tuple()) \
-> TestContainerContentDescription:
return TestContainerContentDescription(
docker_file=f"{TEST_CONTAINER_PATH}/Dockerfile",
build_files_and_directories=[TestContainerBuildMapping(source=TEST_CONTAINER_PATH / "test.txt",
docker_file=str(test_container_path / "Dockerfile"),
build_files_and_directories=[TestContainerBuildMapping(source=test_container_path / "test.txt",
target="test.text")],
runtime_mappings=list(runtime_mapping)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
FROM ubuntu:20.04

COPY test.text /test.text
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Empty File
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,15 @@

from exasol_integration_test_docker_environment.lib import api
from exasol_integration_test_docker_environment.lib.docker import ContextDockerClient
from exasol_integration_test_docker_environment.test.get_test_container_content import get_test_container_content
from exasol_integration_test_docker_environment.lib.docker.images.image_info import ImageState
from exasol_integration_test_docker_environment.test.get_test_container_content import get_test_container_content, \
MOCK_TEST_CONTAINER_PATH

from exasol_integration_test_docker_environment.testing import luigi_utils
from exasol_integration_test_docker_environment.testing.api_test_environment import ApiTestEnvironment

TEST_CONTAINER_CONTENT = get_test_container_content(MOCK_TEST_CONTAINER_PATH)


class APIBuildTestContainerTest(unittest.TestCase):

Expand All @@ -21,11 +26,31 @@ def tearDown(self):
def test_build_test_container(self):
docker_repository_name = self.test_environment.docker_repository_name
image_info = api.build_test_container(target_docker_repository_name=docker_repository_name,
test_container_content=get_test_container_content())
test_container_content=TEST_CONTAINER_CONTENT)
with ContextDockerClient() as docker_client:
image = docker_client.images.get(image_info.get_target_complete_name())
assert len(image.tags) == 1
assert image.tags[0] == image_info.get_target_complete_name()
self.assertEqual(len(image.tags), 1)
self.assertEqual(image.tags[0], image_info.get_target_complete_name())
self.assertEqual(image_info.image_state, ImageState.WAS_BUILD.name)

def test_build_test_container_use_cached(self):
docker_repository_name = self.test_environment.docker_repository_name
image_info1 = api.build_test_container(target_docker_repository_name=docker_repository_name,
test_container_content=TEST_CONTAINER_CONTENT)
self.assertEqual(image_info1.image_state, ImageState.WAS_BUILD.name)
image_info2 = api.build_test_container(target_docker_repository_name=docker_repository_name,
test_container_content=TEST_CONTAINER_CONTENT)
self.assertEqual(image_info2.image_state, ImageState.USED_LOCAL.name)

def test_build_test_container_force_rebuild(self):
docker_repository_name = self.test_environment.docker_repository_name
image_info1 = api.build_test_container(target_docker_repository_name=docker_repository_name,
test_container_content=TEST_CONTAINER_CONTENT)
self.assertEqual(image_info1.image_state, ImageState.WAS_BUILD.name)
image_info2 = api.build_test_container(target_docker_repository_name=docker_repository_name,
test_container_content=TEST_CONTAINER_CONTENT,
force_rebuild=True)
self.assertEqual(image_info2.image_state, ImageState.WAS_BUILD.name)


if __name__ == '__main__':
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ def _assert_deployment_available(self, environment_info: EnvironmentInfo) -> Non
self.assertEqual(exit_code, 0)
self.assertEqual(output.decode("utf-8"), "test")

def _assert_deployment_not_shared(self, environment_info: EnvironmentInfo, temp_path: Path) -> bool:
def _assert_deployment_not_shared(self, environment_info: EnvironmentInfo, temp_path: Path):
with ContextDockerClient() as docker_client:
test_container = docker_client.containers.get(environment_info.test_container_info.container_name)
exit_code, output = test_container.exec_run("touch /test_target/test_new.txt")
Expand All @@ -131,7 +131,7 @@ def test_runtime_mapping_without_deployment(self):
environment = \
self.test_environment.spawn_docker_test_environment_with_test_container(
name=self.docker_environment_name,
test_container_content=get_test_container_content((mapping,))
test_container_content=get_test_container_content(runtime_mapping=(mapping,))
)
environment_info = environment.environment_info
self._assert_deployment_available(environment_info)
Expand All @@ -146,7 +146,7 @@ def test_runtime_mapping_deployment(self):
environment = \
self.test_environment.spawn_docker_test_environment_with_test_container(
name=self.docker_environment_name,
test_container_content=get_test_container_content((mapping,))
test_container_content=get_test_container_content(runtime_mapping=(mapping,))
)
environment_info = environment.environment_info
self._assert_deployment_available(environment_info)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def setUpClass(cls):
cls.docker_environment_name = cls.__name__
test_data_folder = Path(__file__).parent / "resources" / "test_data"
test_container_runtime_mapping = TestContainerRuntimeMapping(source=test_data_folder, target="/test_data")
test_container_content = get_test_container_content((test_container_runtime_mapping,))
test_container_content = get_test_container_content(runtime_mapping=(test_container_runtime_mapping,))
cls.environment = \
cls.test_environment.spawn_docker_test_environment_with_test_container(
name=cls.docker_environment_name,
Expand Down