| /* |
| Copyright 2018 The Kubernetes Authors. |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| package testing |
| |
| import ( |
| "bytes" |
| "encoding/json" |
| "io" |
| "io/ioutil" |
| "net/http" |
| "testing" |
| |
| corev1 "k8s.io/api/core/v1" |
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
| runtime "k8s.io/apimachinery/pkg/runtime" |
| restclient "k8s.io/client-go/rest" |
| cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" |
| "k8s.io/kubernetes/pkg/kubectl/scheme" |
| ) |
| |
| var ( |
| grace = int64(30) |
| enableServiceLinks = corev1.DefaultEnableServiceLinks |
| ) |
| |
| func DefaultHeader() http.Header { |
| header := http.Header{} |
| header.Set("Content-Type", runtime.ContentTypeJSON) |
| return header |
| } |
| |
| func DefaultClientConfig() *restclient.Config { |
| return &restclient.Config{ |
| APIPath: "/api", |
| ContentConfig: restclient.ContentConfig{ |
| NegotiatedSerializer: scheme.Codecs, |
| ContentType: runtime.ContentTypeJSON, |
| GroupVersion: &corev1.SchemeGroupVersion, |
| }, |
| } |
| } |
| |
| func ObjBody(codec runtime.Codec, obj runtime.Object) io.ReadCloser { |
| return ioutil.NopCloser(bytes.NewReader([]byte(runtime.EncodeOrDie(codec, obj)))) |
| } |
| |
| func BytesBody(bodyBytes []byte) io.ReadCloser { |
| return ioutil.NopCloser(bytes.NewReader(bodyBytes)) |
| } |
| |
| func StringBody(body string) io.ReadCloser { |
| return ioutil.NopCloser(bytes.NewReader([]byte(body))) |
| } |
| |
| func TestData() (*corev1.PodList, *corev1.ServiceList, *corev1.ReplicationControllerList) { |
| pods := &corev1.PodList{ |
| ListMeta: metav1.ListMeta{ |
| ResourceVersion: "15", |
| }, |
| Items: []corev1.Pod{ |
| { |
| ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "test", ResourceVersion: "10"}, |
| Spec: corev1.PodSpec{ |
| RestartPolicy: corev1.RestartPolicyAlways, |
| DNSPolicy: corev1.DNSClusterFirst, |
| TerminationGracePeriodSeconds: &grace, |
| SecurityContext: &corev1.PodSecurityContext{}, |
| EnableServiceLinks: &enableServiceLinks, |
| }, |
| }, |
| { |
| ObjectMeta: metav1.ObjectMeta{Name: "bar", Namespace: "test", ResourceVersion: "11"}, |
| Spec: corev1.PodSpec{ |
| RestartPolicy: corev1.RestartPolicyAlways, |
| DNSPolicy: corev1.DNSClusterFirst, |
| TerminationGracePeriodSeconds: &grace, |
| SecurityContext: &corev1.PodSecurityContext{}, |
| EnableServiceLinks: &enableServiceLinks, |
| }, |
| }, |
| }, |
| } |
| svc := &corev1.ServiceList{ |
| ListMeta: metav1.ListMeta{ |
| ResourceVersion: "16", |
| }, |
| Items: []corev1.Service{ |
| { |
| ObjectMeta: metav1.ObjectMeta{Name: "baz", Namespace: "test", ResourceVersion: "12"}, |
| Spec: corev1.ServiceSpec{ |
| SessionAffinity: "None", |
| Type: corev1.ServiceTypeClusterIP, |
| }, |
| }, |
| }, |
| } |
| |
| one := int32(1) |
| rc := &corev1.ReplicationControllerList{ |
| ListMeta: metav1.ListMeta{ |
| ResourceVersion: "17", |
| }, |
| Items: []corev1.ReplicationController{ |
| { |
| ObjectMeta: metav1.ObjectMeta{Name: "rc1", Namespace: "test", ResourceVersion: "18"}, |
| Spec: corev1.ReplicationControllerSpec{ |
| Replicas: &one, |
| }, |
| }, |
| }, |
| } |
| return pods, svc, rc |
| } |
| |
| func GenResponseWithJsonEncodedBody(bodyStruct interface{}) (*http.Response, error) { |
| jsonBytes, err := json.Marshal(bodyStruct) |
| if err != nil { |
| return nil, err |
| } |
| return &http.Response{StatusCode: 200, Header: DefaultHeader(), Body: BytesBody(jsonBytes)}, nil |
| } |
| |
| func InitTestErrorHandler(t *testing.T) { |
| cmdutil.BehaviorOnFatal(func(str string, code int) { |
| t.Errorf("Error running command (exit code %d): %s", code, str) |
| }) |
| } |
| |
| func Int32ptr(val int) *int32 { |
| t := int32(val) |
| return &t |
| } |