github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/engine/client/image_import_test.go (about) 1 package client // import "github.com/docker/docker/client" 2 3 import ( 4 "bytes" 5 "context" 6 "fmt" 7 "io" 8 "net/http" 9 "reflect" 10 "strings" 11 "testing" 12 13 "github.com/docker/docker/api/types" 14 "github.com/docker/docker/errdefs" 15 ) 16 17 func TestImageImportError(t *testing.T) { 18 client := &Client{ 19 client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")), 20 } 21 _, err := client.ImageImport(context.Background(), types.ImageImportSource{}, "image:tag", types.ImageImportOptions{}) 22 if !errdefs.IsSystem(err) { 23 t.Fatalf("expected a Server Error, got %[1]T: %[1]v", err) 24 } 25 } 26 27 func TestImageImport(t *testing.T) { 28 expectedURL := "/images/create" 29 client := &Client{ 30 client: newMockClient(func(r *http.Request) (*http.Response, error) { 31 if !strings.HasPrefix(r.URL.Path, expectedURL) { 32 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, r.URL) 33 } 34 query := r.URL.Query() 35 fromSrc := query.Get("fromSrc") 36 if fromSrc != "image_source" { 37 return nil, fmt.Errorf("fromSrc not set in URL query properly. Expected 'image_source', got %s", fromSrc) 38 } 39 repo := query.Get("repo") 40 if repo != "repository_name:imported" { 41 return nil, fmt.Errorf("repo not set in URL query properly. Expected 'repository_name:imported', got %s", repo) 42 } 43 tag := query.Get("tag") 44 if tag != "imported" { 45 return nil, fmt.Errorf("tag not set in URL query properly. Expected 'imported', got %s", tag) 46 } 47 message := query.Get("message") 48 if message != "A message" { 49 return nil, fmt.Errorf("message not set in URL query properly. Expected 'A message', got %s", message) 50 } 51 changes := query["changes"] 52 expectedChanges := []string{"change1", "change2"} 53 if !reflect.DeepEqual(expectedChanges, changes) { 54 return nil, fmt.Errorf("changes not set in URL query properly. Expected %v, got %v", expectedChanges, changes) 55 } 56 57 return &http.Response{ 58 StatusCode: http.StatusOK, 59 Body: io.NopCloser(bytes.NewReader([]byte("response"))), 60 }, nil 61 }), 62 } 63 importResponse, err := client.ImageImport(context.Background(), types.ImageImportSource{ 64 Source: strings.NewReader("source"), 65 SourceName: "image_source", 66 }, "repository_name:imported", types.ImageImportOptions{ 67 Tag: "imported", 68 Message: "A message", 69 Changes: []string{"change1", "change2"}, 70 }) 71 if err != nil { 72 t.Fatal(err) 73 } 74 response, err := io.ReadAll(importResponse) 75 if err != nil { 76 t.Fatal(err) 77 } 78 importResponse.Close() 79 if string(response) != "response" { 80 t.Fatalf("expected response to contain 'response', got %s", string(response)) 81 } 82 }