1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package main
16
17 import (
18 "context"
19 "testing"
20
21 computev1beta1 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/clients/generated/apis/compute/v1beta1"
22 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/clients/generated/apis/k8s/v1alpha1"
23 spannerv1beta1 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/clients/generated/apis/spanner/v1beta1"
24 computeclient "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/clients/generated/client/clientset/versioned/typed/compute/v1beta1"
25 spannerclient "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/clients/generated/client/clientset/versioned/typed/spanner/v1beta1"
26 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/k8s"
27 testcontroller "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/test/controller"
28 testmain "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/test/main"
29 testvariable "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/test/resourcefixture/variable"
30
31 "k8s.io/apimachinery/pkg/api/errors"
32 v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
33 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
34 "sigs.k8s.io/controller-runtime/pkg/manager"
35 )
36
37 var mgr manager.Manager
38
39 func TestSpannerInstanceGoClient(t *testing.T) {
40 t.Parallel()
41 client := spannerclient.NewForConfigOrDie(mgr.GetConfig())
42 testId := testvariable.NewUniqueId()
43 spannerInstance := spannerv1beta1.SpannerInstance{
44
45 ObjectMeta: v1.ObjectMeta{
46 Name: "spannerinstance",
47 Namespace: testId,
48 Labels: map[string]string{"Key": "value"},
49 },
50 Spec: spannerv1beta1.SpannerInstanceSpec{
51 Config: "regional-us-west1",
52 DisplayName: "Unique Display Name",
53 },
54 Status: spannerv1beta1.SpannerInstanceStatus{},
55 }
56 testcontroller.SetupNamespaceForDefaultProject(t, mgr.GetClient(), testId)
57 if _, err := client.SpannerInstances(testId).Create(context.TODO(), &spannerInstance, v1.CreateOptions{}); err != nil {
58 t.Fatalf("Error creating SpannerInstance: %v", err)
59 }
60
61 name := k8s.GetNamespacedName(&spannerInstance)
62 u := unstructured.Unstructured{
63 Object: map[string]interface{}{
64 "kind": "SpannerInstance",
65 "apiVersion": "spanner.cnrm.cloud.google.com/v1beta1",
66 },
67 }
68 if err := mgr.GetClient().Get(context.TODO(), name, &u); err != nil {
69 t.Fatalf("Error getting spanner instance: %v", err)
70 }
71 s, found, err := unstructured.NestedString(u.Object, "spec", "displayName")
72 if err != nil {
73 t.Errorf("Error getting nested field: %v ", err)
74 }
75 if !found {
76 t.Errorf("Nested field not found")
77 }
78
79
80 if s != spannerInstance.Spec.DisplayName {
81 t.Errorf("Results mismatch: got %v, expected %v", s, spannerInstance.Spec.DisplayName)
82 }
83
84
85 if err = client.SpannerInstances(testId).Delete(context.TODO(), "spannerinstance", v1.DeleteOptions{}); err != nil {
86 t.Errorf("Error deleting Spanner Instance: %v", err)
87 }
88 err = mgr.GetClient().Get(context.TODO(), name, &u)
89 if err == nil || !errors.IsNotFound(err) {
90 t.Errorf("Unexpected error value: '%v'", err)
91 }
92 }
93
94 func TestComputeInstanceGoClient(t *testing.T) {
95 client := computeclient.NewForConfigOrDie(mgr.GetConfig())
96 testId := testvariable.NewUniqueId()
97
98
99
100 computeAddressName := "computeaddress"
101 location := "europe-west1"
102 addressType := "INTERNAL"
103 address := "10.0.42.42"
104 purpose := "GCE_ENDPOINT"
105
106 computeAddress := computev1beta1.ComputeAddress{
107
108 ObjectMeta: v1.ObjectMeta{
109 Name: computeAddressName,
110 Namespace: testId,
111 },
112 Spec: computev1beta1.ComputeAddressSpec{
113 Location: location,
114 Address: &address,
115 AddressType: &addressType,
116 Purpose: &purpose,
117 },
118 }
119
120 computeInstanceName := "computeinstance"
121 autoDelete := true
122 bootDiskSize := 20
123 bootDiskType := "pd-ssd"
124 machineType := "n1-standard-1"
125 zone := "europe-west1-b"
126 computeInstance := computev1beta1.ComputeInstance{
127
128 ObjectMeta: v1.ObjectMeta{
129 Name: computeInstanceName,
130 Namespace: testId,
131 Labels: map[string]string{"key": "value"},
132 },
133 Spec: computev1beta1.ComputeInstanceSpec{
134 BootDisk: &computev1beta1.InstanceBootDisk{
135 AutoDelete: &autoDelete,
136 InitializeParams: &computev1beta1.InstanceInitializeParams{
137 Size: &bootDiskSize,
138 SourceImageRef: &v1alpha1.ResourceRef{
139 External: "debian-cloud/debian-9",
140 },
141 Type: &bootDiskType,
142 },
143 },
144 MachineType: &machineType,
145 Zone: &zone,
146 NetworkInterface: []computev1beta1.InstanceNetworkInterface{
147 {
148 NetworkRef: &v1alpha1.ResourceRef{
149 External: "default",
150 },
151 SubnetworkRef: &v1alpha1.ResourceRef{
152 External: "default",
153 },
154 NetworkIpRef: &v1alpha1.ResourceRef{
155 Kind: "ComputeAddress",
156 Name: computeAddressName,
157 },
158 },
159 },
160 },
161 }
162 testcontroller.SetupNamespaceForDefaultProject(t, mgr.GetClient(), testId)
163
164
165 if _, err := client.ComputeAddresses(testId).Create(context.TODO(), &computeAddress, v1.CreateOptions{}); err != nil {
166 t.Fatalf("Error creating ComputeAddress: %v", err)
167 }
168
169
170
171
172 computeAddressNamespacedName := k8s.GetNamespacedName(&computeAddress)
173 computeAddressUnstructured := unstructured.Unstructured{
174 Object: map[string]interface{}{
175 "kind": "ComputeAddress",
176 "apiVersion": "compute.cnrm.cloud.google.com/v1beta1",
177 },
178 }
179
180 if err := mgr.GetClient().Get(context.TODO(), computeAddressNamespacedName, &computeAddressUnstructured); err != nil {
181 t.Fatalf("Error getting ComputeAddress: %v", err)
182 }
183 ip, found, err := unstructured.NestedString(computeAddressUnstructured.Object, "spec", "address")
184 if err != nil {
185 t.Errorf("Error getting `spec.address` field: %v", err)
186 }
187
188 if !found || ip == "" {
189 t.Errorf("`spec.address` field does not have any value")
190 }
191
192
193 if _, err := client.ComputeInstances(testId).Create(context.TODO(), &computeInstance, v1.CreateOptions{}); err != nil {
194 t.Fatalf("Error creating ComputeInstance: %v", err)
195 }
196
197 computeInstanceNamespacedName := k8s.GetNamespacedName(&computeInstance)
198 computeInstanceUnstructured := unstructured.Unstructured{
199 Object: map[string]interface{}{
200 "kind": "ComputeInstance",
201 "apiVersion": "compute.cnrm.cloud.google.com/v1beta1",
202 },
203 }
204 if err := mgr.GetClient().Get(context.TODO(), computeInstanceNamespacedName, &computeInstanceUnstructured); err != nil {
205 t.Fatalf("Error getting ComputeInstance: %v", err)
206 }
207
208 s, found, err := unstructured.NestedString(computeInstanceUnstructured.Object, "spec", "bootDisk", "initializeParams", "type")
209 if err != nil {
210 t.Errorf("Error getting nested field: %v ", err)
211 }
212 if !found {
213 t.Errorf("Nested field not found")
214 }
215
216
217 if s != bootDiskType {
218 t.Errorf("Results mismatch: got %v, expected %v", s, bootDiskType)
219 }
220
221
222 if err := client.ComputeInstances(testId).Delete(context.TODO(), computeInstanceName, v1.DeleteOptions{}); err != nil {
223 t.Errorf("Error deleting ComputeInstance: %v", err)
224 }
225 err = mgr.GetClient().Get(context.TODO(), computeInstanceNamespacedName, &computeInstanceUnstructured)
226 if err == nil || !errors.IsNotFound(err) {
227 t.Errorf("Expect a NotFound error after deleting ComputeInstance, but got: '%v'", err)
228 }
229 if err := client.ComputeAddresses(testId).Delete(context.TODO(), computeAddressName, v1.DeleteOptions{}); err != nil {
230 t.Errorf("Error deleting ComputeAddress: %v", err)
231 }
232 err = mgr.GetClient().Get(context.TODO(), computeAddressNamespacedName, &computeAddressUnstructured)
233 if err == nil || !errors.IsNotFound(err) {
234 t.Errorf("Expect a NotFound error after deleting ComputeAddress, but got: '%v'", err)
235 }
236 }
237
238 func TestMain(m *testing.M) {
239 testmain.TestMainForIntegrationTests(m, &mgr)
240 }
241
View as plain text