2 Copyright 2018 Intel Corporation.
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 http://www.apache.org/licenses/LICENSE-2.0
7 Unless required by applicable law or agreed to in writing, software
8 distributed under the License is distributed on an "AS IS" BASIS,
9 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 See the License for the specific language governing permissions and
11 limitations under the License.
24 utils "github.com/onap/multicloud-k8s/src/k8splugin/internal"
25 "github.com/onap/multicloud-k8s/src/k8splugin/internal/connection"
26 "github.com/onap/multicloud-k8s/src/k8splugin/internal/db"
27 "github.com/onap/multicloud-k8s/src/k8splugin/internal/helm"
28 "github.com/onap/multicloud-k8s/src/k8splugin/internal/rb"
30 "k8s.io/apimachinery/pkg/runtime/schema"
33 func TestInstanceCreate(t *testing.T) {
34 oldkrdPluginData := utils.LoadedPlugins
36 utils.LoadedPlugins = oldkrdPluginData
38 err := LoadMockPlugins(utils.LoadedPlugins)
40 t.Fatalf("LoadMockPlugins returned an error (%s)", err)
43 // Load the mock kube config file into memory
44 fd, err := ioutil.ReadFile("../../mock_files/mock_configs/mock_kube_config")
46 t.Fatal("Unable to read mock_kube_config")
49 t.Run("Successfully create Instance", func(t *testing.T) {
50 db.DBconn = &db.MockDB{
51 Items: map[string]map[string][]byte{
52 rb.ProfileKey{RBName: "test-rbdef", RBVersion: "v1",
53 ProfileName: "profile1"}.String(): {
54 "profilemetadata": []byte(
55 "{\"profile-name\":\"profile1\"," +
56 "\"release-name\":\"testprofilereleasename\"," +
57 "\"namespace\":\"testnamespace\"," +
58 "\"rb-name\":\"test-rbdef\"," +
59 "\"rb-version\":\"v1\"," +
60 "\"kubernetesversion\":\"1.12.3\"}"),
61 // base64 encoding of vagrant/tests/vnfs/testrb/helm/profile
62 "profilecontent": []byte("H4sICLmjT1wAA3Byb2ZpbGUudGFyAO1Y32/bNhD2s/6Kg/KyYZZsy" +
63 "78K78lLMsxY5gRxmqIYhoKWaJsYJWokZdfo+r/vSFmunCZNBtQJ1vF7sXX36e54vDN5T" +
64 "knGFlTpcEtS3jgO2ohBr2c/EXc/29Gg1+h0e1F32Ol1B1Gj3Ymifr8B7SPFc4BCaSIBG" +
65 "lII/SXeY/r/KIIg8NZUKiayEaw7nt7mdOQBrAkvqBqBL1ArWULflRJbJz4SYpEt2FJSJ" +
66 "QoZ21cAAlgwTnOiVyPQWFQLwVuqmCdMthKac7FNaVZWmqWjkRWRuuSvScF1gFZVwYOEr" +
67 "luapjknaOazd186Z98S7tver+3j0f5v1/q/18f+7w56bdf/zwFF5ZqV/WtbH6YioVdCa" +
68 "hRkJEVBVSFBvUNRmyNpesgwors0lmkqM8KNzRG8iqLIWN45GUGv57l+fkFUP9PH9GF6f" +
69 "IgH+kP9b76b/o+GUb9r5J1O1I0a0D9mUBX+5/1/55g+io9/sf+DnuF1sA4Gbv+fA1++p" +
70 "n0dH4+c/92oPaztv+n/fn84dOf/c+AETkW+lWy50hC1O69gguc1R6HEw5xoHAuaKIq9E" +
71 "+8ELvCikCmaQJElVIJeURjnJMaPnaYJt+UoAVHYhu8Mwd+p/O9/RAtbUUBKtnj+aygUR" +
72 "RNM2ZkB6PuY5hpvCzhY4L2fkSymsGF6Zd3sjIRo4u3OhJhrgmyC/ByfFnUeEG0DLrHSO" +
73 "h+1WpvNJiQ23FDIZYuXVNW6mJyeT2fnAYZsX3qdcaoUSPpXwSQudr4FkmNEMZljnJxsQ" +
74 "EggOPmgTgsT8UYyzbJlE5RY6A2RFK0kTGnJ5oU+SFcVH666TsCEkQz88QwmMx9+Gs8ms" +
75 "ybaeDO5+eXy9Q28GV9fj6c3k/MZXF7D6eX0bHIzuZzi088wnr6FXyfTsyZQTBa6oe9za" +
76 "eLHIJlJJE1M1maUHgSwEGVAKqcxW7AY15UtC7KksDS3uQyXAzmVKVNmOxWGl6AVzlKmb" +
77 "VGozxcVeh7J2W01S2LOVAsHyj9ZlozgbP+74qVUk4RoMtrfMD98wCzGvEiwXHD3U5GFi" +
78 "4Jzo/QhhI8fd0yFu3c/fa/d8zmZU67KsRRDefCt/Qu7YdQSw1PzNTS3W1QGnyRVef+N5" +
79 "YHDKZao/4MP/ju/siEpp0SVQYbX5UNlxxJwizCFyzuMWXkLNySzIyZs4wBrTpXE23I62" +
80 "wlPRZHp0qJCC7EWslxpSnS8uqgt/YmLr2btnZXaDhnwA4NPzueT8lEt126AyExPY44rS" +
81 "YA1bJPl15JgRaEdM9CKv/f1YDHdE5e1cYVFdiUwoduDJC+5mBMe5nstbndCF9Zfxakpa" +
82 "1aNP2LK/Xffhuc3fTNfUYlfzH8a/h97qhmVaikNPi2+nItq8exGtLA+SdW9rgUvUvqbq" +
83 "YkDi6mRXNk/V1pUxy0uYsI1S+meU+XsPo2kJLnMOKZGy4J6Xt3XgZuHTayEKv3XZLjy+" +
84 "yJ66WPQwcHBwcHBwcHBwcHBwcHBwcHhm8Q/mTHqWgAoAAA="),
86 rb.DefinitionKey{RBName: "test-rbdef", RBVersion: "v1"}.String(): {
87 "defmetadata": []byte(
88 "{\"rb-name\":\"test-rbdef\"," +
89 "\"rb-version\":\"v1\"," +
90 "\"chart-name\":\"vault-consul-dev\"," +
91 "\"description\":\"testresourcebundle\"}"),
92 // base64 encoding of vagrant/tests/vnfs/testrb/helm/vault-consul-dev
93 "defcontent": []byte("H4sICEetS1wAA3ZhdWx0LWNvbnN1bC1kZXYudGFyAO0c7XLbNjK/+R" +
94 "QYujdJehatb+V4czPnOmnPk9bO2Gk7nbaTgUhIxpgiGAK0o3P9QPca92S3C5AU9GXZiax" +
95 "c7rA/LJEAFovdxX4AK1/RIlGNSKSySBoxuzp4sn1oAgx6Pf0JsPipv7c63XZ70O61W4Mn" +
96 "zVZ7MGg9Ib1HoGUJCqloTsiTXAh1V79N7V8oXC3K/+iC5iqY0kmytTlQwP1ud538W51Wf" +
97 "0H+3QF8kObWKLgD/s/lv0eORDbN+fhCkXaz9YIcp4ol8DLPRE4VF+k+vIq8PW+PfM8jlk" +
98 "oWkyKNWU7UBSOHGY3go2zZJz+xXMIY0g6a5Bl28Msm//lfAcNUFGRCpyQVihSSAQouyYg" +
99 "njLAPEcsU4SmJxCRLOE0jRq65utDTlEgCQPFLiUIMFYXeFPpn8DSy+xGqNMEGLpTKwoOD" +
100 "6+vrgGpyA5GPDxLTVR58f3z06uT8VQNI1oN+TBMmJcnZ+4LnsNjhlNAMKIroEOhM6DURO" +
101 "aHjnEGbEkjxdc4VT8f7RIqRuqY5Aywxlyrnw0LNsauiD1ZtdwCG0ZT4h+fk+Nwn3xyeH5" +
102 "/vA46fj9/+4/THt+Tnw7Ozw5O3x6/OyekZOTo9eXn89vj0BJ6+JYcnv5DXxycv9wkDZsE" +
103 "07EOWI/1AJEdGshi5ds7YHAEjYQiSGYv4iEewrnRc0DEjY3HF8hSWQzKWT7hEcUogLwYs" +
104 "CZ9wpZVCLi8q8Dya8VIBQnLV8mImo5xnSj9ru4IMS2iRRhfkJzQ8iJcY44OMBPtDJiJmX" +
105 "konDFAs2CbAn9X4m8Ffgp53VT2C9EB+n3s3fXmwZP+vaFIwuVUHsMH+d1vd3oL977X6TW" +
106 "f/dwHO/jv7vzX7v/epAHN8l4ghTdApjPi4MCoIjmGEdkoGW5hirCcIPQJaGLM3Ildvcjb" +
107 "iH0LSabbhbYYqLBUDBQzJzS2sqpK/JoVPgEue/os4jOUMq88WuKE+vNZmtfRgYTNooXPK" +
108 "iiR5IwDRNCSHyTWdSsQ9SugY9YilWr9iNizGY2R/Y25aWWSwIVWtlp7u+EoPikMyoolk2" +
109 "xHAoTXr40nBYLY46OFWlSwH7QuJygumXyRi/C5hVww4fHzy7enqTjFV9F3M4dXTA4PtAF" +
110 "891Y3INWmwl6aAvOg1m9YLGZJGy6uFZuZQYP2MhBFsGhFoHOMmC4G+iCYXQqrQQgqTUnV" +
111 "RSt8sQysUEF32UFG2AtnTX8Pw9/BFu9l8WjeqRMLSJIrZXrF5824C81+W79HoGAGRtJgM" +
112 "YXOCUeQpuDfQZOnlTIv1SBQpKCasF7X/nCUsgqUaRaejEU+5mlZqn+ViyBZ0IKM5xGYK9" +
113 "oiX8CtYk9TMxXGcJi9ZQqfnDIbEsJ5W02wnLuL5d3skZUCTpPkUVb9cDakQlhNfXzDQe6" +
114 "bQtpJhzuhlJniqpEago0XcKrBOKcjrF2BRBZPpU9wi6NLBwaTwLQPJAVpcBfoLlsNoVu0" +
115 "awzfAHPOPWYhnm4olvKBPIikm7IxFCeWTauefMaQDWmmELPgBpIAvafwzeBF2CqigTfJ/" +
116 "wtv2dxy+T1Bib7RCHcQgbpajcjfSkawaz4uhaZcTaW8Az8Otwg1xapoBypPS5KH1W4qxP" +
117 "bNbTlY1AOPBLdAEB8MOamtlrwxoSLpdzwMx5SUX2bxd+txBjoO1sBT/KwZRA1UQGG1tjo" +
118 "ef/3UH/YE7/9sF3CH/GDyGmE5Y+qnHgZvyv2Z7MC9/sC6dvsv/dgF7Lv9z+d9jnP8Bz+T" +
119 "BVcu75CnEAS9rW+JB9EgxOgnrGOTmBrgYJUUM6gLSn4g0GEGuhI0+CcjtbdlTgvRWd69b" +
120 "6/4JHbKkjPuBlLWj6gEQ5OMJpe4YmEsQDISgsTF7U6n3HwTDaZiP+H/2if/Or3DkEFBTa" +
121 "YgMzsxDhUd3ABEBC8cLPc5NnIadUCJIdhmvS9PxJ3MqZwfxBqOsIniNfUJVdPG9tfR7Lr" +
122 "4y+iUWS0I6e5lDeG9+3osf1XLLLMvE6PVcDZNuh8S3mKBfBdpxARa/nmutMq2gS+N4YyX" +
123 "kFn5zQBDM0nUQd5VZVX2sRgsrzkdR3X/1NXn+vm+SVfiCztX/fZYh2mkpLrRevAmoLXrK" +
124 "ID6wQ3B7VpNm/IA6MYfRThyYig50rqr4hNV9Kp6tasGs6DRNplWWtFEg5TH+AyXSGFJIa" +
125 "cC67Ewyhk6QCMyTqntIxqwCvYjFngVxzWX/OxGIPdUKcldhwHMKPb31rjqrWCDoc4clDn" +
126 "YEd8T/ld355KugDfF/u99avP8ZdNz9/27Axf8u/n+s+38T+pex7f3i/tLmPHrov5Rf/Le" +
127 "F/+a4dkUUiA0GWx2oNGb8XOxdnedW89/c8BFh71dj9avTYZ80yv7ZQ4LR2XHwcsw2f9dm" +
128 "xW1+p9lG/q2YoxozI75BQLJsM3XswzJ1YObHTD0outYTpnE1Wy6UiEQSkrdHb5ZSr3smR" +
129 "XdqyGew/0v+X2+DLR7+Pvmo8982dHfnvzuAdfI32rsdNXi4/Hu9rpP/TmCD/LdSDbwh/m" +
130 "+1+93F+L876Ln4fxdgx////hemAANyOIlFJPfJNyyBTICmELa5+N/F/59Y/6sNSn3SLDU" +
131 "JOljSCgNsFJp+Y3/KCmBjhVyV7+PBBvu/lWrgjec/gyX7P+i2nP3fBTj77+z/F1P/S4w5" +
132 "glmpIhGwbAisTPWZihYUluqCyspiaKzYdsuF9/A3LCmwCKQOcxdpgXtBV+Vm5lQjr5rh+" +
133 "YqlyjTiUkB9ysJFrdPG1dXFmSQvUs1ybASF0pLBM4HLF5Kgh1S6bnFVvbIphsQ7MzyTEp" +
134 "IrkXMmzQWyeZyGJGUfCtkJREozVP6whWG3GVtXP4LnZdGlR2ZvziwMQkyAGLv12FwE1s8" +
135 "NPT40LlqjToSpZNYXbR6pnm20pqAxYAmVikdBJGbdSvxDRsEdoY3Ab2Ev6FXozarxvg/4" +
136 "jBd+eCa2osYa+1YKpK/g9JUXQYMOuzDXZzhTWMeI5VjJGesBsOvr6k5VXbPpnysBedpky" +
137 "YVacXN1vr5YU6P92GpvQubrvfUV4Dbs/wb/v5VqwIfn/4Net+Py/13AveX/rj5oD1T2sG" +
138 "BwU/7f73cW6v/anb7L/3cCNzcHX3suCHRB4LaCwK8Pbm89T6sVIWdMiuTKzFrbDx0/ATP" +
139 "1bz+oSfgD8vaCzX6/UneVxQhCHfz9gayRVHKuB0JbGQwi2TmPY5YSPrJ+ZPKMjQO93Do0" +
140 "fA44C4krRFQjkSTiGp90hBl6+latuiJKZXlrRcJqBns5JvgzC8cbI1gFBESrLijNvVXZx" +
141 "1Qt2VdABt3SrI0SL4Pgo7HtW6L72/9ZPPlQB7DB/nc6ve6i/e93Xf3HTsDZf2f/d2f/a9" +
142 "NtDoMX8tZpAEPQD2gjrMmzCp/LPsg2nXiDSEoruo+23AisXH9tpScM7FnK5aQaFsyb9rI" +
143 "6wUJv2/jKSi/SqUnDkwbdIOcwznqdVmgsjGY+nUeuRY6KgHwvW4YUUsy13mU2buZewPXd" +
144 "QY1V25DlPFUj4v9J+neNqPBi7YU1erHy1lrCevbWuHRZhe3WVirNEnMki3KG/0fkkqXr1" +
145 "WVp3iPcxKUKhHOHI9hicndoy0P915R7UCmvRQ7JdvWtLLHnSUgYfpBnQl9u0OT5PeQTGN" +
146 "LtKOArbCXh35aKRmyplqUjun+Ey4D+d69z1l9TCf3rYpu/+wZJoFtmHWkBRhY6zjQiRKU" +
147 "wfZEl5deKFeQPMux3WRrNcFRDb36D0b/5IXziQNz28GRe7v/mVxjsd5qb9gskp36+vfVL" +
148 "Tq0nx6zULKMm7VEDp/8RuH/8V5eKPTD733z/01zO/6G/i/92AS7+c/HfbuO/MuN/KkllU" +
149 "bzSj1de6pqDyg3ZLMk3Y59ZDh5f1PEJxDuSqecYDhyCqcdhqFditFxRqmkox0kM4Rbiwb" +
150 "mOq0LBsgN5xllgiHuuqasCAL3sVx8yWhJS9dcIddhYnlusjRjmSqCtWEFjsHy5XaW8ki3" +
151 "Lpw0Gx8q1/oFXCuAz+x39lU/O9ckL8Rv+oh/93CbLwRbhYef/H+H8n2z2/612e8H/w5P7" +
152 "/287Aef/nf9/PP9vOcIF97/e/y06vnv7uwe4sJpAyJfBugFR1Sz4w6ApeV/QBDgCUrFv5" +
153 "bUFxFgFp6EoM6pwNlyQhIAloqjOUgCBr4shMJBhnaPx/JwlMXAwZ4Z/Rm205j8D3UIGvQ" +
154 "RZQl9kOgrk+XoOzX68tJ3wYJb0N/RJ0NzPUr5y4YEDBw4cOHDgwIEDBw4cOHDgwIEDBw4" +
155 "cOHDgwIEDB18K/AcxEDJDAHgAAA=="),
157 connection.ConnectionKey{CloudRegion: "mock_connection"}.String(): {
159 "{\"cloud-region\":\"mock_connection\"," +
160 "\"cloud-owner\":\"mock_owner\"," +
161 "\"kubeconfig\": \"" + base64.StdEncoding.EncodeToString(fd) + "\"}"),
166 ic := NewInstanceClient()
167 input := InstanceRequest{
168 RBName: "test-rbdef",
170 ProfileName: "profile1",
171 CloudRegion: "mock_connection",
174 ir, err := ic.Create(input)
176 t.Fatalf("TestInstanceCreate returned an error (%s)", err)
181 if len(ir.Resources) == 0 {
182 t.Fatalf("TestInstanceCreate returned empty data (%s)", ir)
188 func TestInstanceGet(t *testing.T) {
189 oldkrdPluginData := utils.LoadedPlugins
192 utils.LoadedPlugins = oldkrdPluginData
195 err := LoadMockPlugins(utils.LoadedPlugins)
197 t.Fatalf("LoadMockPlugins returned an error (%s)", err)
200 t.Run("Successfully Get Instance", func(t *testing.T) {
201 db.DBconn = &db.MockDB{
202 Items: map[string]map[string][]byte{
203 InstanceKey{ID: "HaKpys8e"}.String(): {
208 "profile-name":"profile1",
209 "rb-name":"test-rbdef",
211 "cloud-region":"region1"
213 "namespace":"testnamespace",
221 "Name": "deployment-1"
237 expected := InstanceResponse{
239 Request: InstanceRequest{
240 RBName: "test-rbdef",
242 ProfileName: "profile1",
243 CloudRegion: "region1",
245 Namespace: "testnamespace",
246 Resources: []helm.KubernetesResource{
248 GVK: schema.GroupVersionKind{
252 Name: "deployment-1",
255 GVK: schema.GroupVersionKind{
263 ic := NewInstanceClient()
265 data, err := ic.Get(id)
267 t.Fatalf("TestInstanceGet returned an error (%s)", err)
269 if !reflect.DeepEqual(expected, data) {
270 t.Fatalf("TestInstanceGet returned:\n result=%v\n expected=%v",
275 t.Run("Get non-existing Instance", func(t *testing.T) {
276 db.DBconn = &db.MockDB{
277 Items: map[string]map[string][]byte{
278 InstanceKey{ID: "HaKpys8e"}.String(): {
283 "profile-name":"profile1",
284 "rb-name":"test-rbdef",
286 "cloud-region":"region1"
288 "namespace":"testnamespace",
296 "Name": "deployment-1"
312 ic := NewInstanceClient()
316 t.Fatal("Expected error, got pass", err)
321 func TestInstanceFind(t *testing.T) {
322 oldkrdPluginData := utils.LoadedPlugins
325 utils.LoadedPlugins = oldkrdPluginData
328 err := LoadMockPlugins(utils.LoadedPlugins)
330 t.Fatalf("LoadMockPlugins returned an error (%s)", err)
333 items := map[string]map[string][]byte{
334 InstanceKey{ID: "HaKpys8e"}.String(): {
339 "profile-name":"profile1",
340 "rb-name":"test-rbdef",
342 "cloud-region":"region1",
344 "vf_module_id": "test-vf-module-id"
347 "namespace":"testnamespace",
355 "Name": "deployment-1"
368 InstanceKey{ID: "HaKpys8f"}.String(): {
373 "profile-name":"profile2",
374 "rb-name":"test-rbdef",
376 "cloud-region":"region1"
378 "namespace":"testnamespace",
386 "Name": "deployment-1"
399 InstanceKey{ID: "HaKpys8g"}.String(): {
404 "profile-name":"profile1",
405 "rb-name":"test-rbdef",
407 "cloud-region":"region1"
409 "namespace":"testnamespace",
417 "Name": "deployment-1"
432 t.Run("Successfully Find Instance By Name", func(t *testing.T) {
433 db.DBconn = &db.MockDB{
437 expected := []InstanceMiniResponse{
440 Request: InstanceRequest{
441 RBName: "test-rbdef",
443 ProfileName: "profile1",
444 CloudRegion: "region1",
445 Labels: map[string]string{
446 "vf_module_id": "test-vf-module-id",
449 Namespace: "testnamespace",
453 Request: InstanceRequest{
454 RBName: "test-rbdef",
456 ProfileName: "profile2",
457 CloudRegion: "region1",
459 Namespace: "testnamespace",
463 Request: InstanceRequest{
464 RBName: "test-rbdef",
466 ProfileName: "profile1",
467 CloudRegion: "region1",
469 Namespace: "testnamespace",
472 ic := NewInstanceClient()
474 data, err := ic.Find(name, "", "", nil)
476 t.Fatalf("TestInstanceFind returned an error (%s)", err)
479 // Since the order of returned slice is not guaranteed
480 // Check both and return error if both don't match
481 sort.Slice(data, func(i, j int) bool {
482 return data[i].ID < data[j].ID
484 // Sort both as it is not expected that testCase.expected
486 sort.Slice(expected, func(i, j int) bool {
487 return expected[i].ID < expected[j].ID
490 if !reflect.DeepEqual(expected, data) {
491 t.Fatalf("TestInstanceFind returned:\n result=%v\n expected=%v",
496 t.Run("Successfully Find Instance By Name and Label", func(t *testing.T) {
497 db.DBconn = &db.MockDB{
501 expected := []InstanceMiniResponse{
504 Request: InstanceRequest{
505 RBName: "test-rbdef",
507 ProfileName: "profile1",
508 CloudRegion: "region1",
509 Labels: map[string]string{
510 "vf_module_id": "test-vf-module-id",
513 Namespace: "testnamespace",
516 ic := NewInstanceClient()
518 labels := map[string]string{
519 "vf_module_id": "test-vf-module-id",
521 data, err := ic.Find(name, "", "", labels)
523 t.Fatalf("TestInstanceFind returned an error (%s)", err)
526 // Since the order of returned slice is not guaranteed
527 // Check both and return error if both don't match
528 sort.Slice(data, func(i, j int) bool {
529 return data[i].ID < data[j].ID
531 // Sort both as it is not expected that testCase.expected
533 sort.Slice(expected, func(i, j int) bool {
534 return expected[i].ID < expected[j].ID
537 if !reflect.DeepEqual(expected, data) {
538 t.Fatalf("TestInstanceFind returned:\n result=%v\n expected=%v",
543 t.Run("Successfully Find Instance By Name Version", func(t *testing.T) {
544 db.DBconn = &db.MockDB{
548 expected := []InstanceMiniResponse{
551 Request: InstanceRequest{
552 RBName: "test-rbdef",
554 ProfileName: "profile1",
555 CloudRegion: "region1",
556 Labels: map[string]string{
557 "vf_module_id": "test-vf-module-id",
560 Namespace: "testnamespace",
564 Request: InstanceRequest{
565 RBName: "test-rbdef",
567 ProfileName: "profile2",
568 CloudRegion: "region1",
570 Namespace: "testnamespace",
573 ic := NewInstanceClient()
575 data, err := ic.Find(name, "v1", "", nil)
577 t.Fatalf("TestInstanceFind returned an error (%s)", err)
580 // Since the order of returned slice is not guaranteed
581 // Check both and return error if both don't match
582 sort.Slice(data, func(i, j int) bool {
583 return data[i].ID < data[j].ID
585 // Sort both as it is not expected that testCase.expected
587 sort.Slice(expected, func(i, j int) bool {
588 return expected[i].ID < expected[j].ID
591 if !reflect.DeepEqual(expected, data) {
592 t.Fatalf("TestInstanceFind returned:\n result=%v\n expected=%v",
597 t.Run("Successfully Find Instance By Name Version Profile", func(t *testing.T) {
598 db.DBconn = &db.MockDB{
602 expected := []InstanceMiniResponse{
605 Request: InstanceRequest{
606 RBName: "test-rbdef",
608 ProfileName: "profile1",
609 CloudRegion: "region1",
610 Labels: map[string]string{
611 "vf_module_id": "test-vf-module-id",
614 Namespace: "testnamespace",
617 ic := NewInstanceClient()
619 data, err := ic.Find(name, "v1", "profile1", nil)
621 t.Fatalf("TestInstanceFind returned an error (%s)", err)
624 // Since the order of returned slice is not guaranteed
625 // Check both and return error if both don't match
626 sort.Slice(data, func(i, j int) bool {
627 return data[i].ID < data[j].ID
629 // Sort both as it is not expected that testCase.expected
631 sort.Slice(expected, func(i, j int) bool {
632 return expected[i].ID < expected[j].ID
635 if !reflect.DeepEqual(expected, data) {
636 t.Fatalf("TestInstanceFind returned:\n result=%v\n expected=%v",
641 t.Run("Find non-existing Instance", func(t *testing.T) {
642 db.DBconn = &db.MockDB{
643 Items: map[string]map[string][]byte{
644 InstanceKey{ID: "HaKpys8e"}.String(): {
647 "profile-name":"profile1",
649 "namespace":"testnamespace",
650 "rb-name":"test-rbdef",
652 "cloud-region":"region1",
660 "Name": "deployment-1"
676 ic := NewInstanceClient()
677 name := "non-existing"
678 resp, _ := ic.Find(name, "", "", nil)
680 t.Fatalf("Expected 0 responses, but got %d", len(resp))
685 func TestInstanceDelete(t *testing.T) {
686 oldkrdPluginData := utils.LoadedPlugins
689 utils.LoadedPlugins = oldkrdPluginData
692 err := LoadMockPlugins(utils.LoadedPlugins)
694 t.Fatalf("TestInstanceDelete returned an error (%s)", err)
697 // Load the mock kube config file into memory
698 fd, err := ioutil.ReadFile("../../mock_files/mock_configs/mock_kube_config")
700 t.Fatal("Unable to read mock_kube_config")
703 t.Run("Successfully delete Instance", func(t *testing.T) {
704 db.DBconn = &db.MockDB{
705 Items: map[string]map[string][]byte{
706 InstanceKey{ID: "HaKpys8e"}.String(): {
711 "profile-name":"profile1",
712 "rb-name":"test-rbdef",
714 "cloud-region":"mock_connection"
716 "namespace":"testnamespace",
724 "Name": "deployment-1"
737 connection.ConnectionKey{CloudRegion: "mock_connection"}.String(): {
739 "{\"cloud-region\":\"mock_connection\"," +
740 "\"cloud-owner\":\"mock_owner\"," +
741 "\"kubeconfig\": \"" + base64.StdEncoding.EncodeToString(fd) + "\"}"),
746 ic := NewInstanceClient()
750 t.Fatalf("TestInstanceDelete returned an error (%s)", err)
754 t.Run("Delete non-existing Instance", func(t *testing.T) {
755 db.DBconn = &db.MockDB{
756 Items: map[string]map[string][]byte{
757 InstanceKey{ID: "HaKpys8e"}.String(): {
760 "profile-name":"profile1",
762 "namespace":"testnamespace",
763 "rb-name":"test-rbdef",
765 "cloud-region":"mock_kube_config",
773 "Name": "deployment-1"
789 ic := NewInstanceClient()
793 t.Fatal("Expected error, got pass", err)