add pending test for client.Create functionality

- addresses todo for testing methods with clientset calls
(https://github.com/kubernetes/helm/blob/master/pkg/kube/client_test.go#L199)

[https://github.com/kubernetes/helm/issues/3319]
pull/3477/head
John Calabrese 8 years ago
parent 2a9a9f1851
commit 203e0d845e

@ -36,7 +36,10 @@ import (
"k8s.io/client-go/rest/fake" "k8s.io/client-go/rest/fake"
"k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
"k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl"
"k8s.io/kubernetes/pkg/kubectl/categories"
cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/kubectl/resource"
@ -289,6 +292,77 @@ func (t *testPrinter) AfterPrint(io.Writer, string) error {
return t.Err return t.Err
} }
type testFactory struct {
cmdutil.Factory
internalclientset.Interface
ErrorResponse error
}
type testCore struct {
internalversion.CoreInterface
internalversion.NamespaceInterface
}
func (s *testFactory) ClientSet() (internalclientset.Interface, error) {
return s, s.ErrorResponse
}
func (s *testFactory) Core() internalversion.CoreInterface {
return new(testCore)
}
func (s *testCore) Namespaces() internalversion.NamespaceInterface {
return s
}
func (s *testCore) Get(name string, options apiv1.GetOptions) (*core.Namespace, error) {
return nil, nil
}
func (s *testCore) NewBuilder(internal, unstructured *resource.Mapper, categoryExpander categories.CategoryExpander) *resource.Builder {
return nil
}
func TestCreate(t *testing.T) {
list := newPodList("starfish", "otter")
f, tf, _, _ := cmdtesting.NewAPIFactory()
tf.Printer = &testPrinter{}
tf.UnstructuredClient = &fake.RESTClient{
GroupVersion: schema.GroupVersion{Version: "v1"},
NegotiatedSerializer: dynamic.ContentConfig().NegotiatedSerializer,
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
p, m := req.URL.Path, req.Method
t.Logf("got request %s %s", p, m)
switch {
case p == "/namespaces/default/pods/starfish" && m == "GET":
return newResponse(404, notFoundBody())
case p == "/namespaces/default/pods/otter" && m == "GET":
return newResponse(200, &list.Items[1])
case p == "/namespaces/default/pods" && m == "POST":
return newResponse(200, &list.Items[1])
default:
t.Fatalf("unexpected request: %s %s", req.Method, req.URL.Path)
return nil, nil
}
}),
}
c := newTestClient(&testFactory{
Factory: f,
})
newPod := strings.NewReader(testNewPod)
if err := c.Create("default", newPod, 3, false); err != nil {
t.Errorf("creating a new resource with a valid manifest should succeed, got: %q", err)
}
existingPod := strings.NewReader(testExistingPod)
err := c.Create("default", existingPod, 3, false)
if err == nil {
t.Skip("This test is pending. still need to implement exit on existing resource.")
t.Errorf("creating a resource which already exists should with proper error, got: %q", err)
}
}
func TestGet(t *testing.T) { func TestGet(t *testing.T) {
list := newPodList("starfish", "otter") list := newPodList("starfish", "otter")
f, tf, _, _ := cmdtesting.NewAPIFactory() f, tf, _, _ := cmdtesting.NewAPIFactory()
@ -479,6 +553,34 @@ func TestReal(t *testing.T) {
} }
} }
const testNewPod = `
apiVersion: v1
kind: Pod
metadata:
name: otter
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
`
const testExistingPod = `
apiVersion: v1
kind: Pod
metadata:
name: starfish
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
`
const testServiceManifest = ` const testServiceManifest = `
kind: Service kind: Service
apiVersion: v1 apiVersion: v1

Loading…
Cancel
Save