Test `instanceCopyClone` cases.
(t *testing.T)
| 49 | |
| 50 | // Test `instanceCopyClone` cases. |
| 51 | func 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 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…