@@ -17,6 +17,7 @@ import (
1717 "go.podman.io/image/v5/pkg/compression"
1818 compressiontypes "go.podman.io/image/v5/pkg/compression/types"
1919 "go.podman.io/image/v5/types"
20+ supportedDigests "go.podman.io/storage/pkg/supported-digests"
2021)
2122
2223func TestUpdatedBlobInfoFromReuse (t * testing.T ) {
@@ -110,13 +111,33 @@ func goDiffIDComputationGoroutineWithTimeout(layerStream io.ReadCloser, decompre
110111}
111112
112113func TestDiffIDComputationGoroutine (t * testing.T ) {
114+ // Test with SHA256 (default)
113115 stream , err := os .Open ("fixtures/Hello.uncompressed" )
114116 require .NoError (t , err )
115117 res := goDiffIDComputationGoroutineWithTimeout (stream , nil )
116118 require .NotNil (t , res )
117119 assert .NoError (t , res .err )
118120 assert .Equal (t , "sha256:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" , res .digest .String ())
119121
122+ // Test with SHA512
123+ stream2 , err := os .Open ("fixtures/Hello.uncompressed" )
124+ require .NoError (t , err )
125+ defer stream2 .Close ()
126+
127+ // Save original algorithm and set SHA512
128+ originalAlgorithm := supportedDigests .Get ()
129+ defer func () {
130+ err := supportedDigests .Set (originalAlgorithm )
131+ require .NoError (t , err )
132+ }()
133+ err = supportedDigests .Set (digest .SHA512 )
134+ require .NoError (t , err )
135+
136+ res2 := goDiffIDComputationGoroutineWithTimeout (stream2 , nil )
137+ require .NotNil (t , res2 )
138+ assert .NoError (t , res2 .err )
139+ assert .Equal (t , "sha512:3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315" , res2 .digest .String ())
140+
120141 // Error reading input
121142 reader , writer := io .Pipe ()
122143 err = writer .CloseWithError (errors .New ("Expected error reading input in diffIDComputationGoroutine" ))
@@ -130,32 +151,60 @@ func TestComputeDiffID(t *testing.T) {
130151 for _ , c := range []struct {
131152 filename string
132153 decompressor compressiontypes.DecompressorFunc
154+ algorithm digest.Algorithm
133155 result digest.Digest
134156 }{
135- {"fixtures/Hello.uncompressed" , nil , "sha256:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" },
136- {"fixtures/Hello.gz" , nil , "sha256:0bd4409dcd76476a263b8f3221b4ce04eb4686dec40bfdcc2e86a7403de13609" },
137- {"fixtures/Hello.gz" , compression .GzipDecompressor , "sha256:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" },
138- {"fixtures/Hello.zst" , nil , "sha256:361a8e0372ad438a0316eb39a290318364c10b60d0a7e55b40aa3eafafc55238" },
139- {"fixtures/Hello.zst" , compression .ZstdDecompressor , "sha256:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" },
157+ // SHA256 test cases (default)
158+ {"fixtures/Hello.uncompressed" , nil , digest .SHA256 , "sha256:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" },
159+ {"fixtures/Hello.gz" , nil , digest .SHA256 , "sha256:0bd4409dcd76476a263b8f3221b4ce04eb4686dec40bfdcc2e86a7403de13609" },
160+ {"fixtures/Hello.gz" , compression .GzipDecompressor , digest .SHA256 , "sha256:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" },
161+ {"fixtures/Hello.zst" , nil , digest .SHA256 , "sha256:361a8e0372ad438a0316eb39a290318364c10b60d0a7e55b40aa3eafafc55238" },
162+ {"fixtures/Hello.zst" , compression .ZstdDecompressor , digest .SHA256 , "sha256:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" },
163+ // SHA512 test cases
164+ {"fixtures/Hello.uncompressed" , nil , digest .SHA512 , "sha512:3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315" },
165+ {"fixtures/Hello.gz" , nil , digest .SHA512 , "sha512:8ee9be48dfc6274f65199847cd18ff4711f00329c5063b17cd128ba45ea1b9cea2479db0266cc1f4a3902874fdd7306f9c8a615347c0603b893fc75184fcb627" },
166+ {"fixtures/Hello.gz" , compression .GzipDecompressor , digest .SHA512 , "sha512:3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315" },
167+ {"fixtures/Hello.zst" , nil , digest .SHA512 , "sha512:e4ddd61689ce9d1cdd49e11dc8dc89ca064bdb09e85b9df56658560b8207647a78b95d04c3f5f2fb31abf13e1822f0d19307df18a3fdf88f58ef24a50e71a1ae" },
168+ {"fixtures/Hello.zst" , compression .ZstdDecompressor , digest .SHA512 , "sha512:3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315" },
140169 } {
141170 stream , err := os .Open (c .filename )
142171 require .NoError (t , err , c .filename )
143172 defer stream .Close ()
144173
174+ // Save original algorithm and set the desired one
175+ originalAlgorithm := supportedDigests .Get ()
176+ err = supportedDigests .Set (c .algorithm )
177+ require .NoError (t , err )
178+
179+ // Test the digest computation directly without ImageDestination
145180 diffID , err := computeDiffID (stream , c .decompressor )
181+
182+ // Restore the original algorithm
183+ err = supportedDigests .Set (originalAlgorithm )
184+ require .NoError (t , err )
185+
146186 require .NoError (t , err , c .filename )
147187 assert .Equal (t , c .result , diffID )
148188 }
149189
150190 // Error initializing decompression
151- _ , err := computeDiffID (bytes .NewReader ([]byte {}), compression .GzipDecompressor )
191+ originalAlgorithm := supportedDigests .Get ()
192+ err := supportedDigests .Set (digest .SHA256 )
193+ require .NoError (t , err )
194+ _ , err = computeDiffID (bytes .NewReader ([]byte {}), compression .GzipDecompressor )
152195 assert .Error (t , err )
196+ err = supportedDigests .Set (originalAlgorithm )
197+ require .NoError (t , err )
153198
154199 // Error reading input
155200 reader , writer := io .Pipe ()
156201 defer reader .Close ()
157202 err = writer .CloseWithError (errors .New ("Expected error reading input in computeDiffID" ))
158203 require .NoError (t , err )
204+ err = supportedDigests .Set (digest .SHA256 )
205+ require .NoError (t , err )
159206 _ , err = computeDiffID (reader , nil )
160207 assert .Error (t , err )
208+ err = supportedDigests .Set (originalAlgorithm )
209+ require .NoError (t , err )
161210}
0 commit comments