forked from kedacore/keda
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rabbitmq-queue-trigger-auth.test.ts
136 lines (122 loc) · 3.72 KB
/
rabbitmq-queue-trigger-auth.test.ts
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
import * as sh from 'shelljs'
import test from 'ava'
import { RabbitMQHelper } from './rabbitmq-helpers'
const testNamespace = 'rabbitmq-queue-trig-auth-test'
const rabbitmqNamespace = 'rabbitmq-trig-auth-test'
const queueName = 'hello'
const username = "test-user"
const password = "test-password"
const vhost = "test-vh"
const connectionString = `amqp://${username}:${password}@rabbitmq.${rabbitmqNamespace}.svc.cluster.local/${vhost}`
const messageCount = 500
test.before(t => {
// install rabbitmq
RabbitMQHelper.installRabbit(t, username, password, vhost, rabbitmqNamespace)
sh.config.silent = true
RabbitMQHelper.createDeployment(t, testNamespace, deployYaml, connectionString, connectionString, queueName)
})
test.serial('Deployment should have 0 replicas on start', t => {
const replicaCount = sh.exec(
`kubectl get deployment.apps/test-deployment --namespace ${testNamespace} -o jsonpath="{.spec.replicas}"`
).stdout
t.is(replicaCount, '0', 'replica count should start out as 0')
})
test.serial(`Deployment should scale to 4 with ${messageCount} messages on the queue then back to 0`, t => {
RabbitMQHelper.publishMessages(t, testNamespace, connectionString, messageCount, queueName)
// with messages published, the consumer deployment should start receiving the messages
let replicaCount = '0'
for (let i = 0; i < 10 && replicaCount !== '4'; i++) {
replicaCount = sh.exec(
`kubectl get deployment.apps/test-deployment --namespace ${testNamespace} -o jsonpath="{.spec.replicas}"`
).stdout
t.log('replica count is:' + replicaCount)
if (replicaCount !== '4') {
sh.exec('sleep 5s')
}
}
t.is('4', replicaCount, 'Replica count should be 4 after 10 seconds')
for (let i = 0; i < 50 && replicaCount !== '0'; i++) {
replicaCount = sh.exec(
`kubectl get deployment.apps/test-deployment --namespace ${testNamespace} -o jsonpath="{.spec.replicas}"`
).stdout
if (replicaCount !== '0') {
sh.exec('sleep 5s')
}
}
t.is('0', replicaCount, 'Replica count should be 0 after 3 minutes')
})
test.after.always.cb('clean up rabbitmq-queue deployment', t => {
const resources = [
'scaledobject.keda.sh/test-scaledobject',
'triggerauthentications.keda.sh/rabbitmq-trigger-auth',
'secret/test-secrets',
'deployment.apps/test-deployment',
]
for (const resource of resources) {
sh.exec(`kubectl delete ${resource} --namespace ${testNamespace}`)
}
sh.exec(`kubectl delete namespace ${testNamespace}`)
// remove rabbitmq
RabbitMQHelper.uninstallRabbit(rabbitmqNamespace)
t.end()
})
const deployYaml = `apiVersion: v1
kind: Secret
metadata:
name: rabbitmq-test-secret
data:
RabbitMqHost: {{CONNECTION_STRING_BASE64}}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deployment
labels:
app: test-deployment
spec:
replicas: 0
selector:
matchLabels:
app: test-deployment
template:
metadata:
labels:
app: test-deployment
spec:
containers:
- name: rabbitmq-consumer
image: ghcr.io/kedacore/tests-rabbitmq
imagePullPolicy: Always
command:
- receive
args:
- '{{CONNECTION_STRING}}'
---
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: rabbitmq-trigger-auth
spec:
secretTargetRef:
- parameter: host
name: rabbitmq-test-secret
key: RabbitMqHost
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: test-scaledobject
spec:
scaleTargetRef:
name: test-deployment
pollingInterval: 5
cooldownPeriod: 10
minReplicaCount: 0
maxReplicaCount: 4
triggers:
- type: rabbitmq
metadata:
queueName: {{QUEUE_NAME}}
queueLength: '50'
authenticationRef:
name: rabbitmq-trigger-auth`