@@ -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,31 @@ 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+ 		supportedDigests .Set (originalAlgorithm )
131+ 	}()
132+ 	supportedDigests .Set (digest .SHA512 )
133+ 
134+ 	res2  :=  goDiffIDComputationGoroutineWithTimeout (stream2 , nil )
135+ 	require .NotNil (t , res2 )
136+ 	assert .NoError (t , res2 .err )
137+ 	assert .Equal (t , "sha512:3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315" , res2 .digest .String ())
138+ 
120139	// Error reading input 
121140	reader , writer  :=  io .Pipe ()
122141	err  =  writer .CloseWithError (errors .New ("Expected error reading input in diffIDComputationGoroutine" ))
@@ -130,32 +149,54 @@ func TestComputeDiffID(t *testing.T) {
130149	for  _ , c  :=  range  []struct  {
131150		filename      string 
132151		decompressor  compressiontypes.DecompressorFunc 
152+ 		algorithm     digest.Algorithm 
133153		result        digest.Digest 
134154	}{
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" },
155+ 		// SHA256 test cases (default) 
156+ 		{"fixtures/Hello.uncompressed" , nil , digest .SHA256 , "sha256:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" },
157+ 		{"fixtures/Hello.gz" , nil , digest .SHA256 , "sha256:0bd4409dcd76476a263b8f3221b4ce04eb4686dec40bfdcc2e86a7403de13609" },
158+ 		{"fixtures/Hello.gz" , compression .GzipDecompressor , digest .SHA256 , "sha256:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" },
159+ 		{"fixtures/Hello.zst" , nil , digest .SHA256 , "sha256:361a8e0372ad438a0316eb39a290318364c10b60d0a7e55b40aa3eafafc55238" },
160+ 		{"fixtures/Hello.zst" , compression .ZstdDecompressor , digest .SHA256 , "sha256:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" },
161+ 		// SHA512 test cases 
162+ 		{"fixtures/Hello.uncompressed" , nil , digest .SHA512 , "sha512:3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315" },
163+ 		{"fixtures/Hello.gz" , nil , digest .SHA512 , "sha512:8ee9be48dfc6274f65199847cd18ff4711f00329c5063b17cd128ba45ea1b9cea2479db0266cc1f4a3902874fdd7306f9c8a615347c0603b893fc75184fcb627" },
164+ 		{"fixtures/Hello.gz" , compression .GzipDecompressor , digest .SHA512 , "sha512:3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315" },
165+ 		{"fixtures/Hello.zst" , nil , digest .SHA512 , "sha512:e4ddd61689ce9d1cdd49e11dc8dc89ca064bdb09e85b9df56658560b8207647a78b95d04c3f5f2fb31abf13e1822f0d19307df18a3fdf88f58ef24a50e71a1ae" },
166+ 		{"fixtures/Hello.zst" , compression .ZstdDecompressor , digest .SHA512 , "sha512:3615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315" },
140167	} {
141168		stream , err  :=  os .Open (c .filename )
142169		require .NoError (t , err , c .filename )
143170		defer  stream .Close ()
144171
172+ 		// Save original algorithm and set the desired one 
173+ 		originalAlgorithm  :=  supportedDigests .Get ()
174+ 		supportedDigests .Set (c .algorithm )
175+ 
176+ 		// Test the digest computation directly without ImageDestination 
145177		diffID , err  :=  computeDiffID (stream , c .decompressor )
178+ 
179+ 		// Restore the original algorithm 
180+ 		supportedDigests .Set (originalAlgorithm )
181+ 
146182		require .NoError (t , err , c .filename )
147183		assert .Equal (t , c .result , diffID )
148184	}
149185
150186	// Error initializing decompression 
187+ 	originalAlgorithm  :=  supportedDigests .Get ()
188+ 	supportedDigests .Set (digest .SHA256 )
151189	_ , err  :=  computeDiffID (bytes .NewReader ([]byte {}), compression .GzipDecompressor )
190+ 	supportedDigests .Set (originalAlgorithm )
152191	assert .Error (t , err )
153192
154193	// Error reading input 
155194	reader , writer  :=  io .Pipe ()
156195	defer  reader .Close ()
157196	err  =  writer .CloseWithError (errors .New ("Expected error reading input in computeDiffID" ))
158197	require .NoError (t , err )
198+ 	supportedDigests .Set (digest .SHA256 )
159199	_ , err  =  computeDiffID (reader , nil )
200+ 	supportedDigests .Set (originalAlgorithm )
160201	assert .Error (t , err )
161202}
0 commit comments