Skip to content

Commit 453baf9

Browse files
authored
Merge pull request #354 from sapcc/refactorSlackTest
Renovate of dependencies and refactor of the slack test
2 parents cf09e1f + 6d36c5f commit 453baf9

File tree

3 files changed

+60
-52
lines changed

3 files changed

+60
-52
lines changed

controllers/node_controller_test.go

Lines changed: 43 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -425,35 +425,33 @@ var _ = Describe("The slack thread plugin", func() {
425425
var server *slacktest.Server
426426
var url string
427427
var leaseName types.NamespacedName
428+
var rtm *slack.RTM
428429

429430
BeforeEach(func() {
430431
leaseName = types.NamespacedName{
431432
Name: "slack-lease",
432433
Namespace: metav1.NamespaceDefault,
433434
}
435+
434436
server = slacktest.NewTestServer()
435437
server.Start()
436438
url = server.GetAPIURL()
439+
440+
api := slack.New("test-token", slack.OptionAPIURL(url))
441+
rtm = api.NewRTM()
442+
go rtm.ManageConnection()
437443
})
438444

439-
AfterEach(func() {
445+
AfterEach(func(ctx SpecContext) {
446+
err := rtm.Disconnect()
447+
Expect(err).To(Succeed())
440448
lease := &coordinationv1.Lease{}
441-
Expect(k8sClient.Get(context.Background(), leaseName, lease)).To(Succeed())
442-
Expect(k8sClient.Delete(context.Background(), lease)).To(Succeed())
449+
Expect(k8sClient.Get(ctx, leaseName, lease)).To(Succeed())
450+
Expect(k8sClient.Delete(ctx, lease)).To(Succeed())
443451
server.Stop()
444452
})
445453

446-
fetchMessages := func(g Gomega) []slack.Msg {
447-
msgs := make([]slack.Msg, 0)
448-
for _, outbound := range server.GetSeenOutboundMessages() {
449-
msg := slack.Msg{}
450-
g.Expect(json.Unmarshal([]byte(outbound), &msg)).To(Succeed())
451-
msgs = append(msgs, msg)
452-
}
453-
return msgs
454-
}
455-
456-
It("should send a message and create its lease", func() {
454+
It("should send a message and create its lease", func(ctx SpecContext) {
457455
thread := impl.SlackThread{
458456
Token: "",
459457
Title: "title",
@@ -463,20 +461,21 @@ var _ = Describe("The slack thread plugin", func() {
463461
Period: 1 * time.Second,
464462
}
465463
thread.SetTestURL(url)
466-
err := thread.Notify(plugin.Parameters{Client: k8sClient, Ctx: context.Background()})
467-
Expect(err).To(Succeed())
468-
Eventually(fetchMessages).Should(SatisfyAll(HaveLen(2), Satisfy(func(msgs []slack.Msg) bool {
469-
return msgs[0].Timestamp == msgs[1].ThreadTimestamp &&
470-
msgs[0].Text == "title" && msgs[1].Text == "msg"
471-
})))
464+
Expect(thread.Notify(plugin.Parameters{Client: k8sClient, Ctx: ctx})).To(Succeed())
465+
var firstMsg slack.RTMEvent
466+
Eventually(rtm.IncomingEvents).Should(Receive(&firstMsg, HaveField("Data.Msg.Text", "title")))
467+
Eventually(rtm.IncomingEvents).Should(Receive(SatisfyAll(
468+
HaveField("Data.Msg.Text", "msg"),
469+
HaveField("Data.Msg.ThreadTimestamp", firstMsg.Data.(*slack.MessageEvent).Timestamp),
470+
)))
472471
Eventually(func() error {
473472
var lease coordinationv1.Lease
474-
err := k8sClient.Get(context.Background(), thread.LeaseName, &lease)
473+
err := k8sClient.Get(ctx, thread.LeaseName, &lease)
475474
return err
476475
}).Should(Succeed())
477476
})
478477

479-
It("should use replies if the lease did not timeout", func() {
478+
It("should use replies if the lease did not timeout", func(ctx SpecContext) {
480479
thread := impl.SlackThread{
481480
Token: "",
482481
Title: "title",
@@ -486,16 +485,15 @@ var _ = Describe("The slack thread plugin", func() {
486485
Period: 5 * time.Second,
487486
}
488487
thread.SetTestURL(url)
489-
err := thread.Notify(plugin.Parameters{Client: k8sClient, Ctx: context.Background()})
490-
Expect(err).To(Succeed())
491-
err = thread.Notify(plugin.Parameters{Client: k8sClient, Ctx: context.Background()})
492-
Expect(err).To(Succeed())
493-
Eventually(fetchMessages).Should(SatisfyAll(HaveLen(3), Satisfy(func(msgs []slack.Msg) bool {
494-
return msgs[0].Timestamp == msgs[1].ThreadTimestamp && msgs[0].Timestamp == msgs[2].ThreadTimestamp
495-
})))
488+
Expect(thread.Notify(plugin.Parameters{Client: k8sClient, Ctx: ctx})).To(Succeed())
489+
Expect(thread.Notify(plugin.Parameters{Client: k8sClient, Ctx: ctx})).To(Succeed())
490+
var firstMsg slack.RTMEvent
491+
Eventually(rtm.IncomingEvents).Should(Receive(&firstMsg, HaveField("Data.Msg.Text", "title")))
492+
Eventually(rtm.IncomingEvents).Should(Receive(HaveField("Data.Msg.ThreadTimestamp", firstMsg.Data.(*slack.MessageEvent).Timestamp)))
493+
Eventually(rtm.IncomingEvents).Should(Receive(HaveField("Data.Msg.ThreadTimestamp", firstMsg.Data.(*slack.MessageEvent).Timestamp)))
496494
})
497495

498-
It("creates a new thread once the lease times out", func() {
496+
It("creates a new thread once the lease times out", func(ctx SpecContext) {
499497
thread := impl.SlackThread{
500498
Token: "",
501499
Title: "title",
@@ -505,14 +503,21 @@ var _ = Describe("The slack thread plugin", func() {
505503
Period: 1 * time.Second,
506504
}
507505
thread.SetTestURL(url)
508-
err := thread.Notify(plugin.Parameters{Client: k8sClient, Ctx: context.Background()})
509-
Expect(err).To(Succeed())
510-
time.Sleep(2 * time.Second)
511-
err = thread.Notify(plugin.Parameters{Client: k8sClient, Ctx: context.Background()})
512-
Expect(err).To(Succeed())
513-
Eventually(fetchMessages).Should(SatisfyAll(HaveLen(4), Satisfy(func(msgs []slack.Msg) bool {
514-
return msgs[0].Timestamp == msgs[1].ThreadTimestamp && msgs[2].Timestamp == msgs[3].ThreadTimestamp
515-
})))
506+
Expect(thread.Notify(plugin.Parameters{Client: k8sClient, Ctx: ctx})).To(Succeed())
507+
time.Sleep(1100 * time.Millisecond)
508+
Expect(thread.Notify(plugin.Parameters{Client: k8sClient, Ctx: ctx})).To(Succeed())
509+
var firstMsg slack.RTMEvent
510+
Eventually(rtm.IncomingEvents).Should(Receive(&firstMsg, HaveField("Data.Msg.Text", "title")))
511+
Eventually(rtm.IncomingEvents).Should(Receive(SatisfyAll(
512+
HaveField("Data.Msg.Text", "msg"),
513+
HaveField("Data.Msg.ThreadTimestamp", firstMsg.Data.(*slack.MessageEvent).Timestamp),
514+
)))
515+
var secondMsg slack.RTMEvent
516+
Eventually(rtm.IncomingEvents).Should(Receive(&secondMsg, HaveField("Data.Msg.Text", "title")))
517+
Eventually(rtm.IncomingEvents).Should(Receive(SatisfyAll(
518+
HaveField("Data.Msg.Text", "msg"),
519+
HaveField("Data.Msg.ThreadTimestamp", secondMsg.Data.(*slack.MessageEvent).Timestamp),
520+
)))
516521
})
517522
})
518523

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ require (
1515
github.com/prometheus/common v0.67.5
1616
github.com/sapcc/go-bits v0.0.0-20260116110244-dee8151c1378
1717
github.com/sapcc/ucfgwrap v0.0.0-20221123134804-375b5fb88359
18-
github.com/slack-go/slack v0.16.0
19-
github.com/vmware/govmomi v0.50.0
18+
github.com/slack-go/slack v0.17.3
19+
github.com/vmware/govmomi v0.52.0
2020
go.uber.org/zap v1.27.1
21-
gopkg.in/ini.v1 v1.67.0
21+
gopkg.in/ini.v1 v1.67.1
2222
k8s.io/api v0.34.1
2323
k8s.io/apimachinery v0.34.1
2424
k8s.io/client-go v0.34.1

go.sum

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ github.com/go-openapi/swag/jsonname v0.25.1 h1:Sgx+qbwa4ej6AomWC6pEfXrA6uP2RkaNj
4848
github.com/go-openapi/swag/jsonname v0.25.1/go.mod h1:71Tekow6UOLBD3wS7XhdT98g5J5GR13NOTQ9/6Q11Zo=
4949
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
5050
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
51-
github.com/go-test/deep v1.0.4 h1:u2CU3YKy9I2pmu9pX0eq50wCgjfGIt539SqR7FbHiho=
52-
github.com/go-test/deep v1.0.4/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
51+
github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U=
52+
github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
5353
github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw=
5454
github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
5555
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
@@ -60,7 +60,6 @@ github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
6060
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
6161
github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
6262
github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
63-
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
6463
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
6564
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
6665
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -72,7 +71,6 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
7271
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
7372
github.com/gophercloud/gophercloud/v2 v2.10.0 h1:NRadC0aHNvy4iMoFXj5AFiPmut/Sj3hAPAo9B59VMGc=
7473
github.com/gophercloud/gophercloud/v2 v2.10.0/go.mod h1:Ki/ILhYZr/5EPebrPL9Ej+tUg4lqx71/YH2JWVeU+Qk=
75-
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
7674
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo=
7775
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA=
7876
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
@@ -139,16 +137,20 @@ github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw=
139137
github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
140138
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
141139
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
142-
github.com/slack-go/slack v0.16.0 h1:khp/WCFv+Hb/B/AJaAwvcxKun0hM6grN0bUZ8xG60P8=
143-
github.com/slack-go/slack v0.16.0/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw=
140+
github.com/slack-go/slack v0.17.3 h1:zV5qO3Q+WJAQ/XwbGfNFrRMaJ5T/naqaonyPV/1TP4g=
141+
github.com/slack-go/slack v0.17.3/go.mod h1:X+UqOufi3LYQHDnMG1vxf0J8asC6+WllXrVrhl8/Prk=
144142
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
145143
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
146144
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
145+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
146+
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
147147
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
148148
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
149-
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
150149
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
151150
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
151+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
152+
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
153+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
152154
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
153155
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
154156
github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
@@ -159,8 +161,8 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
159161
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
160162
github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
161163
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
162-
github.com/vmware/govmomi v0.50.0 h1:vFOnUCBCX3m3MgTKfBp68Pz5gsHvKkO07Y2wCGYYQOM=
163-
github.com/vmware/govmomi v0.50.0/go.mod h1:Z5uo7z0kRhVV00E4gfbUGwUaXIKTgqngsT+t/mIDpcI=
164+
github.com/vmware/govmomi v0.52.0 h1:JyxQ1IQdllrY7PJbv2am9mRsv3p9xWlIQ66bv+XnyLw=
165+
github.com/vmware/govmomi v0.52.0/go.mod h1:Yuc9xjznU3BH0rr6g7MNS1QGvxnJlE1vOvTJ7Lx7dqI=
164166
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
165167
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
166168
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -231,12 +233,13 @@ gopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWM
231233
gopkg.in/hjson/hjson-go.v3 v3.0.1/go.mod h1:X6zrTSVeImfwfZLfgQdInl9mWjqPqgH90jom9nym/lw=
232234
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
233235
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
234-
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
235-
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
236+
gopkg.in/ini.v1 v1.67.1 h1:tVBILHy0R6e4wkYOn3XmiITt/hEVH4TFMYvAX2Ytz6k=
237+
gopkg.in/ini.v1 v1.67.1/go.mod h1:x/cyOwCgZqOkJoDIJ3c1KNHMo10+nLGAhh+kn3Zizss=
236238
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
237239
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
238240
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
239241
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
242+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
240243
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
241244
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
242245
k8s.io/api v0.34.1 h1:jC+153630BMdlFukegoEL8E/yT7aLyQkIVuwhmwDgJM=

0 commit comments

Comments
 (0)