mirror of https://github.com/k3s-io/k3s
147 lines
4.0 KiB
Go
147 lines
4.0 KiB
Go
/*
|
|
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
|
|
}
|