diff --git a/acceptance/exporter_test.go b/acceptance/exporter_test.go index 9c51c7880..493316579 100644 --- a/acceptance/exporter_test.go +++ b/acceptance/exporter_test.go @@ -164,8 +164,8 @@ func testExporterFunc(platformAPI string) func(t *testing.T, when spec.G, it spe "Application Layer", "Software Bill-of-Materials", "Layer: 'launch-layer', Created by buildpack: cacher_buildpack@cacher_v1", - "Layer: 'RUN apt-get update && apt-get install -y tree', Created by extension: tree", - "Layer: 'RUN apt-get update && apt-get install -y curl', Created by extension: curl", + "Layer: 'RUN mkdir /some-other-dir && echo some-data > /some-other-dir/some-file && echo some-data > /some-other-file', Created by extension: second-extension", + "Layer: 'RUN mkdir /some-dir && echo some-data > /some-dir/some-file && echo some-data > /some-file', Created by extension: first-extension", "", // run image layer } assertDaemonImageHasHistory(t, exportedImageName, expectedHistory) @@ -174,19 +174,23 @@ func testExporterFunc(platformAPI string) func(t *testing.T, when spec.G, it spe h.AssertNil(t, err) h.AssertEq(t, inspect.Config.Labels["io.buildpacks.rebasable"], "false") // from testdata/exporter/container/layers/some-extended-dir/run/sha256_/blobs/sha256/ t.Log("Adds extension layers") - diffIDFromExt1 := "sha256:b2929a2680ce82320debc2fdde18dd6f45f563277545dbf105ca3d0e760057ce" // from testdata/exporter/container/layers/some-extended-dir/run/sha256_/blobs/sha256/<482346d1> after un-compressing and zeroing timestamps - diffIDFromExt2 := "sha256:c97b5a2894deb8380b078f68563a9683d968a8e0c5c092d187bc34e1c56bf6f3" // from testdata/exporter/container/layers/some-extended-dir/run/sha256_/blobs/sha256/<0c5f7a6f> after un-compressing and zeroing timestamps - var foundFromExt1, foundFromExt2 bool - for _, layer := range inspect.RootFS.Layers { - if layer == diffIDFromExt1 { - foundFromExt1 = true - } - if layer == diffIDFromExt2 { - foundFromExt2 = true - } + type testCase struct { + expectedDiffID string + layerIndex int + } + testCases := []testCase{ + { + expectedDiffID: "sha256:fb54d2566824d6630d94db0b008d9a544a94d3547a424f52e2fd282b648c0601", // from testdata/exporter/container/layers/some-extended-dir/run/sha256_/blobs/sha256/65c2873d397056a5cb4169790654d787579b005f18b903082b177d4d9b4aecf5 after un-compressing and zeroing timestamps + layerIndex: 1, + }, + { + expectedDiffID: "sha256:1018c7d3584c4f7fa3ef4486d1a6a11b93956b9d8bfe0898a3e0fbd248c984d8", // from testdata/exporter/container/layers/some-extended-dir/run/sha256_/blobs/sha256/0fb9b88c9cbe9f11b4c8da645f390df59f5949632985a0bfc2a842ef17b2ad18 after un-compressing and zeroing timestamps + layerIndex: 2, + }, + } + for _, tc := range testCases { + h.AssertEq(t, inspect.RootFS.Layers[tc.layerIndex], tc.expectedDiffID) } - h.AssertEq(t, foundFromExt1, true) - h.AssertEq(t, foundFromExt2, true) t.Log("sets the layers metadata label according to the new spec") var lmd files.LayersMetadata lmdJSON := inspect.Config.Labels["io.buildpacks.lifecycle.metadata"] @@ -446,21 +450,26 @@ func testExporterFunc(platformAPI string) func(t *testing.T, when spec.G, it spe t.Log("Adds extension layers") layers, err = remoteImage.Layers() h.AssertNil(t, err) - digestFromExt1 := "sha256:9b04cc97d8d2d204ccf30e3519c36b2f09dd7873803aafbc6badf7ce3d0687eb" // from testdata/exporter/container/layers/some-extended-dir/run/sha256_/blobs/sha256/<482346d1> after un-compressing, zeroing timestamps, and re-compressing - digestFromExt2 := "sha256:21bbb316bf28192b4c980b65a3c27b033994a74ca281ccef94a83df2fa3d666b" // from testdata/exporter/container/layers/some-extended-dir/run/sha256_/blobs/sha256/<0c5f7a6f> after un-compressing, zeroing timestamps, and re-compressing - var foundFromExt1, foundFromExt2 bool - for _, layer := range layers { + type testCase struct { + expectedDigest string + layerIndex int + } + testCases := []testCase{ + { + expectedDigest: "sha256:08e7ad5ce17cf5e5f70affe68b341a93de86ee2ba074932c3a05b8770f66d772", // from testdata/exporter/container/layers/some-extended-dir/run/sha256_/blobs/sha256/65c2873d397056a5cb4169790654d787579b005f18b903082b177d4d9b4aecf5 after un-compressing, zeroing timestamps, and re-compressing + layerIndex: 1, + }, + { + expectedDigest: "sha256:0e74ef444ea437147e3fa0ce2aad371df5380c26b96875ae07b9b67f44cdb2ee", // from testdata/exporter/container/layers/some-extended-dir/run/sha256_/blobs/sha256/0fb9b88c9cbe9f11b4c8da645f390df59f5949632985a0bfc2a842ef17b2ad18 after un-compressing, zeroing timestamps, and re-compressing + layerIndex: 2, + }, + } + for _, tc := range testCases { + layer := layers[tc.layerIndex] digest, err := layer.Digest() h.AssertNil(t, err) - if digest.String() == digestFromExt1 { - foundFromExt1 = true - } - if digest.String() == digestFromExt2 { - foundFromExt2 = true - } + h.AssertEq(t, digest.String(), tc.expectedDigest) } - h.AssertEq(t, foundFromExt1, true) - h.AssertEq(t, foundFromExt2, true) t.Log("sets the layers metadata label according to the new spec") var lmd files.LayersMetadata lmdJSON := configFile.Config.Labels["io.buildpacks.lifecycle.metadata"] diff --git a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/0c5f7a6fe14dbd19670f39e7466051cbd40b3a534c0812659740fb03e2137c1a b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/0c5f7a6fe14dbd19670f39e7466051cbd40b3a534c0812659740fb03e2137c1a deleted file mode 100644 index 80b67a93d..000000000 Binary files a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/0c5f7a6fe14dbd19670f39e7466051cbd40b3a534c0812659740fb03e2137c1a and /dev/null differ diff --git a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/0fb9b88c9cbe9f11b4c8da645f390df59f5949632985a0bfc2a842ef17b2ad18 b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/0fb9b88c9cbe9f11b4c8da645f390df59f5949632985a0bfc2a842ef17b2ad18 new file mode 100644 index 000000000..d8c92ae77 Binary files /dev/null and b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/0fb9b88c9cbe9f11b4c8da645f390df59f5949632985a0bfc2a842ef17b2ad18 differ diff --git a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/259d97828cc7af9f2f9c62ce4caf6c9eac9d0898b114734ee259a698858debd1 b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/259d97828cc7af9f2f9c62ce4caf6c9eac9d0898b114734ee259a698858debd1 deleted file mode 100644 index 0d42b6067..000000000 --- a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/259d97828cc7af9f2f9c62ce4caf6c9eac9d0898b114734ee259a698858debd1 +++ /dev/null @@ -1,107 +0,0 @@ -{ - "architecture": "amd64", - "created": "0001-01-01T00:00:00Z", - "history": [ - { - "created": "2023-03-01T03:18:00.301777816Z", - "created_by": "/bin/sh -c #(nop) ARG RELEASE", - "empty_layer": true - }, - { - "created": "2023-03-01T03:18:00.360617499Z", - "created_by": "/bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH", - "empty_layer": true - }, - { - "created": "2023-03-01T03:18:00.41927153Z", - "created_by": "/bin/sh -c #(nop) LABEL org.opencontainers.image.ref.name=ubuntu", - "empty_layer": true - }, - { - "created": "2023-03-01T03:18:00.485275751Z", - "created_by": "/bin/sh -c #(nop) LABEL org.opencontainers.image.version=18.04", - "empty_layer": true - }, - { - "created": "2023-03-01T03:18:02.163454314Z", - "created_by": "/bin/sh -c #(nop) ADD file:66eb2ef5574cdf80bc0cb3af1637407620c1869f58cc7514395e3f5aea45cc3b in / " - }, - { - "created": "2023-03-01T03:18:02.508220832Z", - "created_by": "/bin/sh -c #(nop) CMD [\"/bin/bash\"]", - "empty_layer": true - }, - { - "created": "2023-03-06T17:34:37.7930108Z", - "created_by": "ARG cnb_uid=1234", - "comment": "buildkit.dockerfile.v0", - "empty_layer": true - }, - { - "created": "2023-03-06T17:34:37.7930108Z", - "created_by": "ARG cnb_gid=1000", - "comment": "buildkit.dockerfile.v0", - "empty_layer": true - }, - { - "created": "2023-03-06T17:34:37.7930108Z", - "created_by": "ENV CNB_USER_ID=1234", - "comment": "buildkit.dockerfile.v0", - "empty_layer": true - }, - { - "created": "2023-03-06T17:34:37.7930108Z", - "created_by": "ENV CNB_GROUP_ID=1000", - "comment": "buildkit.dockerfile.v0", - "empty_layer": true - }, - { - "created": "2023-03-06T17:34:37.7930108Z", - "created_by": "COPY ./container/ / # buildkit", - "comment": "buildkit.dockerfile.v0" - }, - { - "created": "2023-03-06T17:34:39.0316521Z", - "created_by": "RUN |2 cnb_uid=1234 cnb_gid=1000 /bin/sh -c groupadd cnb --gid ${cnb_gid} && useradd --uid ${cnb_uid} --gid ${cnb_gid} -m -s /bin/bash cnb # buildkit", - "comment": "buildkit.dockerfile.v0" - }, - { - "author": "kaniko", - "created": "0001-01-01T00:00:00Z", - "created_by": "Layer: 'RUN apt-get update && apt-get install -y curl', Created by extension: curl" - }, - { - "author": "kaniko", - "created": "0001-01-01T00:00:00Z", - "created_by": "Layer: 'RUN apt-get update && apt-get install -y tree', Created by extension: tree" - } - ], - "os": "linux", - "rootfs": { - "type": "layers", - "diff_ids": [ - "sha256:52c5ca3e9f3bf4c13613fb3269982734b189e1e09563b65b670fc8be0e223e03", - "sha256:a44ae1c29c4868890bf64d0f9627291e9b80d6a80d8938c942c6a43b2f0cfde1", - "sha256:049685392ebd2ca7b262f19e854d6fd3ff60bcb7a96394422b528ea30d04ca67", - "sha256:60600f423214c27fd184ebc96ae765bf2b4703c9981fb4205d28dd35e7eec4ae", - "sha256:1d811b70500e2e9a5e5b8ca7429ef02e091cdf4657b02e456ec54dd1baea0a66" - ] - }, - "config": { - "Cmd": [ - "/bin/bash" - ], - "Env": [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", - "CNB_USER_ID=1234", - "CNB_GROUP_ID=1000", - "CNB_STACK_ID=stack-id-from-ext-tree" - ], - "Labels": { - "io.buildpacks.rebasable": "false", - "org.opencontainers.image.ref.name": "ubuntu", - "org.opencontainers.image.version": "18.04" - }, - "User": "root" - } -} diff --git a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/2dc6ef9f627c01f3f9e4f735c90f0251b5adaf6ad5685c5afb5cf638412fad67 b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/2dc6ef9f627c01f3f9e4f735c90f0251b5adaf6ad5685c5afb5cf638412fad67 new file mode 100644 index 000000000..c7e3809a9 --- /dev/null +++ b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/2dc6ef9f627c01f3f9e4f735c90f0251b5adaf6ad5685c5afb5cf638412fad67 @@ -0,0 +1,47 @@ +{ + "architecture": "amd64", + "created": "0001-01-01T00:00:00Z", + "history": [ + { + "author": "some-base-image-author", + "created": "2023-03-06T17:34:39.0316521Z", + "created_by": "FROM some-base-image" + }, + { + "author": "kaniko", + "created": "0001-01-01T00:00:00Z", + "created_by": "Layer: 'RUN mkdir /some-dir && echo some-data > /some-dir/some-file && echo some-data > /some-file', Created by extension: first-extension" + }, + { + "author": "kaniko", + "created": "0001-01-01T00:00:00Z", + "created_by": "Layer: 'RUN mkdir /some-other-dir && echo some-data > /some-other-dir/some-file && echo some-data > /some-other-file', Created by extension: second-extension" + } + ], + "os": "linux", + "rootfs": { + "type": "layers", + "diff_ids": [ + "sha256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c", + "sha256:d8dea3a780ba766c08bd11800809652ce5e9eba50b7b94ac09cb7f5e98e07f08", + "sha256:36f3735021a89a605c3da10b9659f0ec69e7c4c72abc802dc32471f1b080fd78" + ] + }, + "config": { + "Cmd": [ + "/bin/bash" + ], + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "CNB_USER_ID=1234", + "CNB_GROUP_ID=1000", + "CNB_STACK_ID=some-stack-id" + ], + "Labels": { + "io.buildpacks.rebasable": "false", + "org.opencontainers.image.ref.name": "ubuntu", + "org.opencontainers.image.version": "18.04" + }, + "User": "root" + } +} diff --git a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/40007d6086160bcdf45770ed12d23f0c594013cf0cd5e65ffc67be8f46e0d9c9 b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/40007d6086160bcdf45770ed12d23f0c594013cf0cd5e65ffc67be8f46e0d9c9 new file mode 100644 index 000000000..4f5e6c114 --- /dev/null +++ b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/40007d6086160bcdf45770ed12d23f0c594013cf0cd5e65ffc67be8f46e0d9c9 @@ -0,0 +1,26 @@ +{ + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "config": { + "mediaType": "application/vnd.docker.container.image.v1+json", + "size": 2771, + "digest": "sha256:2dc6ef9f627c01f3f9e4f735c90f0251b5adaf6ad5685c5afb5cf638412fad67" + }, + "layers": [ + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 26711153, + "digest": "sha256:0064b1b97ec0775813740e8cb92821a6d84fd38eee70bafba9c12d9c37534661" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 38445484, + "digest": "sha256:65c2873d397056a5cb4169790654d787579b005f18b903082b177d4d9b4aecf5" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 146545, + "digest": "sha256:0fb9b88c9cbe9f11b4c8da645f390df59f5949632985a0bfc2a842ef17b2ad18" + } + ] +} diff --git a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/482346d1e0c7afa2514ec366d2e000e0667d0a6664690aab3c8ad51c81915b91 b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/482346d1e0c7afa2514ec366d2e000e0667d0a6664690aab3c8ad51c81915b91 deleted file mode 100644 index 57251e96a..000000000 Binary files a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/482346d1e0c7afa2514ec366d2e000e0667d0a6664690aab3c8ad51c81915b91 and /dev/null differ diff --git a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/65c2873d397056a5cb4169790654d787579b005f18b903082b177d4d9b4aecf5 b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/65c2873d397056a5cb4169790654d787579b005f18b903082b177d4d9b4aecf5 new file mode 100644 index 000000000..12507dda3 Binary files /dev/null and b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/65c2873d397056a5cb4169790654d787579b005f18b903082b177d4d9b4aecf5 differ diff --git a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24 b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24 deleted file mode 100644 index 0ad821e07..000000000 --- a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/blobs/sha256/c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24 +++ /dev/null @@ -1,36 +0,0 @@ -{ - "schemaVersion": 2, - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "config": { - "mediaType": "application/vnd.docker.container.image.v1+json", - "size": 2771, - "digest": "sha256:259d97828cc7af9f2f9c62ce4caf6c9eac9d0898b114734ee259a698858debd1" - }, - "layers": [ - { - "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", - "size": 26711153, - "digest": "sha256:0064b1b97ec0775813740e8cb92821a6d84fd38eee70bafba9c12d9c37534661" - }, - { - "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", - "size": 10083299, - "digest": "sha256:b10e5b54dba2a40f7d836f210ea43d7ae6a908f125374b2f70a5ac538b59e8a6" - }, - { - "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", - "size": 4698, - "digest": "sha256:b9f98a18bb36447e4f8a0420bcdb6f8f7a7494036a42a83265daf3e53f593d20" - }, - { - "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", - "size": 38445484, - "digest": "sha256:482346d1e0c7afa2514ec366d2e000e0667d0a6664690aab3c8ad51c81915b91" - }, - { - "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", - "size": 146545, - "digest": "sha256:0c5f7a6fe14dbd19670f39e7466051cbd40b3a534c0812659740fb03e2137c1a" - } - ] -} diff --git a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/index.json b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/index.json index 944c650b9..5f6d830cd 100755 --- a/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/index.json +++ b/acceptance/testdata/exporter/container/layers/some-extended-dir/run/sha256_c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24/index.json @@ -4,7 +4,7 @@ { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 1083, - "digest": "sha256:c72eda1cc5b6c41360b95d73f881eff9d0655e56c693a2bc6cc9312c9e70aa24" + "digest": "sha256:40007d6086160bcdf45770ed12d23f0c594013cf0cd5e65ffc67be8f46e0d9c9" } ] } \ No newline at end of file