func TestServiceProxyGet(t *testing.T) { body := "OK" ns := api.NamespaceDefault c := &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Default.ResourcePathWithPrefix("proxy", "services", ns, "service-1") + "/foo", Query: simple.BuildQueryValues(url.Values{"param-name": []string{"param-value"}}), }, Response: simple.Response{StatusCode: 200, RawBody: &body}, } response, err := c.Setup(t).Services(ns).ProxyGet("", "service-1", "", "foo", map[string]string{"param-name": "param-value"}).DoRaw() defer c.Close() c.ValidateRaw(t, response, err) // With scheme and port specified c = &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Default.ResourcePathWithPrefix("proxy", "services", ns, "https:service-1:my-port") + "/foo", Query: simple.BuildQueryValues(url.Values{"param-name": []string{"param-value"}}), }, Response: simple.Response{StatusCode: 200, RawBody: &body}, } response, err = c.Setup(t).Services(ns).ProxyGet("https", "service-1", "my-port", "foo", map[string]string{"param-name": "param-value"}).DoRaw() defer c.Close() c.ValidateRaw(t, response, err) }
func TestListDeploymentsLabels(t *testing.T) { ns := api.NamespaceDefault labelSelectorQueryParamName := unversioned.LabelSelectorQueryParam(testapi.Extensions.GroupVersion().String()) c := &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Extensions.ResourcePath("deployments", ns, ""), Query: simple.BuildQueryValues(url.Values{labelSelectorQueryParamName: []string{"foo=bar,name=baz"}})}, Response: simple.Response{ StatusCode: http.StatusOK, Body: &extensions.DeploymentList{ Items: []extensions.Deployment{ { ObjectMeta: api.ObjectMeta{ Labels: map[string]string{ "foo": "bar", "name": "baz", }, }, }, }, }, }, } c.Setup(t) defer c.Close() c.QueryValidator[labelSelectorQueryParamName] = simple.ValidateLabels selector := labels.Set{"foo": "bar", "name": "baz"}.AsSelector() options := api.ListOptions{LabelSelector: selector} receivedPodList, err := c.Deployments(ns).List(options) c.Validate(t, receivedPodList, err) }
func TestPodTemplateList(t *testing.T) { ns := api.NamespaceDefault podTemplateList := &api.PodTemplateList{ Items: []api.PodTemplate{ { ObjectMeta: api.ObjectMeta{ Name: "foo", Namespace: ns, }, }, }, } c := &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Default.ResourcePath(getPodTemplatesResoureName(), ns, ""), Query: simple.BuildQueryValues(nil), Body: nil, }, Response: simple.Response{StatusCode: 200, Body: podTemplateList}, } response, err := c.Setup(t).PodTemplates(ns).List(api.ListOptions{}) defer c.Close() c.Validate(t, response, err) }
func TestGetIngress(t *testing.T) { ns := api.NamespaceDefault c := &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Extensions.ResourcePath(getIngressResourceName(), ns, "foo"), Query: simple.BuildQueryValues(nil), }, Response: simple.Response{ StatusCode: 200, Body: &extensions.Ingress{ ObjectMeta: api.ObjectMeta{ Name: "foo", Labels: map[string]string{ "foo": "bar", "name": "baz", }, }, Spec: extensions.IngressSpec{ Rules: []extensions.IngressRule{}, }, }, }, } receivedIngress, err := c.Setup(t).Extensions().Ingress(ns).Get("foo") defer c.Close() c.Validate(t, receivedIngress, err) }
func TestDeploymentCreate(t *testing.T) { ns := api.NamespaceDefault deployment := extensions.Deployment{ ObjectMeta: api.ObjectMeta{ Name: "abc", Namespace: ns, }, } c := &simple.Client{ Request: simple.Request{ Method: "POST", Path: testapi.Extensions.ResourcePath(getDeploymentsResourceName(), ns, ""), Query: simple.BuildQueryValues(nil), Body: &deployment, }, Response: simple.Response{StatusCode: 200, Body: &deployment}, } response, err := c.Setup(t).Deployments(ns).Create(&deployment) defer c.Close() if err != nil { t.Fatalf("unexpected error: %v", err) } c.Validate(t, response, err) }
func TestResourceQuotaGet(t *testing.T) { ns := api.NamespaceDefault resourceQuota := &api.ResourceQuota{ ObjectMeta: api.ObjectMeta{ Name: "abc", Namespace: "foo", }, Spec: api.ResourceQuotaSpec{ Hard: api.ResourceList{ api.ResourceCPU: resource.MustParse("100"), api.ResourceMemory: resource.MustParse("10000"), api.ResourcePods: resource.MustParse("10"), api.ResourceServices: resource.MustParse("10"), api.ResourceReplicationControllers: resource.MustParse("10"), api.ResourceQuotas: resource.MustParse("10"), }, }, } c := &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Default.ResourcePath(getResourceQuotasResoureName(), ns, "abc"), Query: simple.BuildQueryValues(nil), Body: nil, }, Response: simple.Response{StatusCode: 200, Body: resourceQuota}, } response, err := c.Setup(t).ResourceQuotas(ns).Get("abc") defer c.Close() c.Validate(t, response, err) }
func TestPersistentVolumeClaimGet(t *testing.T) { ns := api.NamespaceDefault persistentVolumeClaim := &api.PersistentVolumeClaim{ ObjectMeta: api.ObjectMeta{ Name: "abc", Namespace: "foo", }, Spec: api.PersistentVolumeClaimSpec{ AccessModes: []api.PersistentVolumeAccessMode{ api.ReadWriteOnce, api.ReadOnlyMany, }, Resources: api.ResourceRequirements{ Requests: api.ResourceList{ api.ResourceName(api.ResourceStorage): resource.MustParse("10G"), }, }, }, } c := &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Default.ResourcePath(getPersistentVolumeClaimsResoureName(), ns, "abc"), Query: simple.BuildQueryValues(nil), Body: nil, }, Response: simple.Response{StatusCode: 200, Body: persistentVolumeClaim}, } response, err := c.Setup(t).PersistentVolumeClaims(ns).Get("abc") defer c.Close() c.Validate(t, response, err) }
func TestPersistentVolumeGet(t *testing.T) { persistentVolume := &api.PersistentVolume{ ObjectMeta: api.ObjectMeta{ Name: "abc", Namespace: "foo", }, Spec: api.PersistentVolumeSpec{ Capacity: api.ResourceList{ api.ResourceName(api.ResourceStorage): resource.MustParse("10G"), }, PersistentVolumeSource: api.PersistentVolumeSource{ HostPath: &api.HostPathVolumeSource{Path: "/foo"}, }, }, } c := &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Default.ResourcePath(getPersistentVolumesResoureName(), "", "abc"), Query: simple.BuildQueryValues(nil), Body: nil, }, Response: simple.Response{StatusCode: 200, Body: persistentVolume}, } response, err := c.Setup(t).PersistentVolumes().Get("abc") defer c.Close() c.Validate(t, response, err) }
func TestListNodesLabels(t *testing.T) { labelSelectorQueryParamName := unversioned.LabelSelectorQueryParam(testapi.Default.GroupVersion().String()) c := &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Default.ResourcePath(getNodesResourceName(), "", ""), Query: simple.BuildQueryValues(url.Values{labelSelectorQueryParamName: []string{"foo=bar,name=baz"}})}, Response: simple.Response{ StatusCode: 200, Body: &api.NodeList{ Items: []api.Node{ { ObjectMeta: api.ObjectMeta{ Labels: map[string]string{ "foo": "bar", "name": "baz", }, }, }, }, }, }, } c.Setup(t) defer c.Close() c.QueryValidator[labelSelectorQueryParamName] = simple.ValidateLabels selector := labels.Set{"foo": "bar", "name": "baz"}.AsSelector() options := api.ListOptions{LabelSelector: selector} receivedNodeList, err := c.Nodes().List(options) c.Validate(t, receivedNodeList, err) }
func TestListServices(t *testing.T) { ns := api.NamespaceDefault c := &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Default.ResourcePath("services", ns, ""), Query: simple.BuildQueryValues(nil)}, Response: simple.Response{StatusCode: 200, Body: &api.ServiceList{ Items: []api.Service{ { ObjectMeta: api.ObjectMeta{ Name: "name", Labels: map[string]string{ "foo": "bar", "name": "baz", }, }, Spec: api.ServiceSpec{ Selector: map[string]string{ "one": "two", }, }, }, }, }, }, } receivedServiceList, err := c.Setup(t).Services(ns).List(api.ListOptions{}) defer c.Close() t.Logf("received services: %v %#v", err, receivedServiceList) c.Validate(t, receivedServiceList, err) }
func TestHorizontalPodAutoscalerList(t *testing.T) { ns := api.NamespaceDefault horizontalPodAutoscalerList := &extensions.HorizontalPodAutoscalerList{ Items: []extensions.HorizontalPodAutoscaler{ { ObjectMeta: api.ObjectMeta{ Name: "foo", Namespace: ns, }, }, }, } c := &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Extensions.ResourcePath(getHorizontalPodAutoscalersResoureName(), ns, ""), Query: simple.BuildQueryValues(nil), Body: nil, }, Response: simple.Response{StatusCode: 200, Body: horizontalPodAutoscalerList}, } response, err := c.Setup(t).Extensions().HorizontalPodAutoscalers(ns).List(api.ListOptions{}) defer c.Close() c.Validate(t, response, err) }
func TestHorizontalPodAutoscalerCreate(t *testing.T) { ns := api.NamespaceDefault horizontalPodAutoscaler := extensions.HorizontalPodAutoscaler{ ObjectMeta: api.ObjectMeta{ Name: "abc", Namespace: ns, }, } c := &simple.Client{ Request: simple.Request{ Method: "POST", Path: testapi.Extensions.ResourcePath(getHorizontalPodAutoscalersResoureName(), ns, ""), Query: simple.BuildQueryValues(nil), Body: &horizontalPodAutoscaler, }, Response: simple.Response{StatusCode: 200, Body: &horizontalPodAutoscaler}, } response, err := c.Setup(t).Extensions().HorizontalPodAutoscalers(ns).Create(&horizontalPodAutoscaler) defer c.Close() if err != nil { t.Fatalf("unexpected error: %v", err) } c.Validate(t, response, err) }
func TestGetService(t *testing.T) { ns := api.NamespaceDefault c := &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Default.ResourcePath("services", ns, "1"), Query: simple.BuildQueryValues(nil)}, Response: simple.Response{StatusCode: 200, Body: &api.Service{ObjectMeta: api.ObjectMeta{Name: "service-1"}}}, } response, err := c.Setup(t).Services(ns).Get("1") defer c.Close() c.Validate(t, response, err) }
func TestDeploymentDelete(t *testing.T) { ns := api.NamespaceDefault c := &simple.Client{ Request: simple.Request{ Method: "DELETE", Path: testapi.Extensions.ResourcePath(getDeploymentsResourceName(), ns, "foo"), Query: simple.BuildQueryValues(nil), }, Response: simple.Response{StatusCode: 200}, } err := c.Setup(t).Deployments(ns).Delete("foo", nil) defer c.Close() c.Validate(t, nil, err) }
func TestUpdateIngressStatus(t *testing.T) { ns := api.NamespaceDefault lbStatus := api.LoadBalancerStatus{ Ingress: []api.LoadBalancerIngress{ {IP: "127.0.0.1"}, }, } requestIngress := &extensions.Ingress{ ObjectMeta: api.ObjectMeta{ Name: "foo", Namespace: ns, ResourceVersion: "1", }, Status: extensions.IngressStatus{ LoadBalancer: lbStatus, }, } c := &simple.Client{ Request: simple.Request{ Method: "PUT", Path: testapi.Extensions.ResourcePath(getIngressResourceName(), ns, "foo") + "/status", Query: simple.BuildQueryValues(nil), }, Response: simple.Response{ StatusCode: 200, Body: &extensions.Ingress{ ObjectMeta: api.ObjectMeta{ Name: "foo", Labels: map[string]string{ "foo": "bar", "name": "baz", }, }, Spec: extensions.IngressSpec{ Rules: []extensions.IngressRule{}, }, Status: extensions.IngressStatus{ LoadBalancer: lbStatus, }, }, }, } receivedIngress, err := c.Setup(t).Extensions().Ingress(ns).UpdateStatus(requestIngress) defer c.Close() c.Validate(t, receivedIngress, err) }
func TestUpdateServiceStatus(t *testing.T) { ns := api.NamespaceDefault lbStatus := api.LoadBalancerStatus{ Ingress: []api.LoadBalancerIngress{ {IP: "127.0.0.1"}, }, } requestService := &api.Service{ ObjectMeta: api.ObjectMeta{ Name: "foo", Namespace: ns, ResourceVersion: "1", }, Status: api.ServiceStatus{ LoadBalancer: lbStatus, }, } c := &simple.Client{ Request: simple.Request{ Method: "PUT", Path: testapi.Default.ResourcePath("services", ns, "foo") + "/status", Query: simple.BuildQueryValues(nil), }, Response: simple.Response{ StatusCode: 200, Body: &api.Service{ ObjectMeta: api.ObjectMeta{ Name: "foo", Labels: map[string]string{ "foo": "bar", "name": "baz", }, }, Spec: api.ServiceSpec{}, Status: api.ServiceStatus{ LoadBalancer: lbStatus, }, }, }, } receivedService, err := c.Setup(t).Services(ns).UpdateStatus(requestService) defer c.Close() c.Validate(t, receivedService, err) }
func TestDeploymentRollback(t *testing.T) { ns := api.NamespaceDefault deploymentRollback := &extensions.DeploymentRollback{ Name: "abc", UpdatedAnnotations: map[string]string{}, RollbackTo: extensions.RollbackConfig{Revision: 1}, } c := &simple.Client{ Request: simple.Request{ Method: "POST", Path: testapi.Extensions.ResourcePath(getDeploymentsResourceName(), ns, "abc") + "/rollback", Query: simple.BuildQueryValues(nil), Body: deploymentRollback, }, Response: simple.Response{StatusCode: http.StatusOK}, } err := c.Setup(t).Deployments(ns).Rollback(deploymentRollback) defer c.Close() c.ValidateCommon(t, err) }
func TestDeploymentUpdateStatus(t *testing.T) { ns := api.NamespaceDefault deployment := &extensions.Deployment{ ObjectMeta: api.ObjectMeta{ Name: "abc", Namespace: ns, ResourceVersion: "1", }, } c := &simple.Client{ Request: simple.Request{ Method: "PUT", Path: testapi.Extensions.ResourcePath(getDeploymentsResourceName(), ns, "abc") + "/status", Query: simple.BuildQueryValues(nil), }, Response: simple.Response{StatusCode: 200, Body: deployment}, } response, err := c.Setup(t).Deployments(ns).UpdateStatus(deployment) defer c.Close() c.Validate(t, response, err) }
func TestPodTemplateGet(t *testing.T) { ns := api.NamespaceDefault podTemplate := &api.PodTemplate{ ObjectMeta: api.ObjectMeta{ Name: "abc", Namespace: ns, }, Template: api.PodTemplateSpec{}, } c := &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Default.ResourcePath(getPodTemplatesResoureName(), ns, "abc"), Query: simple.BuildQueryValues(nil), Body: nil, }, Response: simple.Response{StatusCode: 200, Body: podTemplate}, } response, err := c.Setup(t).PodTemplates(ns).Get("abc") defer c.Close() c.Validate(t, response, err) }
func TestLimitRangeGet(t *testing.T) { ns := api.NamespaceDefault limitRange := &api.LimitRange{ ObjectMeta: api.ObjectMeta{ Name: "abc", }, Spec: api.LimitRangeSpec{ Limits: []api.LimitRangeItem{ { Type: api.LimitTypePod, Max: api.ResourceList{ api.ResourceCPU: resource.MustParse("100"), api.ResourceMemory: resource.MustParse("10000"), }, Min: api.ResourceList{ api.ResourceCPU: resource.MustParse("0"), api.ResourceMemory: resource.MustParse("100"), }, }, }, }, } c := &simple.Client{ Request: simple.Request{ Method: "GET", Path: testapi.Default.ResourcePath(getLimitRangesResourceName(), ns, "abc"), Query: simple.BuildQueryValues(nil), Body: nil, }, Response: simple.Response{StatusCode: 200, Body: limitRange}, } response, err := c.Setup(t).LimitRanges(ns).Get("abc") defer c.Close() c.Validate(t, response, err) }
func TestDeletePod(t *testing.T) { ns := api.NamespaceDefault c := &simple.Client{ Request: simple.Request{Method: "DELETE", Path: testapi.Default.ResourcePath("pods", ns, "foo"), Query: simple.BuildQueryValues(nil)}, Response: simple.Response{StatusCode: http.StatusOK}, } err := c.Setup(t).Pods(ns).Delete("foo", nil) defer c.Close() c.Validate(t, nil, err) }
func TestPersistentVolumeDelete(t *testing.T) { c := &simple.Client{ Request: simple.Request{Method: "DELETE", Path: testapi.Default.ResourcePath(getPersistentVolumesResoureName(), "", "foo"), Query: simple.BuildQueryValues(nil)}, Response: simple.Response{StatusCode: 200}, } err := c.Setup(t).PersistentVolumes().Delete("foo") defer c.Close() c.Validate(t, nil, err) }
func TestUpdateThirdPartyResource(t *testing.T) { ns := api.NamespaceDefault requestThirdPartyResource := &extensions.ThirdPartyResource{ ObjectMeta: api.ObjectMeta{Name: "foo", ResourceVersion: "1"}, } c := &simple.Client{ Request: simple.Request{Method: "PUT", Path: testapi.Extensions.ResourcePath(getThirdPartyResourceName(), ns, "foo"), Query: simple.BuildQueryValues(nil)}, Response: simple.Response{ StatusCode: 200, Body: &extensions.ThirdPartyResource{ ObjectMeta: api.ObjectMeta{ Name: "foo", Labels: map[string]string{ "foo": "bar", "name": "baz", }, }, Description: "test third party resource", }, }, } receivedThirdPartyResource, err := c.Setup(t).Extensions().ThirdPartyResources(ns).Update(requestThirdPartyResource) defer c.Close() c.Validate(t, receivedThirdPartyResource, err) }
func TestUpdatePod(t *testing.T) { ns := api.NamespaceDefault requestPod := &api.Pod{ ObjectMeta: api.ObjectMeta{ Name: "foo", ResourceVersion: "1", Labels: map[string]string{ "foo": "bar", "name": "baz", }, }, Status: api.PodStatus{ Phase: api.PodRunning, }, } c := &simple.Client{ Request: simple.Request{Method: "PUT", Path: testapi.Default.ResourcePath("pods", ns, "foo"), Query: simple.BuildQueryValues(nil)}, Response: simple.Response{StatusCode: http.StatusOK, Body: requestPod}, } receivedPod, err := c.Setup(t).Pods(ns).Update(requestPod) defer c.Close() c.Validate(t, receivedPod, err) }
func TestGetReplicaSet(t *testing.T) { ns := api.NamespaceDefault c := &simple.Client{ Request: simple.Request{Method: "GET", Path: testapi.Extensions.ResourcePath(getReplicaSetResourceName(), ns, "foo"), Query: simple.BuildQueryValues(nil)}, Response: simple.Response{ StatusCode: 200, Body: &extensions.ReplicaSet{ ObjectMeta: api.ObjectMeta{ Name: "foo", Labels: map[string]string{ "foo": "bar", "name": "baz", }, }, Spec: extensions.ReplicaSetSpec{ Replicas: 2, Template: &api.PodTemplateSpec{}, }, }, }, } receivedRS, err := c.Setup(t).Extensions().ReplicaSets(ns).Get("foo") c.Validate(t, receivedRS, err) }
func TestGetController(t *testing.T) { ns := api.NamespaceDefault c := &simple.Client{ Request: simple.Request{Method: "GET", Path: testapi.Default.ResourcePath(getRCResourceName(), ns, "foo"), Query: simple.BuildQueryValues(nil)}, Response: simple.Response{ StatusCode: 200, Body: &api.ReplicationController{ ObjectMeta: api.ObjectMeta{ Name: "foo", Labels: map[string]string{ "foo": "bar", "name": "baz", }, }, Spec: api.ReplicationControllerSpec{ Replicas: 2, Template: &api.PodTemplateSpec{}, }, }, }, } receivedController, err := c.Setup(t).ReplicationControllers(ns).Get("foo") defer c.Close() c.Validate(t, receivedController, err) }
func TestDeleteController(t *testing.T) { ns := api.NamespaceDefault c := &simple.Client{ Request: simple.Request{Method: "DELETE", Path: testapi.Default.ResourcePath(getRCResourceName(), ns, "foo"), Query: simple.BuildQueryValues(nil)}, Response: simple.Response{StatusCode: 200}, } err := c.Setup(t).ReplicationControllers(ns).Delete("foo") defer c.Close() c.Validate(t, nil, err) }
func TestListEndpoints(t *testing.T) { ns := api.NamespaceDefault c := &simple.Client{ Request: simple.Request{Method: "GET", Path: testapi.Default.ResourcePath("endpoints", ns, ""), Query: simple.BuildQueryValues(nil)}, Response: simple.Response{StatusCode: 200, Body: &api.EndpointsList{ Items: []api.Endpoints{ { ObjectMeta: api.ObjectMeta{Name: "endpoint-1"}, Subsets: []api.EndpointSubset{{ Addresses: []api.EndpointAddress{{IP: "10.245.1.2"}, {IP: "10.245.1.3"}}, Ports: []api.EndpointPort{{Port: 8080}}, }}, }, }, }, }, } receivedEndpointsList, err := c.Setup(t).Endpoints(ns).List(api.ListOptions{}) defer c.Close() c.Validate(t, receivedEndpointsList, err) }
func TestListEmptyPods(t *testing.T) { ns := api.NamespaceDefault c := &simple.Client{ Request: simple.Request{Method: "GET", Path: testapi.Default.ResourcePath("pods", ns, ""), Query: simple.BuildQueryValues(nil)}, Response: simple.Response{StatusCode: http.StatusOK, Body: &api.PodList{}}, } podList, err := c.Setup(t).Pods(ns).List(api.ListOptions{}) defer c.Close() c.Validate(t, podList, err) }
func TestListPods(t *testing.T) { ns := api.NamespaceDefault c := &simple.Client{ Request: simple.Request{Method: "GET", Path: testapi.Default.ResourcePath("pods", ns, ""), Query: simple.BuildQueryValues(nil)}, Response: simple.Response{StatusCode: http.StatusOK, Body: &api.PodList{ Items: []api.Pod{ { Status: api.PodStatus{ Phase: api.PodRunning, }, ObjectMeta: api.ObjectMeta{ Labels: map[string]string{ "foo": "bar", "name": "baz", }, }, }, }, }, }, } receivedPodList, err := c.Setup(t).Pods(ns).List(api.ListOptions{}) defer c.Close() c.Validate(t, receivedPodList, err) }