@@ -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,55 @@ 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+ 		supportedDigests .Set (originalAlgorithm )
184+ 
146185		require .NoError (t , err , c .filename )
147186		assert .Equal (t , c .result , diffID )
148187	}
149188
150189	// Error initializing decompression 
190+ 	originalAlgorithm  :=  supportedDigests .Get ()
191+ 	supportedDigests .Set (digest .SHA256 )
151192	_ , err  :=  computeDiffID (bytes .NewReader ([]byte {}), compression .GzipDecompressor )
193+ 	supportedDigests .Set (originalAlgorithm )
152194	assert .Error (t , err )
153195
154196	// Error reading input 
155197	reader , writer  :=  io .Pipe ()
156198	defer  reader .Close ()
157199	err  =  writer .CloseWithError (errors .New ("Expected error reading input in computeDiffID" ))
158200	require .NoError (t , err )
201+ 	supportedDigests .Set (digest .SHA256 )
159202	_ , err  =  computeDiffID (reader , nil )
203+ 	supportedDigests .Set (originalAlgorithm )
160204	assert .Error (t , err )
161205}
0 commit comments