@@ -68,7 +68,7 @@ func TestOCI1EditInstances(t *testing.T) {
6868 UpdateMediaType : "something" ,
6969 ListOperation : ListOpUpdate ,
7070 })
71- err = list .EditInstances (editInstances )
71+ err = list .EditInstances (editInstances , false )
7272 require .NoError (t , err )
7373
7474 expectedDigests [0 ] = editInstances [0 ].UpdateDigest
@@ -135,7 +135,7 @@ func TestOCI1EditInstances(t *testing.T) {
135135 AddPlatform : & imgspecv1.Platform {Architecture : "amd64" , OS : "linux" , OSFeatures : []string {"sse4" }},
136136 ListOperation : ListOpAdd ,
137137 })
138- err = list .EditInstances (editInstances )
138+ err = list .EditInstances (editInstances , false )
139139 require .NoError (t , err )
140140
141141 // Zstd should be kept on lowest priority as compared to the default gzip ones and order of prior elements must be preserved.
@@ -162,7 +162,7 @@ func TestOCI1EditInstances(t *testing.T) {
162162 UpdateAnnotations : map [string ]string {},
163163 ListOperation : ListOpUpdate ,
164164 })
165- err = list .EditInstances (editInstances )
165+ err = list .EditInstances (editInstances , false )
166166 require .NoError (t , err )
167167 // Digest `ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff` should be re-ordered on update.
168168 assert .Equal (t , list .Instances (), []digest.Digest {digest .Digest ("sha256:e692418e4cbaf90ca69d05a66403747baa33ee08806650b51fab815ad7fc331f" ), digest .Digest ("sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270" ), digest .Digest ("sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ), digest .Digest ("sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ), digest .Digest ("sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ), digest .Digest ("sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" ), digest .Digest ("sha256:hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh" )})
@@ -187,12 +187,47 @@ func TestOCI1EditInstances(t *testing.T) {
187187 UpdateAffectAnnotations : true ,
188188 UpdateAnnotations : map [string ]string {},
189189 }}
190- err = list .EditInstances (editInstances )
190+ err = list .EditInstances (editInstances , false )
191191 require .NoError (t , err )
192192 // Verify that the artifactType wasn't lost.
193193 instance , err = list .Instance (digest .Digest ("sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ))
194194 require .NoError (t , err )
195195 assert .Equal (t , "application/x-tar" , instance .ReadOnly .ArtifactType )
196+
197+ // Updating the zstd annotation for an existing instance works
198+ for _ , cannotModifyManifest := range []bool {false , true } {
199+ list , err = ListFromBlob (validManifest , GuessMIMEType (validManifest ))
200+ require .NoError (t , err )
201+ originalInstance , err := list .Instance (list .Instances ()[0 ])
202+ require .NoError (t , err )
203+ editInstances = []ListEdit {{
204+ ListOperation : ListOpUpdate ,
205+ UpdateOldDigest : originalInstance .Digest ,
206+ UpdateDigest : originalInstance .Digest ,
207+ UpdateSize : originalInstance .Size ,
208+ UpdateMediaType : originalInstance .MediaType ,
209+ UpdateAffectAnnotations : false ,
210+ UpdateAnnotations : nil ,
211+ UpdateCompressionAlgorithms : []compression.Algorithm {compression .Zstd },
212+ }}
213+ err = list .EditInstances (editInstances , cannotModifyManifest )
214+ require .NoError (t , err )
215+ instance , err = list .Instance (list .Instances ()[0 ])
216+ require .NoError (t , err )
217+
218+ if cannotModifyManifest {
219+ assert .Equal (t , originalInstance , instance ) // No changes
220+ } else {
221+ assert .Equal (t , "true" , instance .ReadOnly .Annotations ["io.github.containers.compression.zstd" ])
222+ assert .Equal (t , []string {compressionTypes .ZstdAlgorithmName }, instance .ReadOnly .CompressionAlgorithmNames )
223+ // These are the only changes:
224+ delete (instance .ReadOnly .Annotations , "io.github.containers.compression.zstd" )
225+ require .Empty (t , instance .ReadOnly .Annotations )
226+ instance .ReadOnly .Annotations = nil
227+ instance .ReadOnly .CompressionAlgorithmNames = []string {compressionTypes .GzipAlgorithmName }
228+ assert .Equal (t , originalInstance , instance )
229+ }
230+ }
196231}
197232
198233func TestOCI1IndexChooseInstanceByCompression (t * testing.T ) {
0 commit comments