github.com/rish1988/moby@v25.0.2+incompatible/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/api/types/image" 15 "github.com/docker/docker/errdefs" 16 "gotest.tools/v3/assert" 17 is "gotest.tools/v3/assert/cmp" 18 ) 19 20 func TestImageImportError(t *testing.T) { 21 client := &Client{ 22 client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")), 23 } 24 _, err := client.ImageImport(context.Background(), types.ImageImportSource{}, "image:tag", image.ImportOptions{}) 25 assert.Check(t, is.ErrorType(err, errdefs.IsSystem)) 26 } 27 28 func TestImageImport(t *testing.T) { 29 expectedURL := "/images/create" 30 client := &Client{ 31 client: newMockClient(func(r *http.Request) (*http.Response, error) { 32 if !strings.HasPrefix(r.URL.Path, expectedURL) { 33 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, r.URL) 34 } 35 query := r.URL.Query() 36 fromSrc := query.Get("fromSrc") 37 if fromSrc != "image_source" { 38 return nil, fmt.Errorf("fromSrc not set in URL query properly. Expected 'image_source', got %s", fromSrc) 39 } 40 repo := query.Get("repo") 41 if repo != "repository_name:imported" { 42 return nil, fmt.Errorf("repo not set in URL query properly. Expected 'repository_name:imported', got %s", repo) 43 } 44 tag := query.Get("tag") 45 if tag != "imported" { 46 return nil, fmt.Errorf("tag not set in URL query properly. Expected 'imported', got %s", tag) 47 } 48 message := query.Get("message") 49 if message != "A message" { 50 return nil, fmt.Errorf("message not set in URL query properly. Expected 'A message', got %s", message) 51 } 52 changes := query["changes"] 53 expectedChanges := []string{"change1", "change2"} 54 if !reflect.DeepEqual(expectedChanges, changes) { 55 return nil, fmt.Errorf("changes not set in URL query properly. Expected %v, got %v", expectedChanges, changes) 56 } 57 58 return &http.Response{ 59 StatusCode: http.StatusOK, 60 Body: io.NopCloser(bytes.NewReader([]byte("response"))), 61 }, nil 62 }), 63 } 64 importResponse, err := client.ImageImport(context.Background(), types.ImageImportSource{ 65 Source: strings.NewReader("source"), 66 SourceName: "image_source", 67 }, "repository_name:imported", image.ImportOptions{ 68 Tag: "imported", 69 Message: "A message", 70 Changes: []string{"change1", "change2"}, 71 }) 72 if err != nil { 73 t.Fatal(err) 74 } 75 response, err := io.ReadAll(importResponse) 76 if err != nil { 77 t.Fatal(err) 78 } 79 importResponse.Close() 80 if string(response) != "response" { 81 t.Fatalf("expected response to contain 'response', got %s", string(response)) 82 } 83 }