1
16
17 package apiclient
18
19 import (
20 "bytes"
21 "encoding/json"
22 "testing"
23
24 rbac "k8s.io/api/rbac/v1"
25 "k8s.io/apimachinery/pkg/runtime/schema"
26 core "k8s.io/client-go/testing"
27 )
28
29 func TestHandleGetAction(t *testing.T) {
30 controlPlaneName := "control-plane-foo"
31 serviceSubnet := "10.96.0.1/12"
32 idr := NewInitDryRunGetter(controlPlaneName, serviceSubnet)
33
34 var tests = []struct {
35 name string
36 action core.GetActionImpl
37 expectedHandled bool
38 expectedObjectJSON []byte
39 expectedErr bool
40 }{
41 {
42 name: "get default services",
43 action: core.NewGetAction(schema.GroupVersionResource{Version: "v1", Resource: "services"}, "default", "kubernetes"),
44 expectedHandled: true,
45 expectedObjectJSON: []byte(`{"metadata":{"name":"kubernetes","namespace":"default","creationTimestamp":null,"labels":{"component":"apiserver","provider":"kubernetes"}},"spec":{"ports":[{"name":"https","port":443,"targetPort":6443}],"clusterIP":"10.96.0.1"},"status":{"loadBalancer":{}}}`),
46 expectedErr: false,
47 },
48 {
49 name: "get nodes",
50 action: core.NewRootGetAction(schema.GroupVersionResource{Version: "v1", Resource: "nodes"}, controlPlaneName),
51 expectedHandled: true,
52 expectedObjectJSON: []byte(`{"metadata":{"name":"control-plane-foo","creationTimestamp":null,"labels":{"kubernetes.io/hostname":"control-plane-foo"}},"spec":{},"status":{"daemonEndpoints":{"kubeletEndpoint":{"Port":0}},"nodeInfo":{"machineID":"","systemUUID":"","bootID":"","kernelVersion":"","osImage":"","containerRuntimeVersion":"","kubeletVersion":"","kubeProxyVersion":"","operatingSystem":"","architecture":""}}}`),
53 expectedErr: false,
54 },
55 {
56 name: "get clusterrolebinings",
57 action: core.NewRootGetAction(schema.GroupVersionResource{Group: rbac.GroupName, Version: rbac.SchemeGroupVersion.Version, Resource: "clusterrolebindings"}, "system:node"),
58 expectedHandled: true,
59 expectedObjectJSON: []byte(``),
60 expectedErr: true,
61 },
62 {
63 name: "get kube-system services",
64 action: core.NewGetAction(schema.GroupVersionResource{Version: "v1", Resource: "services"}, "kube-system", "kubernetes"),
65 expectedHandled: false,
66 expectedObjectJSON: []byte(``),
67 expectedErr: false,
68 },
69 {
70 name: "get default my-other-service",
71 action: core.NewGetAction(schema.GroupVersionResource{Version: "v1", Resource: "services"}, "default", "my-other-service"),
72 expectedHandled: false,
73 expectedObjectJSON: []byte(``),
74 expectedErr: false,
75 },
76 {
77 name: "get other-node",
78 action: core.NewRootGetAction(schema.GroupVersionResource{Version: "v1", Resource: "nodes"}, "other-node"),
79 expectedHandled: false,
80 expectedObjectJSON: []byte(``),
81 expectedErr: false,
82 },
83 }
84 for _, rt := range tests {
85 t.Run(rt.name, func(t *testing.T) {
86 handled, obj, actualErr := idr.HandleGetAction(rt.action)
87 objBytes := []byte(``)
88 if obj != nil {
89 var err error
90 objBytes, err = json.Marshal(obj)
91 if err != nil {
92 t.Fatalf("couldn't marshal returned object")
93 }
94 }
95
96 if handled != rt.expectedHandled {
97 t.Errorf(
98 "failed HandleGetAction:\n\texpected handled: %t\n\t actual: %t %v",
99 rt.expectedHandled,
100 handled,
101 rt.action,
102 )
103 }
104
105 if !bytes.Equal(objBytes, rt.expectedObjectJSON) {
106 t.Errorf(
107 "failed HandleGetAction:\n\texpected object: %q\n\t actual: %q",
108 rt.expectedObjectJSON,
109 objBytes,
110 )
111 }
112
113 if (actualErr != nil) != rt.expectedErr {
114 t.Errorf(
115 "failed HandleGetAction:\n\texpected error: %t\n\t actual: %t %v",
116 rt.expectedErr,
117 (actualErr != nil),
118 rt.action,
119 )
120 }
121 })
122 }
123 }
124
View as plain text