@@ -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