// NewForConfigOrDie creates a new Clientset for the given config and // panics if there is an error in the config. func NewForConfigOrDie(c *rest.Config) *Clientset { var clientset Clientset clientset.CoreClient = v1core.NewForConfigOrDie(c) clientset.AppsClient = v1alpha1apps.NewForConfigOrDie(c) clientset.AuthenticationClient = v1beta1authentication.NewForConfigOrDie(c) clientset.AuthorizationClient = v1beta1authorization.NewForConfigOrDie(c) clientset.AutoscalingClient = v1autoscaling.NewForConfigOrDie(c) clientset.BatchClient = v1batch.NewForConfigOrDie(c) clientset.CertificatesClient = v1alpha1certificates.NewForConfigOrDie(c) clientset.ExtensionsClient = v1beta1extensions.NewForConfigOrDie(c) clientset.PolicyClient = v1alpha1policy.NewForConfigOrDie(c) clientset.RbacClient = v1alpha1rbac.NewForConfigOrDie(c) clientset.StorageClient = v1beta1storage.NewForConfigOrDie(c) clientset.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) return &clientset }
// NewForConfigOrDie creates a new Clientset for the given config and // panics if there is an error in the config. func NewForConfigOrDie(c *rest.Config) *Clientset { var cs Clientset cs.CoreV1Client = v1core.NewForConfigOrDie(c) cs.AppsV1beta1Client = v1beta1apps.NewForConfigOrDie(c) cs.AuthenticationV1beta1Client = v1beta1authentication.NewForConfigOrDie(c) cs.AuthorizationV1beta1Client = v1beta1authorization.NewForConfigOrDie(c) cs.AutoscalingV1Client = v1autoscaling.NewForConfigOrDie(c) cs.BatchV1Client = v1batch.NewForConfigOrDie(c) cs.BatchV2alpha1Client = v2alpha1batch.NewForConfigOrDie(c) cs.CertificatesV1alpha1Client = v1alpha1certificates.NewForConfigOrDie(c) cs.ExtensionsV1beta1Client = v1beta1extensions.NewForConfigOrDie(c) cs.PolicyV1beta1Client = v1beta1policy.NewForConfigOrDie(c) cs.RbacV1alpha1Client = v1alpha1rbac.NewForConfigOrDie(c) cs.StorageV1beta1Client = v1beta1storage.NewForConfigOrDie(c) cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) return &cs }
func TestNegotiateVersion(t *testing.T) { tests := []struct { name string version *uapi.GroupVersion expectedVersion *uapi.GroupVersion serverVersions []string clientVersions []uapi.GroupVersion config *rest.Config expectErr func(err error) bool sendErr error statusCode int }{ { name: "server supports client default", version: &uapi.GroupVersion{Version: "version1"}, config: &rest.Config{}, serverVersions: []string{"version1", registered.GroupOrDie(api.GroupName).GroupVersion.String()}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, registered.GroupOrDie(api.GroupName).GroupVersion}, expectedVersion: &uapi.GroupVersion{Version: "version1"}, statusCode: http.StatusOK, }, { name: "server falls back to client supported", version: ®istered.GroupOrDie(api.GroupName).GroupVersion, config: &rest.Config{}, serverVersions: []string{"version1"}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, registered.GroupOrDie(api.GroupName).GroupVersion}, expectedVersion: &uapi.GroupVersion{Version: "version1"}, statusCode: http.StatusOK, }, { name: "explicit version supported", config: &rest.Config{ContentConfig: rest.ContentConfig{GroupVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion}}, serverVersions: []string{"/version1", registered.GroupOrDie(api.GroupName).GroupVersion.String()}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, registered.GroupOrDie(api.GroupName).GroupVersion}, expectedVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion, statusCode: http.StatusOK, }, { name: "explicit version not supported", config: &rest.Config{ContentConfig: rest.ContentConfig{GroupVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion}}, serverVersions: []string{"version1"}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, registered.GroupOrDie(api.GroupName).GroupVersion}, expectErr: func(err error) bool { return strings.Contains(err.Error(), `server does not support API version "v1"`) }, statusCode: http.StatusOK, }, { name: "connection refused error", config: &rest.Config{ContentConfig: rest.ContentConfig{GroupVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion}}, serverVersions: []string{"version1"}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, registered.GroupOrDie(api.GroupName).GroupVersion}, sendErr: errors.New("connection refused"), expectErr: func(err error) bool { return strings.Contains(err.Error(), "connection refused") }, statusCode: http.StatusOK, }, { name: "discovery fails due to 403 Forbidden errors and thus serverVersions is empty, use default GroupVersion", config: &rest.Config{ContentConfig: rest.ContentConfig{GroupVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion}}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, registered.GroupOrDie(api.GroupName).GroupVersion}, expectedVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion, statusCode: http.StatusForbidden, }, { name: "discovery fails due to 404 Not Found errors and thus serverVersions is empty, use requested GroupVersion", version: &uapi.GroupVersion{Version: "version1"}, config: &rest.Config{ContentConfig: rest.ContentConfig{GroupVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion}}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, registered.GroupOrDie(api.GroupName).GroupVersion}, expectedVersion: &uapi.GroupVersion{Version: "version1"}, statusCode: http.StatusNotFound, }, { name: "discovery fails due to 403 Forbidden errors and thus serverVersions is empty, no fallback GroupVersion", config: &rest.Config{}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, registered.GroupOrDie(api.GroupName).GroupVersion}, expectErr: func(err error) bool { return strings.Contains(err.Error(), "failed to negotiate an api version;") }, statusCode: http.StatusForbidden, }, } for _, test := range tests { fakeClient := &fake.RESTClient{ NegotiatedSerializer: testapi.Default.NegotiatedSerializer(), Resp: &http.Response{ StatusCode: test.statusCode, Body: objBody(&uapi.APIVersions{Versions: test.serverVersions}), }, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { if test.sendErr != nil { return nil, test.sendErr } header := http.Header{} header.Set("Content-Type", runtime.ContentTypeJSON) return &http.Response{StatusCode: test.statusCode, Header: header, Body: objBody(&uapi.APIVersions{Versions: test.serverVersions})}, nil }), } c := discovery.NewDiscoveryClientForConfigOrDie(test.config) c.RESTClient().(*rest.RESTClient).Client = fakeClient.Client response, err := discovery.NegotiateVersion(c, test.config, test.version, test.clientVersions) if err == nil && test.expectErr != nil { t.Errorf("expected error, got nil for [%s].", test.name) } if err != nil { if test.expectErr == nil || !test.expectErr(err) { t.Errorf("unexpected error for [%s]: %v.", test.name, err) } continue } if *response != *test.expectedVersion { t.Errorf("%s: expected version %s, got %s.", test.name, test.expectedVersion, response) } } }