def test_pull_base_image_plugin(df_base, parent_registry, expected_w_reg, expected_wo_reg): if MOCK: mock_docker(remember_images=True) tasker = DockerTasker() workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image') workflow.builder = MockBuilder() workflow.builder.base_image = ImageName.parse(df_base) assert not tasker.image_exists(BASE_IMAGE) assert not tasker.image_exists(BASE_IMAGE_W_REGISTRY) runner = PreBuildPluginsRunner( tasker, workflow, [{ 'name': PullBaseImagePlugin.key, 'args': {'parent_registry': parent_registry, 'parent_registry_insecure': True} }] ) runner.run() assert tasker.image_exists(BASE_IMAGE) == expected_wo_reg assert tasker.image_exists(BASE_IMAGE_W_REGISTRY) == expected_w_reg try: tasker.remove_image(BASE_IMAGE) tasker.remove_image(BASE_IMAGE_W_REGISTRY) except: pass
def test_pull_base_image_plugin(df_base, parent_registry, expected_w_reg, expected_wo_reg): if MOCK: mock_docker(remember_images=True) tasker = DockerTasker() workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image') workflow.builder = MockBuilder() workflow.builder.base_image = ImageName.parse(df_base) assert not tasker.image_exists(BASE_IMAGE) assert not tasker.image_exists(BASE_IMAGE_W_REGISTRY) runner = PreBuildPluginsRunner(tasker, workflow, [{ 'name': PullBaseImagePlugin.key, 'args': { 'parent_registry': parent_registry, 'parent_registry_insecure': True } }]) runner.run() assert tasker.image_exists(BASE_IMAGE) == expected_wo_reg assert tasker.image_exists(BASE_IMAGE_W_REGISTRY) == expected_w_reg try: tasker.remove_image(BASE_IMAGE) tasker.remove_image(BASE_IMAGE_W_REGISTRY) except: pass
def test_image_doesnt_exist(): image = "lerknglekrnglekrnglekrnglekrng" if MOCK: mock_docker(should_raise_error={'inspect_image': [image]}) t = DockerTasker() assert t.image_exists(image) is False
def test_image_doesnt_exist(): image = "lerknglekrnglekrnglekrnglekrng" if MOCK: mock_docker(should_raise_error={'inspect_image': [image]}) t = DockerTasker() assert t.image_exists(image) is False
def test_build_image_from_git(temp_image_name): if MOCK: mock_docker() t = DockerTasker() response = t.build_image_from_git(DOCKERFILE_GIT, temp_image_name, use_cache=True) list(response) assert response is not None assert t.image_exists(temp_image_name) t.remove_image(temp_image_name)
def test_build_image_from_git(temp_image_name): if MOCK: mock_docker() t = DockerTasker() response = t.build_image_from_git(DOCKERFILE_GIT, temp_image_name, use_cache=True) list(response) assert response is not None assert t.image_exists(temp_image_name) t.remove_image(temp_image_name)
def test_pull_base_image_plugin(parent_registry, df_base, expected, not_expected): if MOCK: mock_docker(remember_images=True) tasker = DockerTasker(retry_times=0) workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image') workflow.builder = MockBuilder() workflow.builder.base_image = ImageName.parse(df_base) expected = set(expected) expected.add(UNIQUE_ID) expected.add(df_base) all_images = set(expected).union(not_expected) for image in all_images: assert not tasker.image_exists(image) runner = PreBuildPluginsRunner( tasker, workflow, [{ 'name': PullBaseImagePlugin.key, 'args': {'parent_registry': parent_registry, 'parent_registry_insecure': True} }] ) runner.run() for image in expected: assert tasker.image_exists(image) assert image in workflow.pulled_base_images for image in not_expected: assert not tasker.image_exists(image) for image in workflow.pulled_base_images: assert tasker.image_exists(image) for image in all_images: try: tasker.remove_image(image) except: pass assert workflow.builder.base_image == df_base
def test_tag_and_push(temp_image_name): if MOCK: mock_docker() t = DockerTasker() temp_image_name.registry = LOCALHOST_REGISTRY temp_image_name.tag = "1" output = t.tag_and_push_image(INPUT_IMAGE, temp_image_name, insecure=True) assert output is not None assert t.image_exists(temp_image_name) t.remove_image(temp_image_name)
def test_image_creation_local_repo(): if MOCK: mock_docker() b = BuildImageBuilder(reactor_local_path=PARENT_DIR) df_dir_path = os.path.join(PARENT_DIR, 'images', 'privileged-builder') b.create_image(df_dir_path, TEST_BUILD_IMAGE) dt = DockerTasker() assert dt.image_exists(TEST_BUILD_IMAGE) dt.remove_image(TEST_BUILD_IMAGE)
def test_tag_and_push(temp_image_name): # noqa if MOCK: mock_docker() t = DockerTasker() temp_image_name.registry = LOCALHOST_REGISTRY temp_image_name.tag = "1" output = t.tag_and_push_image(INPUT_IMAGE, temp_image_name, insecure=True) assert output is not None assert t.image_exists(temp_image_name) t.remove_image(temp_image_name)
def test_image_creation_local_repo(): if MOCK: mock_docker() b = BuildImageBuilder(reactor_local_path=PARENT_DIR) df_dir_path = os.path.join(PARENT_DIR, 'images', 'privileged-builder') b.create_image(df_dir_path, TEST_BUILD_IMAGE) dt = DockerTasker() assert dt.image_exists(TEST_BUILD_IMAGE) dt.remove_image(TEST_BUILD_IMAGE)
def test_remove_image(temp_image_name): if MOCK: mock_docker(inspect_should_fail=True) t = DockerTasker() container_id = t.run(input_image_name, command="id") t.wait(container_id) image_id = t.commit_container(container_id, image=temp_image_name) try: t.remove_container(container_id) finally: t.remove_image(image_id) assert not t.image_exists(temp_image_name)
def test_tag_image(temp_image_name): if MOCK: mock_docker() t = DockerTasker() temp_image_name.registry = "somewhere.example.com" temp_image_name.tag = "1" img = t.tag_image(INPUT_IMAGE, temp_image_name) try: assert t.image_exists(temp_image_name) assert img == temp_image_name.to_str() finally: t.remove_image(temp_image_name)
def test_tag_image(temp_image_name): # noqa if MOCK: mock_docker() t = DockerTasker() temp_image_name.registry = "somewhere.example.com" temp_image_name.tag = "1" img = t.tag_image(INPUT_IMAGE, temp_image_name) try: assert t.image_exists(temp_image_name) assert img == temp_image_name.to_str() finally: t.remove_image(temp_image_name)
def test_remove_image(temp_image_name): # noqa if MOCK: mock_docker(inspect_should_fail=True) t = DockerTasker() container_id = t.run(input_image_name, command="id") t.wait(container_id) image_id = t.commit_container(container_id, image=temp_image_name) try: t.remove_container(container_id) finally: t.remove_image(image_id) assert not t.image_exists(temp_image_name)
def test_commit_container(temp_image_name): if MOCK: mock_docker() t = DockerTasker() container_id = t.run(INPUT_IMAGE, command="id") t.wait(container_id) image_id = t.commit_container(container_id, message="test message", image=temp_image_name) try: assert t.image_exists(image_id) finally: t.remove_container(container_id) t.remove_image(image_id)
def test_commit_container(temp_image_name): if MOCK: mock_docker() t = DockerTasker() container_id = t.run(INPUT_IMAGE, command="id") t.wait(container_id) image_id = t.commit_container(container_id, message="test message", image=temp_image_name) try: assert t.image_exists(image_id) finally: t.remove_container(container_id) t.remove_image(image_id)
def test_build_image_from_path(tmpdir, temp_image_name): if MOCK: mock_docker() tmpdir_path = str(tmpdir.realpath()) clone_git_repo(DOCKERFILE_GIT, tmpdir_path) df = tmpdir.join("Dockerfile") assert df.check() t = DockerTasker() response = t.build_image_from_path(tmpdir_path, temp_image_name, use_cache=True) list(response) assert response is not None assert t.image_exists(temp_image_name) t.remove_image(temp_image_name)
def test_build_image_from_path(tmpdir, temp_image_name): if MOCK: mock_docker() tmpdir_path = str(tmpdir.realpath()) clone_git_repo(DOCKERFILE_GIT, tmpdir_path) df = tmpdir.join("Dockerfile") assert df.check() t = DockerTasker() response = t.build_image_from_path(tmpdir_path, temp_image_name, use_cache=True) list(response) assert response is not None assert t.image_exists(temp_image_name) t.remove_image(temp_image_name)
def test_pull_base_image_special(add_another_parent, special_image, change_base, skip_parent, reactor_config_map, monkeypatch): monkeypatch.setenv("BUILD", json.dumps({ 'metadata': { 'name': UNIQUE_ID, }, })) if MOCK: mock_docker(remember_images=True) tasker = DockerTasker(retry_times=0) buildstep_plugin = [{ 'name': PLUGIN_BUILD_ORCHESTRATE_KEY, 'args': {'platforms': ['x86_64']}, }] workflow = DockerBuildWorkflow(MOCK_SOURCE, special_image, buildstep_plugins=buildstep_plugin,) builder = workflow.builder = MockBuilder() builder.parent_images = {} builder.set_base_image(special_image) if add_another_parent: builder.parent_images[BASE_IMAGE_NAME_W_SHA] = None parent_images = builder.parent_images expected = set([]) for nonce in range(len(parent_images) - skip_parent): expected.add("{}:{}".format(UNIQUE_ID, nonce)) for image in expected: assert not tasker.image_exists(image) if reactor_config_map: workflow.plugin_workspace[ReactorConfigPlugin.key] = {} workflow.plugin_workspace[ReactorConfigPlugin.key][WORKSPACE_CONF_KEY] =\ ReactorConfig({'version': 1, 'source_registry': {'url': LOCALHOST_REGISTRY, 'insecure': True}, 'registries_organization': None}) runner = PreBuildPluginsRunner( tasker, workflow, [{ 'name': PullBaseImagePlugin.key, 'args': {'parent_registry': LOCALHOST_REGISTRY, 'parent_registry_insecure': True, } }] ) runner.run() if change_base: assert workflow.builder.base_image.to_str().startswith(UNIQUE_ID) else: assert workflow.builder.base_image.to_str().startswith(special_image) for image in expected: assert tasker.image_exists(image) assert image in workflow.pulled_base_images for image in workflow.pulled_base_images: assert tasker.image_exists(image) for df, tagged in workflow.builder.parent_images.items(): assert tagged is not None, "Did not tag parent image " + str(df) assert len(set(workflow.builder.parent_images.values())) == len(workflow.builder.parent_images)
def test_image_exists(): if MOCK: mock_docker() t = DockerTasker() assert t.image_exists(input_image_name) is True
def test_image_exists(): if MOCK: mock_docker() t = DockerTasker() assert t.image_exists(input_image_name) is True
def test_pull_base_image_special(add_another_parent, special_image, change_base, monkeypatch): monkeypatch.setenv("BUILD", json.dumps({ 'metadata': { 'name': UNIQUE_ID, }, })) monkeypatch.setenv('USER_PARAMS', json.dumps({'image_tag': special_image})) if MOCK: mock_docker(remember_images=True) tasker = DockerTasker(retry_times=0) buildstep_plugin = [{ 'name': PLUGIN_BUILD_ORCHESTRATE_KEY, 'args': { 'platforms': ['x86_64'] }, }] workflow = DockerBuildWorkflow( source=MOCK_SOURCE, buildstep_plugins=buildstep_plugin, ) builder = workflow.builder = MockBuilder() dockerfile_images = [special_image] if add_another_parent: dockerfile_images.insert(0, BASE_IMAGE_W_REGISTRY_SHA) builder.dockerfile_images = DockerfileImages(dockerfile_images) expected = [] if special_image == SCRATCH_FROM: if add_another_parent: expected.append("{}:{}".format(UNIQUE_ID, 0)) elif special_image == 'koji/image-build': if add_another_parent: expected.append("{}:{}".format(UNIQUE_ID, 1)) else: expected.append("{}:{}".format(UNIQUE_ID, 0)) if add_another_parent: expected.append("{}:{}".format(UNIQUE_ID, 1)) for image in expected: assert not tasker.image_exists(image) workflow.plugin_workspace[ReactorConfigPlugin.key] = {} workflow.plugin_workspace[ReactorConfigPlugin.key][WORKSPACE_CONF_KEY] =\ ReactorConfig({'version': 1, 'source_registry': {'url': LOCALHOST_REGISTRY, 'insecure': True}, 'registries_organization': None}) runner = PreBuildPluginsRunner(tasker, workflow, [{ 'name': PullBaseImagePlugin.key, 'args': {} }]) runner.run() dockerfile_images = workflow.builder.dockerfile_images if change_base: assert dockerfile_images.base_image.to_str().startswith(UNIQUE_ID) else: if dockerfile_images.base_from_scratch: assert dockerfile_images.base_image == special_image else: assert dockerfile_images.base_image.to_str().startswith( special_image) for image in expected: assert tasker.image_exists(image) assert image in workflow.pulled_base_images for image in workflow.pulled_base_images: assert tasker.image_exists(image) for df, tagged in dockerfile_images.items(): if df.to_str().startswith('koji/image-build'): continue assert tagged is not None, "Did not tag parent image " + str(df) assert len(set(dockerfile_images.values())) == len(dockerfile_images)
def test_pull_base_image_plugin(parent_registry, df_base, expected, not_expected, reactor_config_map, inspect_only, workflow_callback=None, check_platforms=False, parent_images=None, organization=None, parent_images_digests=None): if MOCK: mock_docker(remember_images=True) tasker = DockerTasker(retry_times=0) buildstep_plugin = [{ 'name': PLUGIN_BUILD_ORCHESTRATE_KEY, 'args': {'platforms': ['x86_64']}, }] parent_images = parent_images or {ImageName.parse(df_base): None} workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image', buildstep_plugins=buildstep_plugin,) builder = workflow.builder = MockBuilder() builder.base_image = builder.original_base_image = ImageName.parse(df_base) builder.parent_images = parent_images expected = set(expected) for nonce in range(len(parent_images)): expected.add("{}:{}".format(UNIQUE_ID, nonce)) all_images = set(expected).union(not_expected) for image in all_images: assert not tasker.image_exists(image) if reactor_config_map: workflow.plugin_workspace[ReactorConfigPlugin.key] = {} workflow.plugin_workspace[ReactorConfigPlugin.key][WORKSPACE_CONF_KEY] =\ ReactorConfig({'version': 1, 'source_registry': {'url': parent_registry, 'insecure': True}, 'registries_organization': organization}) if workflow_callback: workflow = workflow_callback(workflow) runner = PreBuildPluginsRunner( tasker, workflow, [{ 'name': PullBaseImagePlugin.key, 'args': {'parent_registry': parent_registry, 'parent_registry_insecure': True, 'check_platforms': check_platforms, 'inspect_only': inspect_only, 'parent_images_digests': parent_images_digests, } }] ) if parent_registry is None and reactor_config_map: with pytest.raises(PluginFailedException): runner.run() return runner.run() if not inspect_only: assert workflow.builder.base_image.to_str().startswith(UNIQUE_ID + ":") for image in expected: if inspect_only: assert not tasker.image_exists(image) assert image not in workflow.pulled_base_images else: assert tasker.image_exists(image) assert image in workflow.pulled_base_images for image in not_expected: assert not tasker.image_exists(image) for image in workflow.pulled_base_images: assert tasker.image_exists(image) for df, tagged in workflow.builder.parent_images.items(): assert tagged is not None, "Did not tag parent image " + str(df) # tags should all be unique assert len(set(workflow.builder.parent_images.values())) == len(workflow.builder.parent_images)
def test_pull_base_image_plugin(user_params, parent_registry, df_base, expected, not_expected, inspect_only, workflow_callback=None, check_platforms=False, parent_images=None, organization=None, parent_images_digests=None, expected_digests=None, pull_registries=None): if MOCK: mock_docker(remember_images=True) tasker = DockerTasker(retry_times=0) buildstep_plugin = [{ 'name': PLUGIN_BUILD_ORCHESTRATE_KEY, 'args': { 'platforms': ['x86_64'] }, }] workflow = DockerBuildWorkflow( source=MOCK_SOURCE, buildstep_plugins=buildstep_plugin, ) builder = workflow.builder = MockBuilder() if parent_images: dockerfile_images = parent_images else: add_base = ImageName.parse(df_base) if add_base.registry is None: add_base.registry = parent_registry dockerfile_images = [add_base.to_str()] builder.dockerfile_images = DockerfileImages(dockerfile_images) expected = set(expected) if parent_images: for nonce in range(len(parent_images)): expected.add("{}:{}".format(UNIQUE_ID, nonce)) else: expected.add("{}:{}".format(UNIQUE_ID, 0)) all_images = set(expected).union(not_expected) for image in all_images: assert not tasker.image_exists(image) workflow.plugin_workspace[ReactorConfigPlugin.key] = {} reactor_config = { 'version': 1, 'source_registry': { 'url': parent_registry, 'insecure': True }, 'registries_organization': organization } if pull_registries: reactor_config['pull_registries'] = pull_registries workflow.plugin_workspace[ReactorConfigPlugin.key][WORKSPACE_CONF_KEY] =\ ReactorConfig(reactor_config) if workflow_callback: workflow = workflow_callback(workflow) runner = PreBuildPluginsRunner( tasker, workflow, [{ 'name': PullBaseImagePlugin.key, 'args': { 'check_platforms': check_platforms, 'inspect_only': inspect_only, 'parent_images_digests': parent_images_digests, } }]) if parent_registry is None: with pytest.raises(PluginFailedException): runner.run() return runner.run() if not inspect_only and not workflow.builder.dockerfile_images.base_from_scratch: assert workflow.builder.dockerfile_images.base_image.to_str( ).startswith(UNIQUE_ID + ":") for image in expected: if inspect_only: assert not tasker.image_exists(image) assert image not in workflow.pulled_base_images else: assert tasker.image_exists(image) assert image in workflow.pulled_base_images for image in not_expected: assert not tasker.image_exists(image) for image in workflow.pulled_base_images: assert tasker.image_exists(image) dockerfile_images = workflow.builder.dockerfile_images for df, tagged in dockerfile_images.items(): assert tagged is not None, "Did not tag parent image " + str(df) # tags should all be unique assert len(set(dockerfile_images.values())) == len(dockerfile_images) if check_platforms and expected_digests: assert expected_digests == workflow.builder.parent_images_digests return workflow
def test_pull_base_image_special(add_another_parent, special_image, change_base, skip_parent, reactor_config_map, monkeypatch): monkeypatch.setenv("BUILD", json.dumps({ 'metadata': { 'name': UNIQUE_ID, }, })) if MOCK: mock_docker(remember_images=True) tasker = DockerTasker(retry_times=0) buildstep_plugin = [{ 'name': PLUGIN_BUILD_ORCHESTRATE_KEY, 'args': {'platforms': ['x86_64']}, }] workflow = DockerBuildWorkflow(MOCK_SOURCE, special_image, buildstep_plugins=buildstep_plugin,) builder = workflow.builder = MockBuilder() builder.parent_images = {} builder.set_base_image(special_image) if add_another_parent: builder.parent_images[BASE_IMAGE_NAME_W_SHA] = None parent_images = builder.parent_images expected = set([]) for nonce in range(len(parent_images) - skip_parent): expected.add("{}:{}".format(UNIQUE_ID, nonce)) for image in expected: assert not tasker.image_exists(image) if reactor_config_map: workflow.plugin_workspace[ReactorConfigPlugin.key] = {} workflow.plugin_workspace[ReactorConfigPlugin.key][WORKSPACE_CONF_KEY] =\ ReactorConfig({'version': 1, 'source_registry': {'url': LOCALHOST_REGISTRY, 'insecure': True}, 'registries_organization': None}) runner = PreBuildPluginsRunner( tasker, workflow, [{ 'name': PullBaseImagePlugin.key, 'args': {'parent_registry': LOCALHOST_REGISTRY, 'parent_registry_insecure': True, } }] ) runner.run() if change_base: assert workflow.builder.base_image.to_str().startswith(UNIQUE_ID) else: assert workflow.builder.base_image.to_str().startswith(special_image) for image in expected: assert tasker.image_exists(image) assert image in workflow.pulled_base_images for image in workflow.pulled_base_images: assert tasker.image_exists(image) for df, tagged in workflow.builder.parent_images.items(): assert tagged is not None, "Did not tag parent image " + str(df) assert len(set(workflow.builder.parent_images.values())) == len(workflow.builder.parent_images)
def test_pull_base_image_plugin(parent_registry, df_base, expected, not_expected, reactor_config_map, workflow_callback=None, check_platforms=False): if MOCK: mock_docker(remember_images=True) tasker = DockerTasker(retry_times=0) buildstep_plugin = [{ 'name': PLUGIN_BUILD_ORCHESTRATE_KEY, 'args': { 'platforms': ['x86_64'] }, }] workflow = DockerBuildWorkflow( MOCK_SOURCE, 'test-image', buildstep_plugins=buildstep_plugin, ) workflow.builder = MockBuilder() workflow.builder.base_image = ImageName.parse(df_base) expected = set(expected) expected.add(UNIQUE_ID) all_images = set(expected).union(not_expected) for image in all_images: assert not tasker.image_exists(image) if reactor_config_map: workflow.plugin_workspace[ReactorConfigPlugin.key] = {} workflow.plugin_workspace[ReactorConfigPlugin.key][WORKSPACE_CONF_KEY] =\ ReactorConfig({'version': 1, 'source_registry': {'url': parent_registry, 'insecure': True}}) if workflow_callback: workflow = workflow_callback(workflow) runner = PreBuildPluginsRunner(tasker, workflow, [{ 'name': PullBaseImagePlugin.key, 'args': { 'parent_registry': parent_registry, 'parent_registry_insecure': True, 'check_platforms': check_platforms } }]) if parent_registry is None and reactor_config_map: with pytest.raises(PluginFailedException): runner.run() return runner.run() for image in expected: assert tasker.image_exists(image) assert image in workflow.pulled_base_images for image in not_expected: assert not tasker.image_exists(image) for image in workflow.pulled_base_images: assert tasker.image_exists(image) for image in all_images: try: tasker.remove_image(image) except: pass
def test_pull_base_image_plugin(parent_registry, df_base, expected, not_expected, reactor_config_map, workflow_callback=None, check_platforms=False, parent_images=None): if MOCK: mock_docker(remember_images=True) tasker = DockerTasker(retry_times=0) buildstep_plugin = [{ 'name': PLUGIN_BUILD_ORCHESTRATE_KEY, 'args': { 'platforms': ['x86_64'] }, }] parent_images = parent_images or {df_base: None} workflow = DockerBuildWorkflow( MOCK_SOURCE, 'test-image', buildstep_plugins=buildstep_plugin, ) builder = workflow.builder = MockBuilder() builder.base_image = builder.original_base_image = ImageName.parse(df_base) builder.parent_images = parent_images expected = set(expected) for nonce in range(len(parent_images)): expected.add("{}:{}".format(UNIQUE_ID, nonce)) all_images = set(expected).union(not_expected) for image in all_images: assert not tasker.image_exists(image) if reactor_config_map: workflow.plugin_workspace[ReactorConfigPlugin.key] = {} workflow.plugin_workspace[ReactorConfigPlugin.key][WORKSPACE_CONF_KEY] =\ ReactorConfig({'version': 1, 'source_registry': {'url': parent_registry, 'insecure': True}}) if workflow_callback: workflow = workflow_callback(workflow) runner = PreBuildPluginsRunner(tasker, workflow, [{ 'name': PullBaseImagePlugin.key, 'args': { 'parent_registry': parent_registry, 'parent_registry_insecure': True, 'check_platforms': check_platforms } }]) if parent_registry is None and reactor_config_map: with pytest.raises(PluginFailedException): runner.run() return runner.run() for image in expected: assert tasker.image_exists(image) assert image in workflow.pulled_base_images for image in not_expected: assert not tasker.image_exists(image) for image in workflow.pulled_base_images: assert tasker.image_exists(image) for df, tagged in parent_images.items(): assert tagged is not None, "Did not tag parent image " + df # tags should all be unique assert len(set(parent_images.values())) == len(parent_images)