github.com/LazyboyChen7/engine@v17.12.1-ce-rc2+incompatible/client/plugin_list_test.go (about) 1 package client 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "io/ioutil" 8 "net/http" 9 "strings" 10 "testing" 11 12 "github.com/docker/docker/api/types" 13 "github.com/docker/docker/api/types/filters" 14 "golang.org/x/net/context" 15 ) 16 17 func TestPluginListError(t *testing.T) { 18 client := &Client{ 19 client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")), 20 } 21 22 _, err := client.PluginList(context.Background(), filters.NewArgs()) 23 if err == nil || err.Error() != "Error response from daemon: Server error" { 24 t.Fatalf("expected a Server Error, got %v", err) 25 } 26 } 27 28 func TestPluginList(t *testing.T) { 29 expectedURL := "/plugins" 30 31 enabledFilters := filters.NewArgs() 32 enabledFilters.Add("enabled", "true") 33 34 capabilityFilters := filters.NewArgs() 35 capabilityFilters.Add("capability", "volumedriver") 36 capabilityFilters.Add("capability", "authz") 37 38 listCases := []struct { 39 filters filters.Args 40 expectedQueryParams map[string]string 41 }{ 42 { 43 filters: filters.NewArgs(), 44 expectedQueryParams: map[string]string{ 45 "all": "", 46 "filter": "", 47 "filters": "", 48 }, 49 }, 50 { 51 filters: enabledFilters, 52 expectedQueryParams: map[string]string{ 53 "all": "", 54 "filter": "", 55 "filters": `{"enabled":{"true":true}}`, 56 }, 57 }, 58 { 59 filters: capabilityFilters, 60 expectedQueryParams: map[string]string{ 61 "all": "", 62 "filter": "", 63 "filters": `{"capability":{"authz":true,"volumedriver":true}}`, 64 }, 65 }, 66 } 67 68 for _, listCase := range listCases { 69 client := &Client{ 70 client: newMockClient(func(req *http.Request) (*http.Response, error) { 71 if !strings.HasPrefix(req.URL.Path, expectedURL) { 72 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL) 73 } 74 query := req.URL.Query() 75 for key, expected := range listCase.expectedQueryParams { 76 actual := query.Get(key) 77 if actual != expected { 78 return nil, fmt.Errorf("%s not set in URL query properly. Expected '%s', got %s", key, expected, actual) 79 } 80 } 81 content, err := json.Marshal([]*types.Plugin{ 82 { 83 ID: "plugin_id1", 84 }, 85 { 86 ID: "plugin_id2", 87 }, 88 }) 89 if err != nil { 90 return nil, err 91 } 92 return &http.Response{ 93 StatusCode: http.StatusOK, 94 Body: ioutil.NopCloser(bytes.NewReader(content)), 95 }, nil 96 }), 97 } 98 99 plugins, err := client.PluginList(context.Background(), listCase.filters) 100 if err != nil { 101 t.Fatal(err) 102 } 103 if len(plugins) != 2 { 104 t.Fatalf("expected 2 plugins, got %v", plugins) 105 } 106 } 107 }