@@ -239,3 +239,70 @@ func TestResolvePlatform(t *testing.T) {
239239 }
240240 })
241241}
242+
243+ func TestResolveByDigest (t * testing.T ) {
244+ manifest := & plugintypes.Manifest {
245+ Name : "operator" ,
246+ Versions : []plugintypes.Version {
247+ {
248+ Version : "0.46.0" ,
249+ Platforms : []plugintypes.Platform {
250+ {OS : "linux" , Arch : "amd64" , URL : "https://example.com/v46_linux.tar.gz" , Checksum : "sha256:aaaa" },
251+ {OS : "darwin" , Arch : "arm64" , URL : "https://example.com/v46_darwin.tar.gz" , Checksum : "sha256:bbbb" },
252+ },
253+ },
254+ {
255+ Version : "0.45.0" ,
256+ Platforms : []plugintypes.Platform {
257+ {OS : "linux" , Arch : "amd64" , URL : "https://example.com/v45_linux.tar.gz" , Checksum : "sha256:cccc" },
258+ {OS : "darwin" , Arch : "arm64" , URL : "https://example.com/v45_darwin.tar.gz" , Checksum : "sha256:dddd" },
259+ },
260+ },
261+ },
262+ }
263+
264+ t .Run ("found in latest version" , func (t * testing.T ) {
265+ dm , err := ResolveByDigest (manifest , "sha256:aaaa" , "linux" , "amd64" )
266+ if err != nil {
267+ t .Fatalf ("unexpected error: %v" , err )
268+ }
269+ if dm .Version .Version != "0.46.0" {
270+ t .Errorf ("expected version '0.46.0', got %q" , dm .Version .Version )
271+ }
272+ if dm .Platform .Checksum != "sha256:aaaa" {
273+ t .Errorf ("expected checksum 'sha256:aaaa', got %q" , dm .Platform .Checksum )
274+ }
275+ })
276+
277+ t .Run ("found in older version" , func (t * testing.T ) {
278+ dm , err := ResolveByDigest (manifest , "sha256:cccc" , "linux" , "amd64" )
279+ if err != nil {
280+ t .Fatalf ("unexpected error: %v" , err )
281+ }
282+ if dm .Version .Version != "0.45.0" {
283+ t .Errorf ("expected version '0.45.0', got %q" , dm .Version .Version )
284+ }
285+ })
286+
287+ t .Run ("wrong platform" , func (t * testing.T ) {
288+ // sha256:bbbb exists for darwin/arm64, not linux/amd64.
289+ _ , err := ResolveByDigest (manifest , "sha256:bbbb" , "linux" , "amd64" )
290+ if err == nil {
291+ t .Fatal ("expected error, got nil" )
292+ }
293+ })
294+
295+ t .Run ("not found" , func (t * testing.T ) {
296+ _ , err := ResolveByDigest (manifest , "sha256:nonexistent" , "linux" , "amd64" )
297+ if err == nil {
298+ t .Fatal ("expected error, got nil" )
299+ }
300+ })
301+
302+ t .Run ("no versions" , func (t * testing.T ) {
303+ _ , err := ResolveByDigest (& plugintypes.Manifest {Name : "empty" }, "sha256:abc" , "linux" , "amd64" )
304+ if err == nil {
305+ t .Fatal ("expected error, got nil" )
306+ }
307+ })
308+ }
0 commit comments