@@ -297,3 +297,67 @@ func TestPushImage_FallbackTokenFromProvider(t *testing.T) {
297297 t .Fatalf ("PushImage with fallback token: %v" , err )
298298 }
299299}
300+
301+ // TestListImages_InvalidSizeBytes verifies that ListImages returns an error when
302+ // the API returns a non-numeric imageSizeBytes value.
303+ func TestListImages_InvalidSizeBytes (t * testing.T ) {
304+ server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
305+ resp := artifactRegistryDockerImagesResponse {
306+ DockerImages : []artifactRegistryDockerImage {
307+ {URI : "gcr.io/proj/img" , Tags : []string {"v1" }, ImageSizeBytes : "not-a-number" },
308+ },
309+ }
310+ w .Header ().Set ("Content-Type" , "application/json" )
311+ json .NewEncoder (w ).Encode (resp )
312+ }))
313+ defer server .Close ()
314+
315+ p := newTestProvider (server , GCPConfig {ProjectID : "proj" , Region : "us" })
316+ _ , err := p .ListImages (context .Background (), "repo" )
317+ if err == nil {
318+ t .Fatal ("expected error for invalid imageSizeBytes" )
319+ }
320+ if ! strings .Contains (err .Error (), "parse image size" ) {
321+ t .Errorf ("unexpected error: %v" , err )
322+ }
323+ }
324+
325+ // TestListImages_InvalidUploadTime verifies that ListImages returns an error when
326+ // the API returns a non-RFC3339 uploadTime value.
327+ func TestListImages_InvalidUploadTime (t * testing.T ) {
328+ server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
329+ resp := artifactRegistryDockerImagesResponse {
330+ DockerImages : []artifactRegistryDockerImage {
331+ {URI : "gcr.io/proj/img" , Tags : []string {"v1" }, ImageSizeBytes : "100" , UploadTime : "not-a-time" },
332+ },
333+ }
334+ w .Header ().Set ("Content-Type" , "application/json" )
335+ json .NewEncoder (w ).Encode (resp )
336+ }))
337+ defer server .Close ()
338+
339+ p := newTestProvider (server , GCPConfig {ProjectID : "proj" , Region : "us" })
340+ _ , err := p .ListImages (context .Background (), "repo" )
341+ if err == nil {
342+ t .Fatal ("expected error for invalid uploadTime" )
343+ }
344+ if ! strings .Contains (err .Error (), "parse upload time" ) {
345+ t .Errorf ("unexpected error: %v" , err )
346+ }
347+ }
348+
349+ // TestNewGCPProviderWithClient_NilSafety verifies that nil client and tokenFunc
350+ // arguments do not cause panics; the provider falls back to safe defaults.
351+ func TestNewGCPProviderWithClient_NilSafety (t * testing.T ) {
352+ // Should not panic.
353+ p := NewGCPProviderWithClient (GCPConfig {ProjectID : "proj" }, nil , nil )
354+ if p == nil {
355+ t .Fatal ("expected non-nil provider" )
356+ }
357+ if p .httpClient == nil {
358+ t .Error ("expected non-nil httpClient after nil default" )
359+ }
360+ if p .tokenFunc == nil {
361+ t .Error ("expected non-nil tokenFunc after nil default" )
362+ }
363+ }
0 commit comments