1919package oci
2020
2121import (
22- "bytes"
2322 "context"
2423 "fmt"
2524 "io"
2625 "log"
2726 "net/http"
2827 "net/http/httptest"
2928 "net/url"
30- "strings"
3129 "testing"
3230
3331 "github.com/google/go-containerregistry/pkg/authn"
3432 "github.com/google/go-containerregistry/pkg/name"
3533 "github.com/google/go-containerregistry/pkg/registry"
34+ v1 "github.com/google/go-containerregistry/pkg/v1"
3635 "github.com/google/go-containerregistry/pkg/v1/random"
3736 "github.com/google/go-containerregistry/pkg/v1/remote"
3837 "github.com/google/go-containerregistry/pkg/v1/types"
@@ -101,25 +100,21 @@ func TestCreateRemoteOptions(t *testing.T) {
101100 }
102101}
103102
104- func TestCacheInit (t * testing.T ) {
105- // by default the cache should be on
106- assert .NotNil (t , initCache ())
107-
108- t .Setenv ("EC_CACHE" , "false" )
109- assert .Nil (t , initCache ())
110-
111- t .Cleanup (func () {
112- t .Setenv ("EC_CACHE" , "true" )
113- assert .NotNil (t , initCache ())
114- })
103+ func readAndVerifyLayer (t * testing.T , l v1.Layer ) {
104+ t .Helper ()
105+ r , err := l .Uncompressed ()
106+ require .NoError (t , err )
107+ defer r .Close ()
108+ _ , err = io .ReadAll (r )
109+ require .NoError (t , err )
115110}
116111
117112func TestImage (t * testing.T ) {
118- img , err := random .Image (4096 , 2 )
113+ const numLayers = 2
114+ img , err := random .Image (4096 , numLayers )
119115 require .NoError (t , err )
120116
121- l := & bytes.Buffer {}
122- registry := httptest .NewServer (registry .New (registry .Logger (log .New (l , "" , 0 ))))
117+ registry := httptest .NewServer (registry .New (registry .Logger (log .New (io .Discard , "" , 0 ))))
123118 t .Cleanup (registry .Close )
124119
125120 u , err := url .Parse (registry .URL )
@@ -130,35 +125,24 @@ func TestImage(t *testing.T) {
130125
131126 require .NoError (t , remote .Push (ref , img ))
132127
133- fetchFully := func () {
134- client := defaultClient {}
135-
136- img , err := client .Image (ref )
137- require .NoError (t , err )
138- layers , err := img .Layers ()
139- require .NoError (t , err )
140- for _ , l := range layers {
141- r , err := l .Uncompressed ()
142- require .NoError (t , err )
143- _ , err = io .ReadAll (r )
144- require .NoError (t , err )
145- }
146- }
128+ client := defaultClient {ctx : context .Background ()}
129+ fetched , err := client .Image (ref )
130+ require .NoError (t , err )
147131
148- fetchFully ()
149- fetchFully ( )
150- fetchFully ( )
132+ layers , err := fetched . Layers ()
133+ require . NoError ( t , err )
134+ assert . Len ( t , layers , numLayers )
151135
152- blobDownloadCount := strings .Count (l .String (), "GET /v2/repository/image/blobs/sha256:" )
153- assert .Equal (t , 5 , blobDownloadCount ) // three configs fetched each time and two layers fetched only once
136+ for _ , l := range layers {
137+ readAndVerifyLayer (t , l )
138+ }
154139}
155140
156141func TestLayer (t * testing.T ) {
157142 layer , err := random .Layer (1024 , types .OCIUncompressedLayer )
158143 require .NoError (t , err )
159144
160- l := & bytes.Buffer {}
161- registry := httptest .NewServer (registry .New (registry .Logger (log .New (l , "" , 0 ))))
145+ registry := httptest .NewServer (registry .New (registry .Logger (log .New (io .Discard , "" , 0 ))))
162146 t .Cleanup (registry .Close )
163147
164148 u , err := url .Parse (registry .URL )
@@ -174,24 +158,14 @@ func TestLayer(t *testing.T) {
174158 require .NoError (t , err )
175159 layerURI := fmt .Sprintf ("%s@%s" , uri , digest )
176160
177- fetchCount := 5
178- for i := 0 ; i < fetchCount ; i ++ {
179- d , err := name .NewDigest (layerURI )
180- require .NoError (t , err )
181-
182- client := defaultClient {}
183- l , err := client .Layer (d )
161+ d , err := name .NewDigest (layerURI )
162+ require .NoError (t , err )
184163
185- require .NoError (t , err )
186- r , err := l .Uncompressed ()
187- require .NoError (t , err )
188- _ , err = io .ReadAll (r )
189- require .NoError (t , err )
190- }
164+ client := defaultClient {ctx : context .Background ()}
165+ fetched , err := client .Layer (d )
166+ require .NoError (t , err )
191167
192- msg := fmt .Sprintf ("GET /v2/repository/image/blobs/%s" , digest )
193- blobDownloadCount := strings .Count (l .String (), msg )
194- assert .Equal (t , fetchCount , blobDownloadCount )
168+ readAndVerifyLayer (t , fetched )
195169}
196170
197171func TestScopedAuth (t * testing.T ) {
0 commit comments