(t *testing.T)
| 46 | } |
| 47 | |
| 48 | func TestServerSupportsVersion(t *testing.T) { |
| 49 | tests := []struct { |
| 50 | name string |
| 51 | requiredVersion schema.GroupVersion |
| 52 | serverVersions []string |
| 53 | expectErr func(err error) bool |
| 54 | sendErr error |
| 55 | statusCode int |
| 56 | }{ |
| 57 | { |
| 58 | name: "explicit version supported", |
| 59 | requiredVersion: schema.GroupVersion{Version: "v1"}, |
| 60 | serverVersions: []string{"/version1", v1.SchemeGroupVersion.String()}, |
| 61 | statusCode: http.StatusOK, |
| 62 | }, |
| 63 | { |
| 64 | name: "explicit version not supported on server", |
| 65 | requiredVersion: schema.GroupVersion{Version: "v1"}, |
| 66 | serverVersions: []string{"version1"}, |
| 67 | expectErr: func(err error) bool { return strings.Contains(err.Error(), `server does not support API version "v1"`) }, |
| 68 | statusCode: http.StatusOK, |
| 69 | }, |
| 70 | { |
| 71 | name: "connection refused error", |
| 72 | serverVersions: []string{"version1"}, |
| 73 | sendErr: errors.New("connection refused"), |
| 74 | expectErr: func(err error) bool { return strings.Contains(err.Error(), "connection refused") }, |
| 75 | statusCode: http.StatusOK, |
| 76 | }, |
| 77 | { |
| 78 | name: "discovery fails due to 404 Not Found errors and thus serverVersions is empty, use requested GroupVersion", |
| 79 | requiredVersion: schema.GroupVersion{Version: "version1"}, |
| 80 | statusCode: http.StatusNotFound, |
| 81 | }, |
| 82 | } |
| 83 | |
| 84 | for _, test := range tests { |
| 85 | fakeClient := &fake.RESTClient{ |
| 86 | NegotiatedSerializer: scheme.Codecs, |
| 87 | Resp: &http.Response{ |
| 88 | StatusCode: test.statusCode, |
| 89 | Body: objBody(&metav1.APIVersions{Versions: test.serverVersions}), |
| 90 | }, |
| 91 | Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { |
| 92 | if test.sendErr != nil { |
| 93 | return nil, test.sendErr |
| 94 | } |
| 95 | header := http.Header{} |
| 96 | header.Set("Content-Type", runtime.ContentTypeJSON) |
| 97 | return &http.Response{StatusCode: test.statusCode, Header: header, Body: objBody(&metav1.APIVersions{Versions: test.serverVersions})}, nil |
| 98 | }), |
| 99 | } |
| 100 | c := discovery.NewDiscoveryClientForConfigOrDie(&restclient.Config{}) |
| 101 | c.RESTClient().(*restclient.RESTClient).Client = fakeClient.Client |
| 102 | err := discovery.ServerSupportsVersion(c, test.requiredVersion) |
| 103 | if err == nil && test.expectErr != nil { |
| 104 | t.Errorf("expected error, got nil for [%s].", test.name) |
| 105 | } |
nothing calls this directly
no test coverage detected