mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 06:27:05 +00:00
Move pkg/client/unvrsioned#testClient to pkg/client/unversioned/testclient#simple
This commit is contained in:
parent
8d46df0162
commit
6f0eb521a6
@ -20,222 +20,16 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"path"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/emicklei/go-restful/swagger"
|
||||
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/api/testapi"
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
"k8s.io/kubernetes/pkg/api/v1"
|
||||
"k8s.io/kubernetes/pkg/fields"
|
||||
"k8s.io/kubernetes/pkg/labels"
|
||||
"k8s.io/kubernetes/pkg/runtime"
|
||||
"k8s.io/kubernetes/pkg/util"
|
||||
"k8s.io/kubernetes/pkg/version"
|
||||
)
|
||||
|
||||
const nameRequiredError = "resource name may not be empty"
|
||||
|
||||
type testRequest struct {
|
||||
Method string
|
||||
Path string
|
||||
Header string
|
||||
Query url.Values
|
||||
Body runtime.Object
|
||||
RawBody *string
|
||||
}
|
||||
|
||||
type Response struct {
|
||||
StatusCode int
|
||||
Body runtime.Object
|
||||
RawBody *string
|
||||
}
|
||||
|
||||
type testClient struct {
|
||||
*Client
|
||||
Request testRequest
|
||||
Response Response
|
||||
Error bool
|
||||
Created bool
|
||||
server *httptest.Server
|
||||
handler *util.FakeHandler
|
||||
// For query args, an optional function to validate the contents
|
||||
// useful when the contents can change but still be correct.
|
||||
// Maps from query arg key to validator.
|
||||
// If no validator is present, string equality is used.
|
||||
QueryValidator map[string]func(string, string) bool
|
||||
}
|
||||
|
||||
func (c *testClient) Setup(t *testing.T) *testClient {
|
||||
c.handler = &util.FakeHandler{
|
||||
StatusCode: c.Response.StatusCode,
|
||||
}
|
||||
if responseBody := body(t, c.Response.Body, c.Response.RawBody); responseBody != nil {
|
||||
c.handler.ResponseBody = *responseBody
|
||||
}
|
||||
c.server = httptest.NewServer(c.handler)
|
||||
if c.Client == nil {
|
||||
c.Client = NewOrDie(&Config{
|
||||
Host: c.server.URL,
|
||||
GroupVersion: testapi.Default.GroupVersion(),
|
||||
})
|
||||
|
||||
// TODO: caesarxuchao: hacky way to specify version of Experimental client.
|
||||
// We will fix this by supporting multiple group versions in Config
|
||||
c.ExtensionsClient = NewExtensionsOrDie(&Config{
|
||||
Host: c.server.URL,
|
||||
GroupVersion: testapi.Extensions.GroupVersion(),
|
||||
})
|
||||
}
|
||||
c.QueryValidator = map[string]func(string, string) bool{}
|
||||
return c
|
||||
}
|
||||
|
||||
func (c *testClient) Validate(t *testing.T, received runtime.Object, err error) {
|
||||
c.ValidateCommon(t, err)
|
||||
|
||||
if c.Response.Body != nil && !api.Semantic.DeepDerivative(c.Response.Body, received) {
|
||||
t.Errorf("bad response for request %#v: expected %#v, got %#v", c.Request, c.Response.Body, received)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *testClient) ValidateRaw(t *testing.T, received []byte, err error) {
|
||||
c.ValidateCommon(t, err)
|
||||
|
||||
if c.Response.Body != nil && !reflect.DeepEqual(c.Response.Body, received) {
|
||||
t.Errorf("bad response for request %#v: expected %#v, got %#v", c.Request, c.Response.Body, received)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *testClient) ValidateCommon(t *testing.T, err error) {
|
||||
defer c.server.Close()
|
||||
|
||||
if c.Error {
|
||||
if err == nil {
|
||||
t.Errorf("error expected for %#v, got none", c.Request)
|
||||
}
|
||||
return
|
||||
}
|
||||
if err != nil {
|
||||
t.Errorf("no error expected for %#v, got: %v", c.Request, err)
|
||||
}
|
||||
|
||||
if c.handler.RequestReceived == nil {
|
||||
t.Errorf("handler had an empty request, %#v", c)
|
||||
return
|
||||
}
|
||||
|
||||
requestBody := body(t, c.Request.Body, c.Request.RawBody)
|
||||
actualQuery := c.handler.RequestReceived.URL.Query()
|
||||
t.Logf("got query: %v", actualQuery)
|
||||
t.Logf("path: %v", c.Request.Path)
|
||||
// We check the query manually, so blank it out so that FakeHandler.ValidateRequest
|
||||
// won't check it.
|
||||
c.handler.RequestReceived.URL.RawQuery = ""
|
||||
c.handler.ValidateRequest(t, path.Join(c.Request.Path), c.Request.Method, requestBody)
|
||||
for key, values := range c.Request.Query {
|
||||
validator, ok := c.QueryValidator[key]
|
||||
if !ok {
|
||||
switch key {
|
||||
case unversioned.LabelSelectorQueryParam(testapi.Default.GroupVersion().String()):
|
||||
validator = validateLabels
|
||||
case unversioned.FieldSelectorQueryParam(testapi.Default.GroupVersion().String()):
|
||||
validator = validateFields
|
||||
default:
|
||||
validator = func(a, b string) bool { return a == b }
|
||||
}
|
||||
}
|
||||
observed := actualQuery.Get(key)
|
||||
wanted := strings.Join(values, "")
|
||||
if !validator(wanted, observed) {
|
||||
t.Errorf("Unexpected query arg for key: %s. Expected %s, Received %s", key, wanted, observed)
|
||||
}
|
||||
}
|
||||
if c.Request.Header != "" {
|
||||
if c.handler.RequestReceived.Header.Get(c.Request.Header) == "" {
|
||||
t.Errorf("header %q not found in request %#v", c.Request.Header, c.handler.RequestReceived)
|
||||
}
|
||||
}
|
||||
|
||||
if expected, received := requestBody, c.handler.RequestBody; expected != nil && *expected != received {
|
||||
t.Errorf("bad body for request %#v: expected %s, got %s", c.Request, *expected, received)
|
||||
}
|
||||
}
|
||||
|
||||
// buildResourcePath is a convenience function for knowing if a namespace should be in a path param or not
|
||||
func buildResourcePath(namespace, resource string) string {
|
||||
if len(namespace) > 0 {
|
||||
return path.Join("namespaces", namespace, resource)
|
||||
}
|
||||
return resource
|
||||
}
|
||||
|
||||
// buildQueryValues is a convenience function for knowing if a namespace should be in a query param or not
|
||||
func buildQueryValues(query url.Values) url.Values {
|
||||
v := url.Values{}
|
||||
if query != nil {
|
||||
for key, values := range query {
|
||||
for _, value := range values {
|
||||
v.Add(key, value)
|
||||
}
|
||||
}
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
func validateLabels(a, b string) bool {
|
||||
sA, eA := labels.Parse(a)
|
||||
if eA != nil {
|
||||
return false
|
||||
}
|
||||
sB, eB := labels.Parse(b)
|
||||
if eB != nil {
|
||||
return false
|
||||
}
|
||||
return sA.String() == sB.String()
|
||||
}
|
||||
|
||||
func validateFields(a, b string) bool {
|
||||
sA, _ := fields.ParseSelector(a)
|
||||
sB, _ := fields.ParseSelector(b)
|
||||
return sA.String() == sB.String()
|
||||
}
|
||||
|
||||
func body(t *testing.T, obj runtime.Object, raw *string) *string {
|
||||
if obj != nil {
|
||||
fqKind, err := api.Scheme.ObjectKind(obj)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected encoding error: %v", err)
|
||||
}
|
||||
// TODO: caesarxuchao: we should detect which group an object belongs to
|
||||
// by using the version returned by Schem.ObjectVersionAndKind() once we
|
||||
// split the schemes for internal objects.
|
||||
// TODO: caesarxuchao: we should add a map from kind to group in Scheme.
|
||||
var bs []byte
|
||||
if api.Scheme.Recognizes(testapi.Default.GroupVersion().WithKind(fqKind.Kind)) {
|
||||
bs, err = testapi.Default.Codec().Encode(obj)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected encoding error: %v", err)
|
||||
}
|
||||
} else if api.Scheme.Recognizes(testapi.Extensions.GroupVersion().WithKind(fqKind.Kind)) {
|
||||
bs, err = testapi.Extensions.Codec().Encode(obj)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected encoding error: %v", err)
|
||||
}
|
||||
} else {
|
||||
t.Errorf("unexpected kind: %v", fqKind.Kind)
|
||||
}
|
||||
body := string(bs)
|
||||
return &body
|
||||
}
|
||||
return raw
|
||||
}
|
||||
|
||||
func TestGetServerVersion(t *testing.T) {
|
||||
expect := version.Info{
|
||||
Major: "foo",
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"testing"
|
||||
@ -31,12 +36,12 @@ func getDSResourceName() string {
|
||||
|
||||
func TestListDaemonSets(t *testing.T) {
|
||||
ns := api.NamespaceAll
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Extensions.ResourcePath(getDSResourceName(), ns, ""),
|
||||
},
|
||||
Response: Response{StatusCode: 200,
|
||||
Response: simple.Response{StatusCode: 200,
|
||||
Body: &extensions.DaemonSetList{
|
||||
Items: []extensions.DaemonSet{
|
||||
{
|
||||
@ -62,9 +67,9 @@ func TestListDaemonSets(t *testing.T) {
|
||||
|
||||
func TestGetDaemonSet(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "GET", Path: testapi.Extensions.ResourcePath(getDSResourceName(), ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "GET", Path: testapi.Extensions.ResourcePath(getDSResourceName(), ns, "foo"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &extensions.DaemonSet{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
@ -86,10 +91,10 @@ func TestGetDaemonSet(t *testing.T) {
|
||||
|
||||
func TestGetDaemonSetWithNoName(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{Error: true}
|
||||
c := &simple.Client{Error: true}
|
||||
receivedPod, err := c.Setup(t).Extensions().DaemonSets(ns).Get("")
|
||||
if (err != nil) && (err.Error() != nameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", nameRequiredError, err)
|
||||
if (err != nil) && (err.Error() != simple.NameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", simple.NameRequiredError, err)
|
||||
}
|
||||
|
||||
c.Validate(t, receivedPod, err)
|
||||
@ -100,9 +105,9 @@ func TestUpdateDaemonSet(t *testing.T) {
|
||||
requestDaemonSet := &extensions.DaemonSet{
|
||||
ObjectMeta: api.ObjectMeta{Name: "foo", ResourceVersion: "1"},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Extensions.ResourcePath(getDSResourceName(), ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "PUT", Path: testapi.Extensions.ResourcePath(getDSResourceName(), ns, "foo"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &extensions.DaemonSet{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
@ -127,9 +132,9 @@ func TestUpdateDaemonSetUpdateStatus(t *testing.T) {
|
||||
requestDaemonSet := &extensions.DaemonSet{
|
||||
ObjectMeta: api.ObjectMeta{Name: "foo", ResourceVersion: "1"},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Extensions.ResourcePath(getDSResourceName(), ns, "foo") + "/status", Query: buildQueryValues(nil)},
|
||||
Response: Response{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "PUT", Path: testapi.Extensions.ResourcePath(getDSResourceName(), ns, "foo") + "/status", Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &extensions.DaemonSet{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
@ -152,9 +157,9 @@ func TestUpdateDaemonSetUpdateStatus(t *testing.T) {
|
||||
|
||||
func TestDeleteDaemon(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "DELETE", Path: testapi.Extensions.ResourcePath(getDSResourceName(), ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "DELETE", Path: testapi.Extensions.ResourcePath(getDSResourceName(), ns, "foo"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
err := c.Setup(t).Extensions().DaemonSets(ns).Delete("foo")
|
||||
c.Validate(t, nil, err)
|
||||
@ -165,9 +170,9 @@ func TestCreateDaemonSet(t *testing.T) {
|
||||
requestDaemonSet := &extensions.DaemonSet{
|
||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "POST", Path: testapi.Extensions.ResourcePath(getDSResourceName(), ns, ""), Body: requestDaemonSet, Query: buildQueryValues(nil)},
|
||||
Response: Response{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "POST", Path: testapi.Extensions.ResourcePath(getDSResourceName(), ns, ""), Body: requestDaemonSet, Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &extensions.DaemonSet{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
@ -38,14 +43,14 @@ func TestDeploymentCreate(t *testing.T) {
|
||||
Namespace: ns,
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "POST",
|
||||
Path: testapi.Extensions.ResourcePath(getDeploymentsResoureName(), ns, ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: &deployment,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: &deployment},
|
||||
Response: simple.Response{StatusCode: 200, Body: &deployment},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).Deployments(ns).Create(&deployment)
|
||||
@ -63,14 +68,14 @@ func TestDeploymentGet(t *testing.T) {
|
||||
Namespace: ns,
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Extensions.ResourcePath(getDeploymentsResoureName(), ns, "abc"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: deployment},
|
||||
Response: simple.Response{StatusCode: 200, Body: deployment},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).Deployments(ns).Get("abc")
|
||||
@ -89,14 +94,14 @@ func TestDeploymentList(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Extensions.ResourcePath(getDeploymentsResoureName(), ns, ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: deploymentList},
|
||||
Response: simple.Response{StatusCode: 200, Body: deploymentList},
|
||||
}
|
||||
response, err := c.Setup(t).Deployments(ns).List(unversioned.ListOptions{})
|
||||
c.Validate(t, response, err)
|
||||
@ -111,13 +116,13 @@ func TestDeploymentUpdate(t *testing.T) {
|
||||
ResourceVersion: "1",
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "PUT",
|
||||
Path: testapi.Extensions.ResourcePath(getDeploymentsResoureName(), ns, "abc"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: deployment},
|
||||
Response: simple.Response{StatusCode: 200, Body: deployment},
|
||||
}
|
||||
response, err := c.Setup(t).Deployments(ns).Update(deployment)
|
||||
c.Validate(t, response, err)
|
||||
@ -132,13 +137,13 @@ func TestDeploymentUpdateStatus(t *testing.T) {
|
||||
ResourceVersion: "1",
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "PUT",
|
||||
Path: testapi.Extensions.ResourcePath(getDeploymentsResoureName(), ns, "abc") + "/status",
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: deployment},
|
||||
Response: simple.Response{StatusCode: 200, Body: deployment},
|
||||
}
|
||||
response, err := c.Setup(t).Deployments(ns).UpdateStatus(deployment)
|
||||
c.Validate(t, response, err)
|
||||
@ -146,26 +151,26 @@ func TestDeploymentUpdateStatus(t *testing.T) {
|
||||
|
||||
func TestDeploymentDelete(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "DELETE",
|
||||
Path: testapi.Extensions.ResourcePath(getDeploymentsResoureName(), ns, "foo"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
},
|
||||
Response: Response{StatusCode: 200},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
err := c.Setup(t).Deployments(ns).Delete("foo", nil)
|
||||
c.Validate(t, nil, err)
|
||||
}
|
||||
|
||||
func TestDeploymentWatch(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Extensions.ResourcePathWithPrefix("watch", getDeploymentsResoureName(), "", ""),
|
||||
Query: url.Values{"resourceVersion": []string{}},
|
||||
},
|
||||
Response: Response{StatusCode: 200},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
_, err := c.Setup(t).Deployments(api.NamespaceAll).Watch(unversioned.ListOptions{})
|
||||
c.Validate(t, nil, err)
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"testing"
|
||||
@ -26,9 +31,9 @@ import (
|
||||
|
||||
func TestListEndpoints(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "GET", Path: testapi.Default.ResourcePath("endpoints", ns, ""), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200,
|
||||
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{
|
||||
{
|
||||
@ -48,9 +53,9 @@ func TestListEndpoints(t *testing.T) {
|
||||
|
||||
func TestGetEndpoints(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "GET", Path: testapi.Default.ResourcePath("endpoints", ns, "endpoint-1"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: &api.Endpoints{ObjectMeta: api.ObjectMeta{Name: "endpoint-1"}}},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "GET", Path: testapi.Default.ResourcePath("endpoints", ns, "endpoint-1"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200, Body: &api.Endpoints{ObjectMeta: api.ObjectMeta{Name: "endpoint-1"}}},
|
||||
}
|
||||
response, err := c.Setup(t).Endpoints(ns).Get("endpoint-1")
|
||||
c.Validate(t, response, err)
|
||||
@ -58,10 +63,10 @@ func TestGetEndpoints(t *testing.T) {
|
||||
|
||||
func TestGetEndpointWithNoName(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{Error: true}
|
||||
c := &simple.Client{Error: true}
|
||||
receivedPod, err := c.Setup(t).Endpoints(ns).Get("")
|
||||
if (err != nil) && (err.Error() != nameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", nameRequiredError, err)
|
||||
if (err != nil) && (err.Error() != simple.NameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", simple.NameRequiredError, err)
|
||||
}
|
||||
|
||||
c.Validate(t, receivedPod, err)
|
||||
|
@ -190,7 +190,7 @@ func (e *events) GetFieldSelector(involvedObjectName, involvedObjectNamespace, i
|
||||
apiVersion := e.client.APIVersion().String()
|
||||
field := fields.Set{}
|
||||
if involvedObjectName != nil {
|
||||
field[getInvolvedObjectNameFieldLabel(apiVersion)] = *involvedObjectName
|
||||
field[GetInvolvedObjectNameFieldLabel(apiVersion)] = *involvedObjectName
|
||||
}
|
||||
if involvedObjectNamespace != nil {
|
||||
field["involvedObject.namespace"] = *involvedObjectNamespace
|
||||
@ -205,6 +205,6 @@ func (e *events) GetFieldSelector(involvedObjectName, involvedObjectNamespace, i
|
||||
}
|
||||
|
||||
// Returns the appropriate field label to use for name of the involved object as per the given API version.
|
||||
func getInvolvedObjectNameFieldLabel(version string) string {
|
||||
func GetInvolvedObjectNameFieldLabel(version string) string {
|
||||
return "involvedObject.name"
|
||||
}
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
@ -27,20 +32,20 @@ import (
|
||||
)
|
||||
|
||||
func TestEventSearch(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath("events", "baz", ""),
|
||||
Query: url.Values{
|
||||
unversioned.FieldSelectorQueryParam(testapi.Default.GroupVersion().String()): []string{
|
||||
getInvolvedObjectNameFieldLabel(testapi.Default.GroupVersion().String()) + "=foo,",
|
||||
GetInvolvedObjectNameFieldLabel(testapi.Default.GroupVersion().String()) + "=foo,",
|
||||
"involvedObject.namespace=baz,",
|
||||
"involvedObject.kind=Pod",
|
||||
},
|
||||
unversioned.LabelSelectorQueryParam(testapi.Default.GroupVersion().String()): []string{},
|
||||
},
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: &api.EventList{}},
|
||||
Response: simple.Response{StatusCode: 200, Body: &api.EventList{}},
|
||||
}
|
||||
eventList, err := c.Setup(t).Events("baz").Search(
|
||||
&api.Pod{
|
||||
@ -74,13 +79,13 @@ func TestEventCreate(t *testing.T) {
|
||||
Count: 1,
|
||||
Type: api.EventTypeNormal,
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "POST",
|
||||
Path: testapi.Default.ResourcePath("events", api.NamespaceDefault, ""),
|
||||
Body: event,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: event},
|
||||
Response: simple.Response{StatusCode: 200, Body: event},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).Events(api.NamespaceDefault).Create(event)
|
||||
@ -114,13 +119,13 @@ func TestEventGet(t *testing.T) {
|
||||
Count: 1,
|
||||
Type: api.EventTypeNormal,
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath("events", "other", "1"),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: event},
|
||||
Response: simple.Response{StatusCode: 200, Body: event},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).Events("other").Get("1")
|
||||
@ -156,13 +161,13 @@ func TestEventList(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath("events", ns, ""),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: eventList},
|
||||
Response: simple.Response{StatusCode: 200, Body: eventList},
|
||||
}
|
||||
response, err := c.Setup(t).Events(ns).List(unversioned.ListOptions{})
|
||||
|
||||
@ -183,12 +188,12 @@ func TestEventList(t *testing.T) {
|
||||
|
||||
func TestEventDelete(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "DELETE",
|
||||
Path: testapi.Default.ResourcePath("events", ns, "foo"),
|
||||
},
|
||||
Response: Response{StatusCode: 200},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
err := c.Setup(t).Events(ns).Delete("foo")
|
||||
c.Validate(t, nil, err)
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
@ -38,14 +43,14 @@ func TestHorizontalPodAutoscalerCreate(t *testing.T) {
|
||||
Namespace: ns,
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "POST",
|
||||
Path: testapi.Extensions.ResourcePath(getHorizontalPodAutoscalersResoureName(), ns, ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: &horizontalPodAutoscaler,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: &horizontalPodAutoscaler},
|
||||
Response: simple.Response{StatusCode: 200, Body: &horizontalPodAutoscaler},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).Extensions().HorizontalPodAutoscalers(ns).Create(&horizontalPodAutoscaler)
|
||||
@ -63,14 +68,14 @@ func TestHorizontalPodAutoscalerGet(t *testing.T) {
|
||||
Namespace: ns,
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Extensions.ResourcePath(getHorizontalPodAutoscalersResoureName(), ns, "abc"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: horizontalPodAutoscaler},
|
||||
Response: simple.Response{StatusCode: 200, Body: horizontalPodAutoscaler},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).Extensions().HorizontalPodAutoscalers(ns).Get("abc")
|
||||
@ -89,14 +94,14 @@ func TestHorizontalPodAutoscalerList(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Extensions.ResourcePath(getHorizontalPodAutoscalersResoureName(), ns, ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: horizontalPodAutoscalerList},
|
||||
Response: simple.Response{StatusCode: 200, Body: horizontalPodAutoscalerList},
|
||||
}
|
||||
response, err := c.Setup(t).Extensions().HorizontalPodAutoscalers(ns).List(unversioned.ListOptions{})
|
||||
c.Validate(t, response, err)
|
||||
@ -111,9 +116,9 @@ func TestHorizontalPodAutoscalerUpdate(t *testing.T) {
|
||||
ResourceVersion: "1",
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Extensions.ResourcePath(getHorizontalPodAutoscalersResoureName(), ns, "abc"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: horizontalPodAutoscaler},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "PUT", Path: testapi.Extensions.ResourcePath(getHorizontalPodAutoscalersResoureName(), ns, "abc"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200, Body: horizontalPodAutoscaler},
|
||||
}
|
||||
response, err := c.Setup(t).Extensions().HorizontalPodAutoscalers(ns).Update(horizontalPodAutoscaler)
|
||||
c.Validate(t, response, err)
|
||||
@ -128,9 +133,9 @@ func TestHorizontalPodAutoscalerUpdateStatus(t *testing.T) {
|
||||
ResourceVersion: "1",
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Extensions.ResourcePath(getHorizontalPodAutoscalersResoureName(), ns, "abc") + "/status", Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: horizontalPodAutoscaler},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "PUT", Path: testapi.Extensions.ResourcePath(getHorizontalPodAutoscalersResoureName(), ns, "abc") + "/status", Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200, Body: horizontalPodAutoscaler},
|
||||
}
|
||||
response, err := c.Setup(t).Extensions().HorizontalPodAutoscalers(ns).UpdateStatus(horizontalPodAutoscaler)
|
||||
c.Validate(t, response, err)
|
||||
@ -138,21 +143,21 @@ func TestHorizontalPodAutoscalerUpdateStatus(t *testing.T) {
|
||||
|
||||
func TestHorizontalPodAutoscalerDelete(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "DELETE", Path: testapi.Extensions.ResourcePath(getHorizontalPodAutoscalersResoureName(), ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "DELETE", Path: testapi.Extensions.ResourcePath(getHorizontalPodAutoscalersResoureName(), ns, "foo"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
err := c.Setup(t).Extensions().HorizontalPodAutoscalers(ns).Delete("foo", nil)
|
||||
c.Validate(t, nil, err)
|
||||
}
|
||||
|
||||
func TestHorizontalPodAutoscalerWatch(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Extensions.ResourcePathWithPrefix("watch", getHorizontalPodAutoscalersResoureName(), "", ""),
|
||||
Query: url.Values{"resourceVersion": []string{}}},
|
||||
Response: Response{StatusCode: 200},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
_, err := c.Setup(t).Extensions().HorizontalPodAutoscalers(api.NamespaceAll).Watch(unversioned.ListOptions{})
|
||||
c.Validate(t, nil, err)
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"testing"
|
||||
@ -31,12 +36,12 @@ func getIngressResourceName() string {
|
||||
|
||||
func TestListIngress(t *testing.T) {
|
||||
ns := api.NamespaceAll
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Extensions.ResourcePath(getIngressResourceName(), ns, ""),
|
||||
},
|
||||
Response: Response{StatusCode: 200,
|
||||
Response: simple.Response{StatusCode: 200,
|
||||
Body: &extensions.IngressList{
|
||||
Items: []extensions.Ingress{
|
||||
{
|
||||
@ -61,13 +66,13 @@ func TestListIngress(t *testing.T) {
|
||||
|
||||
func TestGetIngress(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Extensions.ResourcePath(getIngressResourceName(), ns, "foo"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
},
|
||||
Response: Response{
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &extensions.Ingress{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
@ -89,10 +94,10 @@ func TestGetIngress(t *testing.T) {
|
||||
|
||||
func TestGetIngressWithNoName(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{Error: true}
|
||||
c := &simple.Client{Error: true}
|
||||
receivedIngress, err := c.Setup(t).Extensions().Ingress(ns).Get("")
|
||||
if (err != nil) && (err.Error() != nameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", nameRequiredError, err)
|
||||
if (err != nil) && (err.Error() != simple.NameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", simple.NameRequiredError, err)
|
||||
}
|
||||
|
||||
c.Validate(t, receivedIngress, err)
|
||||
@ -107,13 +112,13 @@ func TestUpdateIngress(t *testing.T) {
|
||||
ResourceVersion: "1",
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "PUT",
|
||||
Path: testapi.Extensions.ResourcePath(getIngressResourceName(), ns, "foo"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
},
|
||||
Response: Response{
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &extensions.Ingress{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
@ -150,13 +155,13 @@ func TestUpdateIngressStatus(t *testing.T) {
|
||||
LoadBalancer: lbStatus,
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "PUT",
|
||||
Path: testapi.Extensions.ResourcePath(getIngressResourceName(), ns, "foo") + "/status",
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
},
|
||||
Response: Response{
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &extensions.Ingress{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
@ -181,13 +186,13 @@ func TestUpdateIngressStatus(t *testing.T) {
|
||||
|
||||
func TestDeleteIngress(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "DELETE",
|
||||
Path: testapi.Extensions.ResourcePath(getIngressResourceName(), ns, "foo"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
},
|
||||
Response: Response{StatusCode: 200},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
err := c.Setup(t).Extensions().Ingress(ns).Delete("foo", nil)
|
||||
c.Validate(t, nil, err)
|
||||
@ -201,14 +206,14 @@ func TestCreateIngress(t *testing.T) {
|
||||
Namespace: ns,
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "POST",
|
||||
Path: testapi.Extensions.ResourcePath(getIngressResourceName(), ns, ""),
|
||||
Body: requestIngress,
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
},
|
||||
Response: Response{
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &extensions.Ingress{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"testing"
|
||||
@ -31,12 +36,12 @@ func getJobResourceName() string {
|
||||
|
||||
func TestListJobs(t *testing.T) {
|
||||
ns := api.NamespaceAll
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Extensions.ResourcePath(getJobResourceName(), ns, ""),
|
||||
},
|
||||
Response: Response{StatusCode: 200,
|
||||
Response: simple.Response{StatusCode: 200,
|
||||
Body: &extensions.JobList{
|
||||
Items: []extensions.Job{
|
||||
{
|
||||
@ -61,13 +66,13 @@ func TestListJobs(t *testing.T) {
|
||||
|
||||
func TestGetJob(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Extensions.ResourcePath(getJobResourceName(), ns, "foo"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
},
|
||||
Response: Response{
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &extensions.Job{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
@ -89,10 +94,10 @@ func TestGetJob(t *testing.T) {
|
||||
|
||||
func TestGetJobWithNoName(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{Error: true}
|
||||
c := &simple.Client{Error: true}
|
||||
receivedJob, err := c.Setup(t).Extensions().Jobs(ns).Get("")
|
||||
if (err != nil) && (err.Error() != nameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", nameRequiredError, err)
|
||||
if (err != nil) && (err.Error() != simple.NameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", simple.NameRequiredError, err)
|
||||
}
|
||||
|
||||
c.Validate(t, receivedJob, err)
|
||||
@ -107,13 +112,13 @@ func TestUpdateJob(t *testing.T) {
|
||||
ResourceVersion: "1",
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "PUT",
|
||||
Path: testapi.Extensions.ResourcePath(getJobResourceName(), ns, "foo"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
},
|
||||
Response: Response{
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &extensions.Job{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
@ -142,13 +147,13 @@ func TestUpdateJobStatus(t *testing.T) {
|
||||
ResourceVersion: "1",
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "PUT",
|
||||
Path: testapi.Extensions.ResourcePath(getJobResourceName(), ns, "foo") + "/status",
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
},
|
||||
Response: Response{
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &extensions.Job{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
@ -173,13 +178,13 @@ func TestUpdateJobStatus(t *testing.T) {
|
||||
|
||||
func TestDeleteJob(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "DELETE",
|
||||
Path: testapi.Extensions.ResourcePath(getJobResourceName(), ns, "foo"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
},
|
||||
Response: Response{StatusCode: 200},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
err := c.Setup(t).Extensions().Jobs(ns).Delete("foo", nil)
|
||||
c.Validate(t, nil, err)
|
||||
@ -193,14 +198,14 @@ func TestCreateJob(t *testing.T) {
|
||||
Namespace: ns,
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "POST",
|
||||
Path: testapi.Extensions.ResourcePath(getJobResourceName(), ns, ""),
|
||||
Body: requestJob,
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
},
|
||||
Response: Response{
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &extensions.Job{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
@ -52,14 +57,14 @@ func TestLimitRangeCreate(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "POST",
|
||||
Path: testapi.Default.ResourcePath(getLimitRangesResourceName(), ns, ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: limitRange,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: limitRange},
|
||||
Response: simple.Response{StatusCode: 200, Body: limitRange},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).LimitRanges(ns).Create(limitRange)
|
||||
@ -88,14 +93,14 @@ func TestLimitRangeGet(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getLimitRangesResourceName(), ns, "abc"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: limitRange},
|
||||
Response: simple.Response{StatusCode: 200, Body: limitRange},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).LimitRanges(ns).Get("abc")
|
||||
@ -112,14 +117,14 @@ func TestLimitRangeList(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getLimitRangesResourceName(), ns, ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: limitRangeList},
|
||||
Response: simple.Response{StatusCode: 200, Body: limitRangeList},
|
||||
}
|
||||
response, err := c.Setup(t).LimitRanges(ns).List(unversioned.ListOptions{})
|
||||
c.Validate(t, response, err)
|
||||
@ -148,9 +153,9 @@ func TestLimitRangeUpdate(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Default.ResourcePath(getLimitRangesResourceName(), ns, "abc"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: limitRange},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "PUT", Path: testapi.Default.ResourcePath(getLimitRangesResourceName(), ns, "abc"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200, Body: limitRange},
|
||||
}
|
||||
response, err := c.Setup(t).LimitRanges(ns).Update(limitRange)
|
||||
c.Validate(t, response, err)
|
||||
@ -178,9 +183,9 @@ func TestInvalidLimitRangeUpdate(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Default.ResourcePath(getLimitRangesResourceName(), ns, "abc"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: limitRange},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "PUT", Path: testapi.Default.ResourcePath(getLimitRangesResourceName(), ns, "abc"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200, Body: limitRange},
|
||||
}
|
||||
_, err := c.Setup(t).LimitRanges(ns).Update(limitRange)
|
||||
if err == nil {
|
||||
@ -190,21 +195,21 @@ func TestInvalidLimitRangeUpdate(t *testing.T) {
|
||||
|
||||
func TestLimitRangeDelete(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "DELETE", Path: testapi.Default.ResourcePath(getLimitRangesResourceName(), ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "DELETE", Path: testapi.Default.ResourcePath(getLimitRangesResourceName(), ns, "foo"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
err := c.Setup(t).LimitRanges(ns).Delete("foo")
|
||||
c.Validate(t, nil, err)
|
||||
}
|
||||
|
||||
func TestLimitRangeWatch(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePathWithPrefix("watch", getLimitRangesResourceName(), "", ""),
|
||||
Query: url.Values{"resourceVersion": []string{}}},
|
||||
Response: Response{StatusCode: 200},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
_, err := c.Setup(t).LimitRanges(api.NamespaceAll).Watch(unversioned.ListOptions{})
|
||||
c.Validate(t, nil, err)
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
@ -30,13 +35,13 @@ func TestNamespaceCreate(t *testing.T) {
|
||||
namespace := &api.Namespace{
|
||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "POST",
|
||||
Path: testapi.Default.ResourcePath("namespaces", "", ""),
|
||||
Body: namespace,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: namespace},
|
||||
Response: simple.Response{StatusCode: 200, Body: namespace},
|
||||
}
|
||||
|
||||
// from the source ns, provision a new global namespace "foo"
|
||||
@ -55,13 +60,13 @@ func TestNamespaceGet(t *testing.T) {
|
||||
namespace := &api.Namespace{
|
||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath("namespaces", "", "foo"),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: namespace},
|
||||
Response: simple.Response{StatusCode: 200, Body: namespace},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).Namespaces().Get("foo")
|
||||
@ -83,13 +88,13 @@ func TestNamespaceList(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath("namespaces", "", ""),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: namespaceList},
|
||||
Response: simple.Response{StatusCode: 200, Body: namespaceList},
|
||||
}
|
||||
response, err := c.Setup(t).Namespaces().List(unversioned.ListOptions{})
|
||||
|
||||
@ -121,11 +126,11 @@ func TestNamespaceUpdate(t *testing.T) {
|
||||
Finalizers: []api.FinalizerName{api.FinalizerKubernetes},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "PUT",
|
||||
Path: testapi.Default.ResourcePath("namespaces", "", "foo")},
|
||||
Response: Response{StatusCode: 200, Body: requestNamespace},
|
||||
Response: simple.Response{StatusCode: 200, Body: requestNamespace},
|
||||
}
|
||||
receivedNamespace, err := c.Setup(t).Namespaces().Update(requestNamespace)
|
||||
c.Validate(t, receivedNamespace, err)
|
||||
@ -145,33 +150,33 @@ func TestNamespaceFinalize(t *testing.T) {
|
||||
Finalizers: []api.FinalizerName{api.FinalizerKubernetes},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "PUT",
|
||||
Path: testapi.Default.ResourcePath("namespaces", "", "foo") + "/finalize",
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: requestNamespace},
|
||||
Response: simple.Response{StatusCode: 200, Body: requestNamespace},
|
||||
}
|
||||
receivedNamespace, err := c.Setup(t).Namespaces().Finalize(requestNamespace)
|
||||
c.Validate(t, receivedNamespace, err)
|
||||
}
|
||||
|
||||
func TestNamespaceDelete(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "DELETE", Path: testapi.Default.ResourcePath("namespaces", "", "foo")},
|
||||
Response: Response{StatusCode: 200},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "DELETE", Path: testapi.Default.ResourcePath("namespaces", "", "foo")},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
err := c.Setup(t).Namespaces().Delete("foo")
|
||||
c.Validate(t, nil, err)
|
||||
}
|
||||
|
||||
func TestNamespaceWatch(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePathWithPrefix("watch", "namespaces", "", ""),
|
||||
Query: url.Values{"resourceVersion": []string{}}},
|
||||
Response: Response{StatusCode: 200},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
_, err := c.Setup(t).Namespaces().Watch(unversioned.ListOptions{})
|
||||
c.Validate(t, nil, err)
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
@ -32,12 +37,12 @@ func getNodesResourceName() string {
|
||||
}
|
||||
|
||||
func TestListNodes(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getNodesResourceName(), "", ""),
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: &api.NodeList{ListMeta: unversioned.ListMeta{ResourceVersion: "1"}}},
|
||||
Response: simple.Response{StatusCode: 200, Body: &api.NodeList{ListMeta: unversioned.ListMeta{ResourceVersion: "1"}}},
|
||||
}
|
||||
response, err := c.Setup(t).Nodes().List(unversioned.ListOptions{})
|
||||
c.Validate(t, response, err)
|
||||
@ -45,12 +50,12 @@ func TestListNodes(t *testing.T) {
|
||||
|
||||
func TestListNodesLabels(t *testing.T) {
|
||||
labelSelectorQueryParamName := unversioned.LabelSelectorQueryParam(testapi.Default.GroupVersion().String())
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getNodesResourceName(), "", ""),
|
||||
Query: buildQueryValues(url.Values{labelSelectorQueryParamName: []string{"foo=bar,name=baz"}})},
|
||||
Response: Response{
|
||||
Query: simple.BuildQueryValues(url.Values{labelSelectorQueryParamName: []string{"foo=bar,name=baz"}})},
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &api.NodeList{
|
||||
Items: []api.Node{
|
||||
@ -67,7 +72,7 @@ func TestListNodesLabels(t *testing.T) {
|
||||
},
|
||||
}
|
||||
c.Setup(t)
|
||||
c.QueryValidator[labelSelectorQueryParamName] = validateLabels
|
||||
c.QueryValidator[labelSelectorQueryParamName] = simple.ValidateLabels
|
||||
selector := labels.Set{"foo": "bar", "name": "baz"}.AsSelector()
|
||||
options := unversioned.ListOptions{LabelSelector: unversioned.LabelSelector{selector}}
|
||||
receivedNodeList, err := c.Nodes().List(options)
|
||||
@ -75,22 +80,22 @@ func TestListNodesLabels(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetNode(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getNodesResourceName(), "", "1"),
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: &api.Node{ObjectMeta: api.ObjectMeta{Name: "node-1"}}},
|
||||
Response: simple.Response{StatusCode: 200, Body: &api.Node{ObjectMeta: api.ObjectMeta{Name: "node-1"}}},
|
||||
}
|
||||
response, err := c.Setup(t).Nodes().Get("1")
|
||||
c.Validate(t, response, err)
|
||||
}
|
||||
|
||||
func TestGetNodeWithNoName(t *testing.T) {
|
||||
c := &testClient{Error: true}
|
||||
c := &simple.Client{Error: true}
|
||||
receivedNode, err := c.Setup(t).Nodes().Get("")
|
||||
if (err != nil) && (err.Error() != nameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", nameRequiredError, err)
|
||||
if (err != nil) && (err.Error() != simple.NameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", simple.NameRequiredError, err)
|
||||
}
|
||||
|
||||
c.Validate(t, receivedNode, err)
|
||||
@ -111,12 +116,12 @@ func TestCreateNode(t *testing.T) {
|
||||
Unschedulable: false,
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "POST",
|
||||
Path: testapi.Default.ResourcePath(getNodesResourceName(), "", ""),
|
||||
Body: requestNode},
|
||||
Response: Response{
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: requestNode,
|
||||
},
|
||||
@ -126,12 +131,12 @@ func TestCreateNode(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestDeleteNode(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "DELETE",
|
||||
Path: testapi.Default.ResourcePath(getNodesResourceName(), "", "foo"),
|
||||
},
|
||||
Response: Response{StatusCode: 200},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
err := c.Setup(t).Nodes().Delete("foo")
|
||||
c.Validate(t, nil, err)
|
||||
@ -153,12 +158,12 @@ func TestUpdateNode(t *testing.T) {
|
||||
Unschedulable: true,
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "PUT",
|
||||
Path: testapi.Default.ResourcePath(getNodesResourceName(), "", "foo"),
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: requestNode},
|
||||
Response: simple.Response{StatusCode: 200, Body: requestNode},
|
||||
}
|
||||
response, err := c.Setup(t).Nodes().Update(requestNode)
|
||||
c.Validate(t, response, err)
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
@ -45,14 +50,14 @@ func TestPersistentVolumeCreate(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "POST",
|
||||
Path: testapi.Default.ResourcePath(getPersistentVolumesResoureName(), "", ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: pv,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: pv},
|
||||
Response: simple.Response{StatusCode: 200, Body: pv},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).PersistentVolumes().Create(pv)
|
||||
@ -74,14 +79,14 @@ func TestPersistentVolumeGet(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getPersistentVolumesResoureName(), "", "abc"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: persistentVolume},
|
||||
Response: simple.Response{StatusCode: 200, Body: persistentVolume},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).PersistentVolumes().Get("abc")
|
||||
@ -96,14 +101,14 @@ func TestPersistentVolumeList(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getPersistentVolumesResoureName(), "", ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: persistentVolumeList},
|
||||
Response: simple.Response{StatusCode: 200, Body: persistentVolumeList},
|
||||
}
|
||||
response, err := c.Setup(t).PersistentVolumes().List(unversioned.ListOptions{})
|
||||
c.Validate(t, response, err)
|
||||
@ -124,9 +129,9 @@ func TestPersistentVolumeUpdate(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Default.ResourcePath(getPersistentVolumesResoureName(), "", "abc"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: persistentVolume},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "PUT", Path: testapi.Default.ResourcePath(getPersistentVolumesResoureName(), "", "abc"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200, Body: persistentVolume},
|
||||
}
|
||||
response, err := c.Setup(t).PersistentVolumes().Update(persistentVolume)
|
||||
c.Validate(t, response, err)
|
||||
@ -151,33 +156,33 @@ func TestPersistentVolumeStatusUpdate(t *testing.T) {
|
||||
Message: "foo",
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "PUT",
|
||||
Path: testapi.Default.ResourcePath(getPersistentVolumesResoureName(), "", "abc") + "/status",
|
||||
Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: persistentVolume},
|
||||
Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200, Body: persistentVolume},
|
||||
}
|
||||
response, err := c.Setup(t).PersistentVolumes().UpdateStatus(persistentVolume)
|
||||
c.Validate(t, response, err)
|
||||
}
|
||||
|
||||
func TestPersistentVolumeDelete(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "DELETE", Path: testapi.Default.ResourcePath(getPersistentVolumesResoureName(), "", "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200},
|
||||
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")
|
||||
c.Validate(t, nil, err)
|
||||
}
|
||||
|
||||
func TestPersistentVolumeWatch(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePathWithPrefix("watch", getPersistentVolumesResoureName(), "", ""),
|
||||
Query: url.Values{"resourceVersion": []string{}}},
|
||||
Response: Response{StatusCode: 200},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
_, err := c.Setup(t).PersistentVolumes().Watch(unversioned.ListOptions{})
|
||||
c.Validate(t, nil, err)
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
@ -49,14 +54,14 @@ func TestPersistentVolumeClaimCreate(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "POST",
|
||||
Path: testapi.Default.ResourcePath(getPersistentVolumeClaimsResoureName(), ns, ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: pv,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: pv},
|
||||
Response: simple.Response{StatusCode: 200, Body: pv},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).PersistentVolumeClaims(ns).Create(pv)
|
||||
@ -82,14 +87,14 @@ func TestPersistentVolumeClaimGet(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getPersistentVolumeClaimsResoureName(), ns, "abc"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: persistentVolumeClaim},
|
||||
Response: simple.Response{StatusCode: 200, Body: persistentVolumeClaim},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).PersistentVolumeClaims(ns).Get("abc")
|
||||
@ -105,14 +110,14 @@ func TestPersistentVolumeClaimList(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getPersistentVolumeClaimsResoureName(), ns, ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: persistentVolumeList},
|
||||
Response: simple.Response{StatusCode: 200, Body: persistentVolumeList},
|
||||
}
|
||||
response, err := c.Setup(t).PersistentVolumeClaims(ns).List(unversioned.ListOptions{})
|
||||
c.Validate(t, response, err)
|
||||
@ -137,9 +142,9 @@ func TestPersistentVolumeClaimUpdate(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Default.ResourcePath(getPersistentVolumeClaimsResoureName(), ns, "abc"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: persistentVolumeClaim},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "PUT", Path: testapi.Default.ResourcePath(getPersistentVolumeClaimsResoureName(), ns, "abc"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200, Body: persistentVolumeClaim},
|
||||
}
|
||||
response, err := c.Setup(t).PersistentVolumeClaims(ns).Update(persistentVolumeClaim)
|
||||
c.Validate(t, response, err)
|
||||
@ -167,12 +172,12 @@ func TestPersistentVolumeClaimStatusUpdate(t *testing.T) {
|
||||
Phase: api.ClaimBound,
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "PUT",
|
||||
Path: testapi.Default.ResourcePath(getPersistentVolumeClaimsResoureName(), ns, "abc") + "/status",
|
||||
Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: persistentVolumeClaim},
|
||||
Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200, Body: persistentVolumeClaim},
|
||||
}
|
||||
response, err := c.Setup(t).PersistentVolumeClaims(ns).UpdateStatus(persistentVolumeClaim)
|
||||
c.Validate(t, response, err)
|
||||
@ -180,21 +185,21 @@ func TestPersistentVolumeClaimStatusUpdate(t *testing.T) {
|
||||
|
||||
func TestPersistentVolumeClaimDelete(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "DELETE", Path: testapi.Default.ResourcePath(getPersistentVolumeClaimsResoureName(), ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "DELETE", Path: testapi.Default.ResourcePath(getPersistentVolumeClaimsResoureName(), ns, "foo"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
err := c.Setup(t).PersistentVolumeClaims(ns).Delete("foo")
|
||||
c.Validate(t, nil, err)
|
||||
}
|
||||
|
||||
func TestPersistentVolumeClaimWatch(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePathWithPrefix("watch", getPersistentVolumeClaimsResoureName(), "", ""),
|
||||
Query: url.Values{"resourceVersion": []string{}}},
|
||||
Response: Response{StatusCode: 200},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
_, err := c.Setup(t).PersistentVolumeClaims(api.NamespaceAll).Watch(unversioned.ListOptions{})
|
||||
c.Validate(t, nil, err)
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
@ -38,14 +43,14 @@ func TestPodTemplateCreate(t *testing.T) {
|
||||
},
|
||||
Template: api.PodTemplateSpec{},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "POST",
|
||||
Path: testapi.Default.ResourcePath(getPodTemplatesResoureName(), ns, ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: &podTemplate,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: &podTemplate},
|
||||
Response: simple.Response{StatusCode: 200, Body: &podTemplate},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).PodTemplates(ns).Create(&podTemplate)
|
||||
@ -61,14 +66,14 @@ func TestPodTemplateGet(t *testing.T) {
|
||||
},
|
||||
Template: api.PodTemplateSpec{},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getPodTemplatesResoureName(), ns, "abc"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: podTemplate},
|
||||
Response: simple.Response{StatusCode: 200, Body: podTemplate},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).PodTemplates(ns).Get("abc")
|
||||
@ -87,14 +92,14 @@ func TestPodTemplateList(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getPodTemplatesResoureName(), ns, ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: podTemplateList},
|
||||
Response: simple.Response{StatusCode: 200, Body: podTemplateList},
|
||||
}
|
||||
response, err := c.Setup(t).PodTemplates(ns).List(unversioned.ListOptions{})
|
||||
c.Validate(t, response, err)
|
||||
@ -110,9 +115,9 @@ func TestPodTemplateUpdate(t *testing.T) {
|
||||
},
|
||||
Template: api.PodTemplateSpec{},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Default.ResourcePath(getPodTemplatesResoureName(), ns, "abc"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: podTemplate},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "PUT", Path: testapi.Default.ResourcePath(getPodTemplatesResoureName(), ns, "abc"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200, Body: podTemplate},
|
||||
}
|
||||
response, err := c.Setup(t).PodTemplates(ns).Update(podTemplate)
|
||||
c.Validate(t, response, err)
|
||||
@ -120,21 +125,21 @@ func TestPodTemplateUpdate(t *testing.T) {
|
||||
|
||||
func TestPodTemplateDelete(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "DELETE", Path: testapi.Default.ResourcePath(getPodTemplatesResoureName(), ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "DELETE", Path: testapi.Default.ResourcePath(getPodTemplatesResoureName(), ns, "foo"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
err := c.Setup(t).PodTemplates(ns).Delete("foo", nil)
|
||||
c.Validate(t, nil, err)
|
||||
}
|
||||
|
||||
func TestPodTemplateWatch(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePathWithPrefix("watch", getPodTemplatesResoureName(), "", ""),
|
||||
Query: url.Values{"resourceVersion": []string{}}},
|
||||
Response: Response{StatusCode: 200},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
_, err := c.Setup(t).PodTemplates(api.NamespaceAll).Watch(unversioned.ListOptions{})
|
||||
c.Validate(t, nil, err)
|
||||
|
@ -14,7 +14,9 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import . "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
@ -24,14 +26,15 @@ import (
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/api/testapi"
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
"k8s.io/kubernetes/pkg/labels"
|
||||
)
|
||||
|
||||
func TestListEmptyPods(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "GET", Path: testapi.Default.ResourcePath("pods", ns, ""), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: http.StatusOK, Body: &api.PodList{}},
|
||||
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(unversioned.ListOptions{})
|
||||
c.Validate(t, podList, err)
|
||||
@ -39,9 +42,9 @@ func TestListEmptyPods(t *testing.T) {
|
||||
|
||||
func TestListPods(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "GET", Path: testapi.Default.ResourcePath("pods", ns, ""), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: http.StatusOK,
|
||||
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{
|
||||
{
|
||||
@ -66,12 +69,12 @@ func TestListPods(t *testing.T) {
|
||||
func TestListPodsLabels(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
labelSelectorQueryParamName := unversioned.LabelSelectorQueryParam(testapi.Default.GroupVersion().String())
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath("pods", ns, ""),
|
||||
Query: buildQueryValues(url.Values{labelSelectorQueryParamName: []string{"foo=bar,name=baz"}})},
|
||||
Response: Response{
|
||||
Query: simple.BuildQueryValues(url.Values{labelSelectorQueryParamName: []string{"foo=bar,name=baz"}})},
|
||||
Response: simple.Response{
|
||||
StatusCode: http.StatusOK,
|
||||
Body: &api.PodList{
|
||||
Items: []api.Pod{
|
||||
@ -91,7 +94,7 @@ func TestListPodsLabels(t *testing.T) {
|
||||
},
|
||||
}
|
||||
c.Setup(t)
|
||||
c.QueryValidator[labelSelectorQueryParamName] = validateLabels
|
||||
c.QueryValidator[labelSelectorQueryParamName] = simple.ValidateLabels
|
||||
selector := labels.Set{"foo": "bar", "name": "baz"}.AsSelector()
|
||||
options := unversioned.ListOptions{LabelSelector: unversioned.LabelSelector{selector}}
|
||||
receivedPodList, err := c.Pods(ns).List(options)
|
||||
@ -100,9 +103,9 @@ func TestListPodsLabels(t *testing.T) {
|
||||
|
||||
func TestGetPod(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "GET", Path: testapi.Default.ResourcePath("pods", ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "GET", Path: testapi.Default.ResourcePath("pods", ns, "foo"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{
|
||||
StatusCode: http.StatusOK,
|
||||
Body: &api.Pod{
|
||||
Status: api.PodStatus{
|
||||
@ -123,10 +126,10 @@ func TestGetPod(t *testing.T) {
|
||||
|
||||
func TestGetPodWithNoName(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{Error: true}
|
||||
c := &simple.Client{Error: true}
|
||||
receivedPod, err := c.Setup(t).Pods(ns).Get("")
|
||||
if (err != nil) && (err.Error() != nameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", nameRequiredError, err)
|
||||
if (err != nil) && (err.Error() != simple.NameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", simple.NameRequiredError, err)
|
||||
}
|
||||
|
||||
c.Validate(t, receivedPod, err)
|
||||
@ -134,9 +137,9 @@ func TestGetPodWithNoName(t *testing.T) {
|
||||
|
||||
func TestDeletePod(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "DELETE", Path: testapi.Default.ResourcePath("pods", ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: http.StatusOK},
|
||||
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)
|
||||
c.Validate(t, nil, err)
|
||||
@ -155,9 +158,9 @@ func TestCreatePod(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "POST", Path: testapi.Default.ResourcePath("pods", ns, ""), Query: buildQueryValues(nil), Body: requestPod},
|
||||
Response: Response{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "POST", Path: testapi.Default.ResourcePath("pods", ns, ""), Query: simple.BuildQueryValues(nil), Body: requestPod},
|
||||
Response: simple.Response{
|
||||
StatusCode: http.StatusOK,
|
||||
Body: requestPod,
|
||||
},
|
||||
@ -181,9 +184,9 @@ func TestUpdatePod(t *testing.T) {
|
||||
Phase: api.PodRunning,
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Default.ResourcePath("pods", ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: http.StatusOK, Body: requestPod},
|
||||
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)
|
||||
c.Validate(t, receivedPod, err)
|
||||
@ -195,8 +198,8 @@ func TestPodGetLogs(t *testing.T) {
|
||||
Follow: true,
|
||||
Timestamps: true,
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath("pods", ns, "podName") + "/log",
|
||||
Query: url.Values{
|
||||
@ -204,7 +207,7 @@ func TestPodGetLogs(t *testing.T) {
|
||||
"timestamps": []string{"true"},
|
||||
},
|
||||
},
|
||||
Response: Response{StatusCode: http.StatusOK},
|
||||
Response: simple.Response{StatusCode: http.StatusOK},
|
||||
}
|
||||
|
||||
body, err := c.Setup(t).Pods(ns).GetLogs("podName", opts).Stream()
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"testing"
|
||||
@ -30,12 +35,12 @@ func getRCResourceName() string {
|
||||
|
||||
func TestListControllers(t *testing.T) {
|
||||
ns := api.NamespaceAll
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getRCResourceName(), ns, ""),
|
||||
},
|
||||
Response: Response{StatusCode: 200,
|
||||
Response: simple.Response{StatusCode: 200,
|
||||
Body: &api.ReplicationControllerList{
|
||||
Items: []api.ReplicationController{
|
||||
{
|
||||
@ -62,9 +67,9 @@ func TestListControllers(t *testing.T) {
|
||||
|
||||
func TestGetController(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "GET", Path: testapi.Default.ResourcePath(getRCResourceName(), ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{
|
||||
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{
|
||||
@ -87,10 +92,10 @@ func TestGetController(t *testing.T) {
|
||||
|
||||
func TestGetControllerWithNoName(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{Error: true}
|
||||
c := &simple.Client{Error: true}
|
||||
receivedPod, err := c.Setup(t).ReplicationControllers(ns).Get("")
|
||||
if (err != nil) && (err.Error() != nameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", nameRequiredError, err)
|
||||
if (err != nil) && (err.Error() != simple.NameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", simple.NameRequiredError, err)
|
||||
}
|
||||
|
||||
c.Validate(t, receivedPod, err)
|
||||
@ -101,9 +106,9 @@ func TestUpdateController(t *testing.T) {
|
||||
requestController := &api.ReplicationController{
|
||||
ObjectMeta: api.ObjectMeta{Name: "foo", ResourceVersion: "1"},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Default.ResourcePath(getRCResourceName(), ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "PUT", Path: testapi.Default.ResourcePath(getRCResourceName(), ns, "foo"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &api.ReplicationController{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
@ -129,9 +134,9 @@ func TestUpdateStatusController(t *testing.T) {
|
||||
requestController := &api.ReplicationController{
|
||||
ObjectMeta: api.ObjectMeta{Name: "foo", ResourceVersion: "1"},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Default.ResourcePath(getRCResourceName(), ns, "foo") + "/status", Query: buildQueryValues(nil)},
|
||||
Response: Response{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "PUT", Path: testapi.Default.ResourcePath(getRCResourceName(), ns, "foo") + "/status", Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &api.ReplicationController{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
@ -156,9 +161,9 @@ func TestUpdateStatusController(t *testing.T) {
|
||||
}
|
||||
func TestDeleteController(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "DELETE", Path: testapi.Default.ResourcePath(getRCResourceName(), ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200},
|
||||
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")
|
||||
c.Validate(t, nil, err)
|
||||
@ -169,9 +174,9 @@ func TestCreateController(t *testing.T) {
|
||||
requestController := &api.ReplicationController{
|
||||
ObjectMeta: api.ObjectMeta{Name: "foo"},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "POST", Path: testapi.Default.ResourcePath(getRCResourceName(), ns, ""), Body: requestController, Query: buildQueryValues(nil)},
|
||||
Response: Response{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "POST", Path: testapi.Default.ResourcePath(getRCResourceName(), ns, ""), Body: requestController, Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{
|
||||
StatusCode: 200,
|
||||
Body: &api.ReplicationController{
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
@ -48,14 +53,14 @@ func TestResourceQuotaCreate(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "POST",
|
||||
Path: testapi.Default.ResourcePath(getResourceQuotasResoureName(), ns, ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: resourceQuota,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: resourceQuota},
|
||||
Response: simple.Response{StatusCode: 200, Body: resourceQuota},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).ResourceQuotas(ns).Create(resourceQuota)
|
||||
@ -80,14 +85,14 @@ func TestResourceQuotaGet(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getResourceQuotasResoureName(), ns, "abc"),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: resourceQuota},
|
||||
Response: simple.Response{StatusCode: 200, Body: resourceQuota},
|
||||
}
|
||||
|
||||
response, err := c.Setup(t).ResourceQuotas(ns).Get("abc")
|
||||
@ -104,14 +109,14 @@ func TestResourceQuotaList(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath(getResourceQuotasResoureName(), ns, ""),
|
||||
Query: buildQueryValues(nil),
|
||||
Query: simple.BuildQueryValues(nil),
|
||||
Body: nil,
|
||||
},
|
||||
Response: Response{StatusCode: 200, Body: resourceQuotaList},
|
||||
Response: simple.Response{StatusCode: 200, Body: resourceQuotaList},
|
||||
}
|
||||
response, err := c.Setup(t).ResourceQuotas(ns).List(unversioned.ListOptions{})
|
||||
c.Validate(t, response, err)
|
||||
@ -136,9 +141,9 @@ func TestResourceQuotaUpdate(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Default.ResourcePath(getResourceQuotasResoureName(), ns, "abc"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: resourceQuota},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "PUT", Path: testapi.Default.ResourcePath(getResourceQuotasResoureName(), ns, "abc"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200, Body: resourceQuota},
|
||||
}
|
||||
response, err := c.Setup(t).ResourceQuotas(ns).Update(resourceQuota)
|
||||
c.Validate(t, response, err)
|
||||
@ -163,12 +168,12 @@ func TestResourceQuotaStatusUpdate(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "PUT",
|
||||
Path: testapi.Default.ResourcePath(getResourceQuotasResoureName(), ns, "abc") + "/status",
|
||||
Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: resourceQuota},
|
||||
Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200, Body: resourceQuota},
|
||||
}
|
||||
response, err := c.Setup(t).ResourceQuotas(ns).UpdateStatus(resourceQuota)
|
||||
c.Validate(t, response, err)
|
||||
@ -176,21 +181,21 @@ func TestResourceQuotaStatusUpdate(t *testing.T) {
|
||||
|
||||
func TestResourceQuotaDelete(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "DELETE", Path: testapi.Default.ResourcePath(getResourceQuotasResoureName(), ns, "foo"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "DELETE", Path: testapi.Default.ResourcePath(getResourceQuotasResoureName(), ns, "foo"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
err := c.Setup(t).ResourceQuotas(ns).Delete("foo")
|
||||
c.Validate(t, nil, err)
|
||||
}
|
||||
|
||||
func TestResourceQuotaWatch(t *testing.T) {
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePathWithPrefix("watch", getResourceQuotasResoureName(), "", ""),
|
||||
Query: url.Values{"resourceVersion": []string{}}},
|
||||
Response: Response{StatusCode: 200},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
_, err := c.Setup(t).ResourceQuotas(api.NamespaceAll).Watch(unversioned.ListOptions{})
|
||||
c.Validate(t, nil, err)
|
||||
|
@ -14,7 +14,12 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package unversioned
|
||||
package unversioned_test
|
||||
|
||||
import (
|
||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||
)
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
@ -28,12 +33,12 @@ import (
|
||||
|
||||
func TestListServices(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath("services", ns, ""),
|
||||
Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200,
|
||||
Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200,
|
||||
Body: &api.ServiceList{
|
||||
Items: []api.Service{
|
||||
{
|
||||
@ -62,12 +67,12 @@ func TestListServices(t *testing.T) {
|
||||
func TestListServicesLabels(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
labelSelectorQueryParamName := unversioned.LabelSelectorQueryParam(testapi.Default.GroupVersion().String())
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath("services", ns, ""),
|
||||
Query: buildQueryValues(url.Values{labelSelectorQueryParamName: []string{"foo=bar,name=baz"}})},
|
||||
Response: Response{StatusCode: 200,
|
||||
Query: simple.BuildQueryValues(url.Values{labelSelectorQueryParamName: []string{"foo=bar,name=baz"}})},
|
||||
Response: simple.Response{StatusCode: 200,
|
||||
Body: &api.ServiceList{
|
||||
Items: []api.Service{
|
||||
{
|
||||
@ -89,7 +94,7 @@ func TestListServicesLabels(t *testing.T) {
|
||||
},
|
||||
}
|
||||
c.Setup(t)
|
||||
c.QueryValidator[labelSelectorQueryParamName] = validateLabels
|
||||
c.QueryValidator[labelSelectorQueryParamName] = simple.ValidateLabels
|
||||
selector := labels.Set{"foo": "bar", "name": "baz"}.AsSelector()
|
||||
options := unversioned.ListOptions{LabelSelector: unversioned.LabelSelector{selector}}
|
||||
receivedServiceList, err := c.Services(ns).List(options)
|
||||
@ -98,12 +103,12 @@ func TestListServicesLabels(t *testing.T) {
|
||||
|
||||
func TestGetService(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePath("services", ns, "1"),
|
||||
Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: &api.Service{ObjectMeta: api.ObjectMeta{Name: "service-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")
|
||||
c.Validate(t, response, err)
|
||||
@ -111,10 +116,10 @@ func TestGetService(t *testing.T) {
|
||||
|
||||
func TestGetServiceWithNoName(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{Error: true}
|
||||
c := &simple.Client{Error: true}
|
||||
receivedPod, err := c.Setup(t).Services(ns).Get("")
|
||||
if (err != nil) && (err.Error() != nameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", nameRequiredError, err)
|
||||
if (err != nil) && (err.Error() != simple.NameRequiredError) {
|
||||
t.Errorf("Expected error: %v, but got %v", simple.NameRequiredError, err)
|
||||
}
|
||||
|
||||
c.Validate(t, receivedPod, err)
|
||||
@ -122,13 +127,13 @@ func TestGetServiceWithNoName(t *testing.T) {
|
||||
|
||||
func TestCreateService(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "POST",
|
||||
Path: testapi.Default.ResourcePath("services", ns, ""),
|
||||
Body: &api.Service{ObjectMeta: api.ObjectMeta{Name: "service-1"}},
|
||||
Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: &api.Service{ObjectMeta: api.ObjectMeta{Name: "service-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).Create(&api.Service{ObjectMeta: api.ObjectMeta{Name: "service-1"}})
|
||||
c.Validate(t, response, err)
|
||||
@ -137,9 +142,9 @@ func TestCreateService(t *testing.T) {
|
||||
func TestUpdateService(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
svc := &api.Service{ObjectMeta: api.ObjectMeta{Name: "service-1", ResourceVersion: "1"}}
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "PUT", Path: testapi.Default.ResourcePath("services", ns, "service-1"), Body: svc, Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200, Body: svc},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "PUT", Path: testapi.Default.ResourcePath("services", ns, "service-1"), Body: svc, Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200, Body: svc},
|
||||
}
|
||||
response, err := c.Setup(t).Services(ns).Update(svc)
|
||||
c.Validate(t, response, err)
|
||||
@ -147,9 +152,9 @@ func TestUpdateService(t *testing.T) {
|
||||
|
||||
func TestDeleteService(t *testing.T) {
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{Method: "DELETE", Path: testapi.Default.ResourcePath("services", ns, "1"), Query: buildQueryValues(nil)},
|
||||
Response: Response{StatusCode: 200},
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{Method: "DELETE", Path: testapi.Default.ResourcePath("services", ns, "1"), Query: simple.BuildQueryValues(nil)},
|
||||
Response: simple.Response{StatusCode: 200},
|
||||
}
|
||||
err := c.Setup(t).Services(ns).Delete("1")
|
||||
c.Validate(t, nil, err)
|
||||
@ -158,25 +163,25 @@ func TestDeleteService(t *testing.T) {
|
||||
func TestServiceProxyGet(t *testing.T) {
|
||||
body := "OK"
|
||||
ns := api.NamespaceDefault
|
||||
c := &testClient{
|
||||
Request: testRequest{
|
||||
c := &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePathWithPrefix("proxy", "services", ns, "service-1") + "/foo",
|
||||
Query: buildQueryValues(url.Values{"param-name": []string{"param-value"}}),
|
||||
Query: simple.BuildQueryValues(url.Values{"param-name": []string{"param-value"}}),
|
||||
},
|
||||
Response: Response{StatusCode: 200, RawBody: &body},
|
||||
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()
|
||||
c.ValidateRaw(t, response, err)
|
||||
|
||||
// With scheme and port specified
|
||||
c = &testClient{
|
||||
Request: testRequest{
|
||||
c = &simple.Client{
|
||||
Request: simple.Request{
|
||||
Method: "GET",
|
||||
Path: testapi.Default.ResourcePathWithPrefix("proxy", "services", ns, "https:service-1:my-port") + "/foo",
|
||||
Query: buildQueryValues(url.Values{"param-name": []string{"param-value"}}),
|
||||
Query: simple.BuildQueryValues(url.Values{"param-name": []string{"param-value"}}),
|
||||
},
|
||||
Response: Response{StatusCode: 200, RawBody: &body},
|
||||
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()
|
||||
c.ValidateRaw(t, response, err)
|
||||
|
224
pkg/client/unversioned/testclient/simple/simple_testclient.go
Normal file
224
pkg/client/unversioned/testclient/simple/simple_testclient.go
Normal file
@ -0,0 +1,224 @@
|
||||
/*
|
||||
Copyright 2015 The Kubernetes Authors All rights reserved.
|
||||
|
||||
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 simple
|
||||
|
||||
import (
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"path"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/api/testapi"
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/fields"
|
||||
"k8s.io/kubernetes/pkg/labels"
|
||||
"k8s.io/kubernetes/pkg/runtime"
|
||||
"k8s.io/kubernetes/pkg/util"
|
||||
)
|
||||
|
||||
const NameRequiredError = "resource name may not be empty"
|
||||
|
||||
type Request struct {
|
||||
Method string
|
||||
Path string
|
||||
Header string
|
||||
Query url.Values
|
||||
Body runtime.Object
|
||||
RawBody *string
|
||||
}
|
||||
|
||||
type Response struct {
|
||||
StatusCode int
|
||||
Body runtime.Object
|
||||
RawBody *string
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
*client.Client
|
||||
Request Request
|
||||
Response Response
|
||||
Error bool
|
||||
Created bool
|
||||
server *httptest.Server
|
||||
handler *util.FakeHandler
|
||||
// For query args, an optional function to validate the contents
|
||||
// useful when the contents can change but still be correct.
|
||||
// Maps from query arg key to validator.
|
||||
// If no validator is present, string equality is used.
|
||||
QueryValidator map[string]func(string, string) bool
|
||||
}
|
||||
|
||||
func (c *Client) Setup(t *testing.T) *Client {
|
||||
c.handler = &util.FakeHandler{
|
||||
StatusCode: c.Response.StatusCode,
|
||||
}
|
||||
if responseBody := body(t, c.Response.Body, c.Response.RawBody); responseBody != nil {
|
||||
c.handler.ResponseBody = *responseBody
|
||||
}
|
||||
c.server = httptest.NewServer(c.handler)
|
||||
if c.Client == nil {
|
||||
c.Client = client.NewOrDie(&client.Config{
|
||||
Host: c.server.URL,
|
||||
GroupVersion: testapi.Default.GroupVersion(),
|
||||
})
|
||||
|
||||
// TODO: caesarxuchao: hacky way to specify version of Experimental client.
|
||||
// We will fix this by supporting multiple group versions in Config
|
||||
c.ExtensionsClient = client.NewExtensionsOrDie(&client.Config{
|
||||
Host: c.server.URL,
|
||||
GroupVersion: testapi.Extensions.GroupVersion(),
|
||||
})
|
||||
}
|
||||
c.QueryValidator = map[string]func(string, string) bool{}
|
||||
return c
|
||||
}
|
||||
|
||||
func (c *Client) Validate(t *testing.T, received runtime.Object, err error) {
|
||||
c.ValidateCommon(t, err)
|
||||
|
||||
if c.Response.Body != nil && !api.Semantic.DeepDerivative(c.Response.Body, received) {
|
||||
t.Errorf("bad response for request %#v: expected %#v, got %#v", c.Request, c.Response.Body, received)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Client) ValidateRaw(t *testing.T, received []byte, err error) {
|
||||
c.ValidateCommon(t, err)
|
||||
|
||||
if c.Response.Body != nil && !reflect.DeepEqual(c.Response.Body, received) {
|
||||
t.Errorf("bad response for request %#v: expected %#v, got %#v", c.Request, c.Response.Body, received)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Client) ValidateCommon(t *testing.T, err error) {
|
||||
defer c.server.Close()
|
||||
|
||||
if c.Error {
|
||||
if err == nil {
|
||||
t.Errorf("error expected for %#v, got none", c.Request)
|
||||
}
|
||||
return
|
||||
}
|
||||
if err != nil {
|
||||
t.Errorf("no error expected for %#v, got: %v", c.Request, err)
|
||||
}
|
||||
|
||||
if c.handler.RequestReceived == nil {
|
||||
t.Errorf("handler had an empty request, %#v", c)
|
||||
return
|
||||
}
|
||||
|
||||
requestBody := body(t, c.Request.Body, c.Request.RawBody)
|
||||
actualQuery := c.handler.RequestReceived.URL.Query()
|
||||
t.Logf("got query: %v", actualQuery)
|
||||
t.Logf("path: %v", c.Request.Path)
|
||||
// We check the query manually, so blank it out so that FakeHandler.ValidateRequest
|
||||
// won't check it.
|
||||
c.handler.RequestReceived.URL.RawQuery = ""
|
||||
c.handler.ValidateRequest(t, path.Join(c.Request.Path), c.Request.Method, requestBody)
|
||||
for key, values := range c.Request.Query {
|
||||
validator, ok := c.QueryValidator[key]
|
||||
if !ok {
|
||||
switch key {
|
||||
case unversioned.LabelSelectorQueryParam(testapi.Default.GroupVersion().String()):
|
||||
validator = ValidateLabels
|
||||
case unversioned.FieldSelectorQueryParam(testapi.Default.GroupVersion().String()):
|
||||
validator = validateFields
|
||||
default:
|
||||
validator = func(a, b string) bool { return a == b }
|
||||
}
|
||||
}
|
||||
observed := actualQuery.Get(key)
|
||||
wanted := strings.Join(values, "")
|
||||
if !validator(wanted, observed) {
|
||||
t.Errorf("Unexpected query arg for key: %s. Expected %s, Received %s", key, wanted, observed)
|
||||
}
|
||||
}
|
||||
if c.Request.Header != "" {
|
||||
if c.handler.RequestReceived.Header.Get(c.Request.Header) == "" {
|
||||
t.Errorf("header %q not found in request %#v", c.Request.Header, c.handler.RequestReceived)
|
||||
}
|
||||
}
|
||||
|
||||
if expected, received := requestBody, c.handler.RequestBody; expected != nil && *expected != received {
|
||||
t.Errorf("bad body for request %#v: expected %s, got %s", c.Request, *expected, received)
|
||||
}
|
||||
}
|
||||
|
||||
// buildQueryValues is a convenience function for knowing if a namespace should be in a query param or not
|
||||
func BuildQueryValues(query url.Values) url.Values {
|
||||
v := url.Values{}
|
||||
if query != nil {
|
||||
for key, values := range query {
|
||||
for _, value := range values {
|
||||
v.Add(key, value)
|
||||
}
|
||||
}
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
func ValidateLabels(a, b string) bool {
|
||||
sA, eA := labels.Parse(a)
|
||||
if eA != nil {
|
||||
return false
|
||||
}
|
||||
sB, eB := labels.Parse(b)
|
||||
if eB != nil {
|
||||
return false
|
||||
}
|
||||
return sA.String() == sB.String()
|
||||
}
|
||||
|
||||
func validateFields(a, b string) bool {
|
||||
sA, _ := fields.ParseSelector(a)
|
||||
sB, _ := fields.ParseSelector(b)
|
||||
return sA.String() == sB.String()
|
||||
}
|
||||
|
||||
func body(t *testing.T, obj runtime.Object, raw *string) *string {
|
||||
if obj != nil {
|
||||
fqKind, err := api.Scheme.ObjectKind(obj)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected encoding error: %v", err)
|
||||
}
|
||||
// TODO: caesarxuchao: we should detect which group an object belongs to
|
||||
// by using the version returned by Schem.ObjectVersionAndKind() once we
|
||||
// split the schemes for internal objects.
|
||||
// TODO: caesarxuchao: we should add a map from kind to group in Scheme.
|
||||
var bs []byte
|
||||
if api.Scheme.Recognizes(testapi.Default.GroupVersion().WithKind(fqKind.Kind)) {
|
||||
bs, err = testapi.Default.Codec().Encode(obj)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected encoding error: %v", err)
|
||||
}
|
||||
} else if api.Scheme.Recognizes(testapi.Extensions.GroupVersion().WithKind(fqKind.Kind)) {
|
||||
bs, err = testapi.Extensions.Codec().Encode(obj)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected encoding error: %v", err)
|
||||
}
|
||||
} else {
|
||||
t.Errorf("unexpected kind: %v", fqKind.Kind)
|
||||
}
|
||||
body := string(bs)
|
||||
return &body
|
||||
}
|
||||
return raw
|
||||
}
|
Loading…
Reference in New Issue
Block a user