-
Notifications
You must be signed in to change notification settings - Fork 775
/
cli_test.go
375 lines (295 loc) · 13.5 KB
/
cli_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
package cli_test
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/require"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/wait"
v1 "github.com/fission/fission/pkg/apis/core/v1"
"github.com/fission/fission/pkg/utils/manager"
"github.com/fission/fission/test/e2e/framework"
"github.com/fission/fission/test/e2e/framework/cli"
"github.com/fission/fission/test/e2e/framework/services"
)
func TestFissionCLI(t *testing.T) {
mgr := manager.New()
defer mgr.Wait()
f := framework.NewFramework()
defer f.Logger().Sync()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
err := f.Start(ctx)
require.NoError(t, err)
err = services.StartServices(ctx, f, mgr)
require.NoError(t, err)
err = wait.PollUntilContextTimeout(ctx, time.Second*5, time.Second*50, true, func(_ context.Context) (bool, error) {
if err := f.CheckService("webhook"); err != nil {
return false, nil
}
return true, nil
})
require.NoError(t, err)
fissionClient, err := f.ClientGen().GetFissionClient()
require.NoError(t, err)
t.Run("environment", func(t *testing.T) {
t.Run("create", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "env", "create", "--name", "test-env", "--image", "fission/python-env")
require.NoError(t, err)
env, err := fissionClient.CoreV1().Environments(metav1.NamespaceDefault).Get(ctx, "test-env", metav1.GetOptions{})
require.NoError(t, err)
require.NotNil(t, env)
require.Equal(t, "test-env", env.Name)
require.Equal(t, "fission/python-env", env.Spec.Runtime.Image)
})
t.Run("list", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "env", "list")
require.NoError(t, err)
})
t.Run("get", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "env", "get", "--name", "test-env")
require.NoError(t, err)
})
t.Run("pods", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "env", "pods", "--name", "test-env")
require.NoError(t, err)
})
t.Run("update", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "env", "update", "--name", "test-env", "--image", "fission/python-env:v2")
require.NoError(t, err)
env, err := fissionClient.CoreV1().Environments(metav1.NamespaceDefault).Get(ctx, "test-env", metav1.GetOptions{})
require.NoError(t, err)
require.NotNil(t, env)
require.Equal(t, "test-env", env.Name)
require.Equal(t, "fission/python-env:v2", env.Spec.Runtime.Image)
})
t.Run("delete", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "env", "delete", "--name", "test-env")
require.NoError(t, err)
_, err = fissionClient.CoreV1().Environments(metav1.NamespaceDefault).Get(ctx, "test-env", metav1.GetOptions{})
require.Error(t, err)
})
})
t.Run("function", func(t *testing.T) {
envName := "test-func-env"
testFuncName := "hello"
testFuncNd := "hello-nd"
testFuncCn := "hello-cn"
t.Run("create/poolmgr", func(t *testing.T) {
_, err = cli.ExecCommand(f, ctx, "env", "create", "--name", envName, "--image", "fission/python-env")
require.NoError(t, err)
_, err := cli.ExecCommand(f, ctx, "function", "create", "--name", testFuncName, "--code", "./hello.js", "--env", envName)
require.NoError(t, err)
testFunc, err := fissionClient.CoreV1().Functions(metav1.NamespaceDefault).Get(ctx, testFuncName, metav1.GetOptions{})
require.NoError(t, err)
require.NotNil(t, testFunc)
require.Equal(t, testFuncName, testFunc.Name)
require.Equal(t, envName, testFunc.Spec.Environment.Name)
require.Equal(t, v1.ExecutorTypePoolmgr, testFunc.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType)
})
t.Run("create/newdeploy", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "function", "create", "--name", testFuncNd, "--code", "./hello.js", "--env", envName, "--executortype", "newdeploy")
require.NoError(t, err)
testFunc, err := fissionClient.CoreV1().Functions(metav1.NamespaceDefault).Get(ctx, testFuncNd, metav1.GetOptions{})
require.NoError(t, err)
require.NotNil(t, testFunc)
require.Equal(t, testFuncNd, testFunc.Name)
require.Equal(t, envName, testFunc.Spec.Environment.Name)
require.Equal(t, v1.ExecutorTypeNewdeploy, testFunc.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType)
})
t.Run("create/container", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "function", "run-container", "--name", testFuncCn, "--image", "gcr.io/google-samples/node-hello:1.0", "--port", "8080")
require.NoError(t, err)
testFunc, err := fissionClient.CoreV1().Functions(metav1.NamespaceDefault).Get(ctx, testFuncCn, metav1.GetOptions{})
require.NoError(t, err)
require.NotNil(t, testFunc)
require.Equal(t, testFuncCn, testFunc.Name)
require.Equal(t, v1.ExecutorTypeContainer, testFunc.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType)
})
t.Run("update/poolmgr", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "function", "update", "--name", testFuncName, "--labels", "env=test")
require.NoError(t, err)
testFunc, err := fissionClient.CoreV1().Functions(metav1.NamespaceDefault).Get(ctx, testFuncName, metav1.GetOptions{})
require.NoError(t, err)
require.NotNil(t, testFunc)
require.Equal(t, testFuncName, testFunc.Name)
require.NotNil(t, testFunc.Labels)
require.Equal(t, "test", testFunc.Labels["env"])
require.Equal(t, v1.ExecutorTypePoolmgr, testFunc.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType)
})
t.Run("test/poolmgr", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "function", "test", "--name", testFuncName)
require.Error(t, err)
})
t.Run("test/newdeploy", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "function", "test", "--name", testFuncNd)
require.Error(t, err)
})
t.Run("test/container", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "function", "test", "--name", testFuncCn)
require.Error(t, err)
})
t.Run("list", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "function", "list")
require.NoError(t, err)
})
t.Run("get/poolmgr", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "function", "get", "--name", testFuncName)
require.NoError(t, err)
})
t.Run("getmeta/poolmgr", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "function", "getmeta", "--name", testFuncName)
require.NoError(t, err)
})
t.Run("pods/poolmgr", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "function", "pods", "--name", testFuncName)
require.NoError(t, err)
})
t.Run("delete/newdeploy", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "function", "delete", "--name", testFuncNd)
require.NoError(t, err)
_, err = fissionClient.CoreV1().Functions(metav1.NamespaceDefault).Get(ctx, testFuncNd, metav1.GetOptions{})
require.Error(t, err)
})
t.Run("delete/container", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "function", "delete", "--name", testFuncCn)
require.NoError(t, err)
_, err = fissionClient.CoreV1().Functions(metav1.NamespaceDefault).Get(ctx, testFuncCn, metav1.GetOptions{})
require.Error(t, err)
})
t.Run("delete/poolmgr", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "function", "delete", "--name", testFuncName)
require.NoError(t, err)
_, err = fissionClient.CoreV1().Functions(metav1.NamespaceDefault).Get(ctx, testFuncName, metav1.GetOptions{})
require.Error(t, err)
_, err = cli.ExecCommand(f, ctx, "env", "delete", "--name", envName)
require.NoError(t, err)
})
})
t.Run("httptrigger", func(t *testing.T) {
t.Run("create", func(t *testing.T) {
// create env and function first
_, err := cli.ExecCommand(f, ctx, "env", "create", "--name", "test-func-env", "--image", "fission/python-env")
require.NoError(t, err)
_, err = cli.ExecCommand(f, ctx, "function", "create", "--name", "test-func", "--code", "./hello.js", "--env", "test-func-env")
require.NoError(t, err)
_, err = cli.ExecCommand(f, ctx, "httptrigger", "create", "--name", "test-httptrigger", "--function", "test-func", "--url", "/hello")
require.NoError(t, err)
ht, err := fissionClient.CoreV1().HTTPTriggers(metav1.NamespaceDefault).Get(ctx, "test-httptrigger", metav1.GetOptions{})
require.NoError(t, err)
require.NotNil(t, ht)
require.Equal(t, "test-httptrigger", ht.Name)
require.Equal(t, "test-func", ht.Spec.FunctionReference.Name)
require.Equal(t, "/hello", ht.Spec.RelativeURL)
})
t.Run("update", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "httptrigger", "update", "--name", "test-httptrigger", "--url", "/hello2")
require.NoError(t, err)
ht, err := fissionClient.CoreV1().HTTPTriggers(metav1.NamespaceDefault).Get(ctx, "test-httptrigger", metav1.GetOptions{})
require.NoError(t, err)
require.NotNil(t, ht)
require.Equal(t, "test-httptrigger", ht.Name)
require.Equal(t, "test-func", ht.Spec.FunctionReference.Name)
require.Equal(t, "/hello2", ht.Spec.RelativeURL)
})
t.Run("delete", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "httptrigger", "delete", "--name", "test-httptrigger")
require.NoError(t, err)
_, err = fissionClient.CoreV1().HTTPTriggers(metav1.NamespaceDefault).Get(ctx, "test-httptrigger", metav1.GetOptions{})
require.Error(t, err)
_, err = cli.ExecCommand(f, ctx, "function", "delete", "--name", "test-func")
require.NoError(t, err)
_, err = cli.ExecCommand(f, ctx, "env", "delete", "--name", "test-func-env")
require.NoError(t, err)
})
})
t.Run("timetrigger", func(t *testing.T) {
t.Run("create", func(t *testing.T) {
// create env and function first
_, err := cli.ExecCommand(f, ctx, "env", "create", "--name", "test-func-env", "--image", "fission/python-env")
require.NoError(t, err)
_, err = cli.ExecCommand(f, ctx, "function", "create", "--name", "test-func", "--code", "./hello.js", "--env", "test-func-env")
require.NoError(t, err)
_, err = cli.ExecCommand(f, ctx, "timetrigger", "create", "--name", "test-tt", "--function", "test-func", "--cron", "@every 1m")
require.NoError(t, err)
tt, err := fissionClient.CoreV1().TimeTriggers(metav1.NamespaceDefault).Get(ctx, "test-tt", metav1.GetOptions{})
require.NoError(t, err)
require.NotNil(t, tt)
require.Equal(t, "test-tt", tt.Name)
require.Equal(t, "test-func", tt.Spec.FunctionReference.Name)
require.Equal(t, "@every 1m", tt.Spec.Cron)
})
t.Run("list", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "timetrigger", "list")
require.NoError(t, err)
})
t.Run("showschedule", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "timetrigger", "showschedule", "--cron", "@every 1m")
require.NoError(t, err)
})
t.Run("update", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "timetrigger", "update", "--name", "test-tt", "--cron", "@every 2m")
require.NoError(t, err)
tt, err := fissionClient.CoreV1().TimeTriggers(metav1.NamespaceDefault).Get(ctx, "test-tt", metav1.GetOptions{})
require.NoError(t, err)
require.NotNil(t, tt)
require.Equal(t, "test-tt", tt.Name)
require.Equal(t, "test-func", tt.Spec.FunctionReference.Name)
require.Equal(t, "@every 2m", tt.Spec.Cron)
})
t.Run("delete", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "timetrigger", "delete", "--name", "test-tt")
require.NoError(t, err)
_, err = fissionClient.CoreV1().TimeTriggers(metav1.NamespaceDefault).Get(ctx, "test-tt", metav1.GetOptions{})
require.Error(t, err)
_, err = cli.ExecCommand(f, ctx, "function", "delete", "--name", "test-func")
require.NoError(t, err)
_, err = cli.ExecCommand(f, ctx, "env", "delete", "--name", "test-func-env")
require.NoError(t, err)
})
})
t.Run("mqtrigger", func(t *testing.T) {
t.Run("create", func(t *testing.T) {
// create env and function first
_, err := cli.ExecCommand(f, ctx, "env", "create", "--name", "test-func-env", "--image", "fission/python-env")
require.NoError(t, err)
_, err = cli.ExecCommand(f, ctx, "function", "create", "--name", "test-func", "--code", "./hello.js", "--env", "test-func-env")
require.NoError(t, err)
_, err = cli.ExecCommand(f, ctx, "mqtrigger", "create", "--name", "test-mqtrigger", "--function", "test-func", "--mqtype", "kafka", "--topic", "test-topic", "--resptopic", "test-resp-topic")
require.NoError(t, err)
mqt, err := fissionClient.CoreV1().MessageQueueTriggers(metav1.NamespaceDefault).Get(ctx, "test-mqtrigger", metav1.GetOptions{})
require.NoError(t, err)
require.NotNil(t, mqt)
require.Equal(t, "test-mqtrigger", mqt.Name)
require.Equal(t, "test-func", mqt.Spec.FunctionReference.Name)
require.Equal(t, "test-topic", mqt.Spec.Topic)
require.Equal(t, "test-resp-topic", mqt.Spec.ResponseTopic)
})
t.Run("list", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "mqtrigger", "list")
require.NoError(t, err)
})
t.Run("delete", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "mqtrigger", "delete", "--name", "test-mqtrigger")
require.NoError(t, err)
_, err = fissionClient.CoreV1().MessageQueueTriggers(metav1.NamespaceDefault).Get(ctx, "test-mqtrigger", metav1.GetOptions{})
require.Error(t, err)
_, err = cli.ExecCommand(f, ctx, "function", "delete", "--name", "test-func")
require.NoError(t, err)
_, err = cli.ExecCommand(f, ctx, "env", "delete", "--name", "test-func-env")
require.NoError(t, err)
})
})
t.Run("check", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "check")
require.NoError(t, err)
})
t.Run("version", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "version")
require.NoError(t, err)
})
t.Run("support-dump", func(t *testing.T) {
_, err := cli.ExecCommand(f, ctx, "support", "dump")
require.NoError(t, err)
})
}