def test_build_failure(tmpdir): target_image_name = "registry.example.com/ab-test-" + random_word(12) target_image_tag = "oldest" target_image = f"{target_image_name}:{target_image_tag}" target_failed_image = target_image + "-failed" cmd = ["build", bad_playbook_path, base_image, target_image] with pytest.raises(subprocess.CalledProcessError): ab(cmd, str(tmpdir)) out = ab(["get-logs"], str(tmpdir), return_output=True).lstrip() assert out.startswith("PLAY [registry") p_inspect_data = json.loads( subprocess.check_output( ["podman", "inspect", "-t", "image", target_failed_image]))[0] image_id = p_inspect_data["Id"] cmd = ["inspect", "--json"] ab_inspect_data = json.loads(ab(cmd, str(tmpdir), return_output=True)) top_layer_id = ab_inspect_data["layers"][-1]["layer_id"] final_image_id = ab_inspect_data["final_layer_id"] assert image_id == top_layer_id assert image_id == final_image_id assert ab_inspect_data["target_image"] == target_failed_image buildah("rmi", [target_failed_image])
def test_with_vars_files(tmpdir): cmd = ["build", p_w_vars_files_path] ab(cmd, str(tmpdir)) try: cmd = ["inspect", "--json"] ab_inspect_data = json.loads(ab(cmd, str(tmpdir), return_output=True)) assert ab_inspect_data[ "base_image"] == "docker.io/library/python:3-alpine" assert ab_inspect_data["build_id"] == "1" assert ab_inspect_data['builder_name'] == "buildah" assert len(ab_inspect_data['layers']) == 3 assert ab_inspect_data["metadata"]["labels"] == {"x": "y"} assert ab_inspect_data["metadata"]["env_vars"] == { "key": "env", "path": "/etc/passwd" } assert ab_inspect_data["playbook_path"] == p_w_vars_files_path assert ab_inspect_data["pulled"] is False assert ab_inspect_data["target_image"] == "with-vars-files" finally: try: buildah( "rmi", ["with-vars-files"] ) # FIXME: use builder interface instead for sake of other backends except subprocess.CalledProcessError as ex: print(ex)
def test_basic(tmpdir): cmd = ["build", b_p_w_vars_path] ab(cmd, str(tmpdir)) try: cmd = ["inspect", "--json"] ab_inspect_data = json.loads(ab(cmd, str(tmpdir), return_output=True)) assert ab_inspect_data[ "base_image"] == "docker.io/library/python:3-alpine" assert ab_inspect_data["build_id"] == "1" assert ab_inspect_data['build_volumes'] == [f'{data_dir}:/src:Z'] assert ab_inspect_data['builder_name'] == "buildah" assert len(ab_inspect_data['layers']) == 3 assert ab_inspect_data["metadata"]["labels"] == {"x": "y"} assert ab_inspect_data["metadata"]["env_vars"] == {"asd": data_dir} assert ab_inspect_data["playbook_path"] == b_p_w_vars_path assert ab_inspect_data["pulled"] is False assert ab_inspect_data["target_image"] == "challet" cmd = ["podman", "inspect", "--type", "image", "challet"] inspect_data = json.loads(subprocess.check_output(cmd))[0] assert inspect_data["Config"]["Labels"] == {"x": "y"} assert f"asd={data_dir}" in inspect_data["Config"]["Env"] assert inspect_data["Config"]["WorkingDir"] == "/src" finally: try: buildah( "rmi", ["challet"] ) # FIXME: use builder interface instead for sake of other backends except subprocess.CalledProcessError as ex: print(ex)
def test_build_failure(tmpdir): target_image_name = "registry.example.com/ab-test-" + random_word(12) target_image_tag = "oldest" target_image = f"{target_image_name}:{target_image_tag}" cmd = ["build", bad_playbook_path, base_image, target_image] with pytest.raises(subprocess.CalledProcessError): ab(cmd, str(tmpdir)) out = ab(["get-logs"], str(tmpdir), return_output=True).lstrip() assert "PLAY [registry" in out # regex string for target image image_name_regex = "%s+[-]+[0-9]+[-]+[0-9]+-failed" % (target_image) cmd = ["inspect", "--json"] ab_inspect_data = json.loads(ab(cmd, str(tmpdir), return_output=True)) top_layer_id = ab_inspect_data["layers"][-1]["layer_id"] final_image_id = ab_inspect_data["final_layer_id"] final_image_name = ab_inspect_data["target_image"] assert re.match(image_name_regex, final_image_name) p_inspect_data = json.loads( subprocess.check_output( ["podman", "inspect", "-t", "image", final_image_name]))[0] image_id = p_inspect_data["Id"] assert image_id == top_layer_id assert image_id == final_image_id buildah("rmi", [final_image_name])
def test_output(target_image, tmpdir): cmd = ["build", basic_playbook_path, base_image, target_image] out = ab(cmd, str(tmpdir), return_output=True, debug=False) assert f"Image '{target_image}' was built successfully \\o/" in out assert 'Getting image source signatures' in out assert not re.match(r'ERROR\s+Getting image source signatures', out) assert 'Copying ' in out assert not re.match(r'ERROR\s+Copying ', out) buildah("inspect", ["-t", "image", target_image])
def target_image(): im = "registry.example.com/ab-test-" + random_word(12) + ":oldest" yield im try: buildah("rmi", [ im ]) # FIXME: use builder interface instead for sake of other backends # FIXME: also remove everything from cache except subprocess.CalledProcessError as ex: print(ex)