MCPcopy Create free account
hub / github.com/containers/image / TestPrepareCopyInstancesforInstanceCopyClone

Function TestPrepareCopyInstancesforInstanceCopyClone

copy/multiple_test.go:51–129  ·  view source on GitHub ↗

Test `instanceCopyClone` cases.

(t *testing.T)

Source from the content-addressed store, hash-verified

49
50// Test `instanceCopyClone` cases.
51func TestPrepareCopyInstancesforInstanceCopyClone(t *testing.T) {
52 validManifest, err := os.ReadFile(filepath.Join("..", "internal", "manifest", "testdata", "oci1.index.zstd-selection.json"))
53 require.NoError(t, err)
54 list, err := internalManifest.ListFromBlob(validManifest, internalManifest.GuessMIMEType(validManifest))
55 require.NoError(t, err)
56
57 // Prepare option for `instanceCopyClone` case.
58 ensureCompressionVariantsExist := []OptionCompressionVariant{{Algorithm: compression.Zstd}}
59
60 sourceInstances := []digest.Digest{
61 digest.Digest("sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"),
62 digest.Digest("sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),
63 digest.Digest("sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"),
64 }
65
66 // CopySpecificImage must fail with error
67 _, err = prepareInstanceCopies(list, sourceInstances, &Options{EnsureCompressionVariantsExist: ensureCompressionVariantsExist,
68 Instances: []digest.Digest{sourceInstances[1]},
69 ImageListSelection: CopySpecificImages})
70 require.EqualError(t, err, "EnsureCompressionVariantsExist is not implemented for CopySpecificImages")
71
72 // Test copying all images with replication
73 instancesToCopy, err := prepareInstanceCopies(list, sourceInstances, &Options{EnsureCompressionVariantsExist: ensureCompressionVariantsExist})
74 require.NoError(t, err)
75
76 // Following test ensures
77 // * Still copy gzip variants if they exist in the original
78 // * Not create new Zstd variants if they exist in the original.
79
80 // We created a list of three instances `sourceInstances` and since in oci1.index.zstd-selection.json
81 // amd64 already has a zstd instance i.e sourceInstance[1] so it should not create replication for
82 // `sourceInstance[0]` and `sourceInstance[1]` but should do it for `sourceInstance[2]` for `arm64`
83 // and still copy `sourceInstance[2]`.
84 expectedResponse := []simplerInstanceCopy{}
85 for _, instance := range sourceInstances {
86 expectedResponse = append(expectedResponse, simplerInstanceCopy{op: instanceCopyCopy,
87 sourceDigest: instance})
88 // If its `arm64` and sourceDigest[2] , expect a clone to happen
89 if instance == sourceInstances[2] {
90 expectedResponse = append(expectedResponse, simplerInstanceCopy{op: instanceCopyClone, sourceDigest: instance, cloneCompressionVariant: "zstd", clonePlatform: "arm64-linux-"})
91 }
92 }
93 actualResponse := convertInstanceCopyToSimplerInstanceCopy(instancesToCopy)
94 assert.Equal(t, expectedResponse, actualResponse)
95
96 // Test option with multiple copy request for same compression format.
97 // The above expectation should stay the same, if ensureCompressionVariantsExist requests zstd twice.
98 ensureCompressionVariantsExist = []OptionCompressionVariant{{Algorithm: compression.Zstd}, {Algorithm: compression.Zstd}}
99 instancesToCopy, err = prepareInstanceCopies(list, sourceInstances, &Options{EnsureCompressionVariantsExist: ensureCompressionVariantsExist})
100 require.NoError(t, err)
101 expectedResponse = []simplerInstanceCopy{}
102 for _, instance := range sourceInstances {
103 expectedResponse = append(expectedResponse, simplerInstanceCopy{op: instanceCopyCopy,
104 sourceDigest: instance})
105 // If its `arm64` and sourceDigest[2] , expect a clone to happen
106 if instance == sourceInstances[2] {
107 expectedResponse = append(expectedResponse, simplerInstanceCopy{op: instanceCopyClone, sourceDigest: instance, cloneCompressionVariant: "zstd", clonePlatform: "arm64-linux-"})
108 }

Callers

nothing calls this directly

Calls 3

prepareInstanceCopiesFunction · 0.85
DigestMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…