From 9bac447a50e2e8f7d7ae0b5dda98c0e61cb3035f Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Thu, 22 Feb 2024 14:46:48 -0800 Subject: [PATCH] oci: add test for mediatype in OCI index Signed-off-by: Tonis Tiigi --- client/client_test.go | 48 +++++++++++++++++++ .../containerd/images/archive/exporter.go | 1 + 2 files changed, 49 insertions(+) diff --git a/client/client_test.go b/client/client_test.go index 5f8a9af8c256..4c30fc9f0caa 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -213,6 +213,7 @@ var allTests = []func(t *testing.T, sb integration.Sandbox){ testExportLocalNoPlatformSplit, testExportLocalNoPlatformSplitOverwrite, testSolverOptLocalDirsStillWorks, + testOCIIndexMediatype, } func TestIntegration(t *testing.T) { @@ -3016,6 +3017,53 @@ func testOCIExporterContentStore(t *testing.T, sb integration.Sandbox) { checkAllReleasable(t, c, sb, true) } +func testOCIIndexMediatype(t *testing.T, sb integration.Sandbox) { + workers.CheckFeatureCompat(t, sb, workers.FeatureOCIExporter) + requiresLinux(t) + c, err := New(sb.Context(), sb.Address()) + require.NoError(t, err) + defer c.Close() + + st := llb.Image("busybox:latest").Run(llb.Shlex(`sh -c "echo -n hello > hello"`)) + def, err := st.Marshal(sb.Context()) + require.NoError(t, err) + + destDir, err := os.MkdirTemp("", "buildkit") + require.NoError(t, err) + defer os.RemoveAll(destDir) + + out := filepath.Join(destDir, "out.tar") + outW, err := os.Create(out) + require.NoError(t, err) + + _, err = c.Solve(sb.Context(), def, SolveOpt{ + Exports: []ExportEntry{ + { + Type: ExporterOCI, + Output: fixedWriteCloser(outW), + }, + }, + }, nil) + require.NoError(t, err) + + dt, err := os.ReadFile(out) + require.NoError(t, err) + + m, err := testutil.ReadTarToMap(dt, false) + require.NoError(t, err) + + indexDt, ok := m[ocispecs.ImageIndexFile] + require.True(t, ok) + + var index ocispecs.Index + err = json.Unmarshal(indexDt.Data, &index) + require.NoError(t, err) + + require.Equal(t, "application/vnd.oci.image.index.v1+json", index.MediaType) + + checkAllReleasable(t, c, sb, true) +} + func testSourceDateEpochLayerTimestamps(t *testing.T, sb integration.Sandbox) { workers.CheckFeatureCompat(t, sb, workers.FeatureOCIExporter, workers.FeatureSourceDateEpoch) requiresLinux(t) diff --git a/vendor/github.com/containerd/containerd/images/archive/exporter.go b/vendor/github.com/containerd/containerd/images/archive/exporter.go index 1f17a3cdbfec..8513e9a8bf0f 100644 --- a/vendor/github.com/containerd/containerd/images/archive/exporter.go +++ b/vendor/github.com/containerd/containerd/images/archive/exporter.go @@ -471,6 +471,7 @@ func ociIndexRecord(manifests []ocispec.Descriptor) tarRecord { Versioned: ocispecs.Versioned{ SchemaVersion: 2, }, + MediaType: ocispec.MediaTypeImageIndex, Manifests: manifests, }