@@ -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,24 @@ 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 using the parametrized function
123+ stream2 , err := os .Open ("fixtures/Hello.uncompressed" )
124+ require .NoError (t , err )
125+ defer stream2 .Close ()
126+
127+ // Use the parametrized function directly instead of overriding global state
128+ digest , err := computeDiffIDWithAlgorithm (stream2 , nil , digest .SHA512 )
129+ require .NoError (t , err )
130+ assert .Equal (t , "sha512:3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315" , digest .String ())
131+
120132 // Error reading input
121133 reader , writer := io .Pipe ()
122134 err = writer .CloseWithError (errors .New ("Expected error reading input in diffIDComputationGoroutine" ))
@@ -130,32 +142,59 @@ func TestComputeDiffID(t *testing.T) {
130142 for _ , c := range []struct {
131143 filename string
132144 decompressor compressiontypes.DecompressorFunc
145+ algorithm digest.Algorithm
133146 result digest.Digest
134147 }{
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" },
148+ // SHA256 test cases (default)
149+ {"fixtures/Hello.uncompressed" , nil , digest .SHA256 , "sha256:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" },
150+ {"fixtures/Hello.gz" , nil , digest .SHA256 , "sha256:0bd4409dcd76476a263b8f3221b4ce04eb4686dec40bfdcc2e86a7403de13609" },
151+ {"fixtures/Hello.gz" , compression .GzipDecompressor , digest .SHA256 , "sha256:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" },
152+ {"fixtures/Hello.zst" , nil , digest .SHA256 , "sha256:361a8e0372ad438a0316eb39a290318364c10b60d0a7e55b40aa3eafafc55238" },
153+ {"fixtures/Hello.zst" , compression .ZstdDecompressor , digest .SHA256 , "sha256:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" },
154+ // SHA512 test cases
155+ {"fixtures/Hello.uncompressed" , nil , digest .SHA512 , "sha512:3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315" },
156+ {"fixtures/Hello.gz" , nil , digest .SHA512 , "sha512:8ee9be48dfc6274f65199847cd18ff4711f00329c5063b17cd128ba45ea1b9cea2479db0266cc1f4a3902874fdd7306f9c8a615347c0603b893fc75184fcb627" },
157+ {"fixtures/Hello.gz" , compression .GzipDecompressor , digest .SHA512 , "sha512:3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315" },
158+ {"fixtures/Hello.zst" , nil , digest .SHA512 , "sha512:e4ddd61689ce9d1cdd49e11dc8dc89ca064bdb09e85b9df56658560b8207647a78b95d04c3f5f2fb31abf13e1822f0d19307df18a3fdf88f58ef24a50e71a1ae" },
159+ {"fixtures/Hello.zst" , compression .ZstdDecompressor , digest .SHA512 , "sha512:3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315" },
140160 } {
141161 stream , err := os .Open (c .filename )
142162 require .NoError (t , err , c .filename )
143163 defer stream .Close ()
144164
165+ // Save original algorithm and set the desired one
166+ originalAlgorithm := supportedDigests .TmpDigestForNewObjects ()
167+ err = supportedDigests .TmpSetDigestForNewObjects (c .algorithm )
168+ require .NoError (t , err )
169+
170+ // Test the digest computation directly without ImageDestination
145171 diffID , err := computeDiffID (stream , c .decompressor )
146172 require .NoError (t , err , c .filename )
147173 assert .Equal (t , c .result , diffID )
174+
175+ // Restore the original algorithm
176+ err = supportedDigests .TmpSetDigestForNewObjects (originalAlgorithm )
177+ require .NoError (t , err )
148178 }
149179
150180 // Error initializing decompression
151- _ , err := computeDiffID (bytes .NewReader ([]byte {}), compression .GzipDecompressor )
181+ originalAlgorithm := supportedDigests .TmpDigestForNewObjects ()
182+ err := supportedDigests .TmpSetDigestForNewObjects (digest .SHA256 )
183+ require .NoError (t , err )
184+ _ , err = computeDiffID (bytes .NewReader ([]byte {}), compression .GzipDecompressor )
152185 assert .Error (t , err )
186+ err = supportedDigests .TmpSetDigestForNewObjects (originalAlgorithm )
187+ require .NoError (t , err )
153188
154189 // Error reading input
155190 reader , writer := io .Pipe ()
156191 defer reader .Close ()
157192 err = writer .CloseWithError (errors .New ("Expected error reading input in computeDiffID" ))
158193 require .NoError (t , err )
194+ err = supportedDigests .TmpSetDigestForNewObjects (digest .SHA256 )
195+ require .NoError (t , err )
159196 _ , err = computeDiffID (reader , nil )
160197 assert .Error (t , err )
198+ err = supportedDigests .TmpSetDigestForNewObjects (originalAlgorithm )
199+ require .NoError (t , err )
161200}
0 commit comments