Skip to content

Commit 77232b2

Browse files
committed
Add system test for stream
if RabbitMQ image supports the stream plugin. Run system tests against earliest RabbitMQ image supported by cluster-operator (i.e v3.8.8) and latest released 3.8 image. There is not much benefit in testing every RabbitMQ patch release. Testing against every RabbitMQ patch release would result in 8 (RabbitMQ 3.8.8 - 3.8.15) * 4 (K8s 1.18 - 1.21) = 32 system test suites. Also, run system tests against rabbitmq-server master branch. This will catch any breaking changes early. It also enables us to test unreleased features such as rabbitmq_stream plugin. When https://github.com/rabbitmq/rabbitmq-stream-go-client client changes its API, we will adapt the system test.
1 parent c888867 commit 77232b2

File tree

6 files changed

+85
-32
lines changed

6 files changed

+85
-32
lines changed

.github/workflows/pr.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,14 @@ jobs:
4444
runs-on: ubuntu-latest
4545
strategy:
4646
matrix:
47-
k8s: [v1.18.15, v1.19.7, v1.20.2]
47+
k8s:
48+
- v1.18.15
49+
- v1.19.7
50+
- v1.20.2
4851
rabbitmq-image:
4952
- rabbitmq:3.8.8-management
50-
- rabbitmq:3.8.9-management
51-
- rabbitmq:3.8.10-management
53+
- rabbitmq:3.8-management
54+
- pivotalrabbitmq/rabbitmq:master
5255
steps:
5356
- name: Check out code into the Go module directory
5457
uses: actions/checkout@v2

Makefile

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
1-
# runs the target list by default
2-
.DEFAULT_GOAL = list
3-
4-
.PHONY: list
5-
6-
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
7-
CRD_OPTIONS ?= "crd:trivialVersions=true, preserveUnknownFields=false, crdVersions=v1"
8-
9-
# Insert a comment starting with '##' after a target, and it will be printed by 'make' and 'make list'
10-
list: ## list Makefile targets
11-
@echo "The most used targets: \n"
1+
.DEFAULT_GOAL = help
2+
.PHONY: help
3+
help:
124
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
135

146
unit-tests: install-tools generate fmt vet manifests ## Run unit tests
@@ -17,6 +9,9 @@ unit-tests: install-tools generate fmt vet manifests ## Run unit tests
179
integration-tests: install-tools generate fmt vet manifests ## Run integration tests
1810
ginkgo -r controllers/
1911

12+
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
13+
CRD_OPTIONS ?= "crd:trivialVersions=true, preserveUnknownFields=false, crdVersions=v1"
14+
2015
manifests: install-tools ## Generate manifests e.g. CRD, RBAC etc.
2116
controller-gen $(CRD_OPTIONS) rbac:roleName=operator-role paths="./api/...;./controllers/..." output:crd:artifacts:config=config/crd/bases
2217
./hack/remove-override-descriptions.sh
@@ -150,14 +145,14 @@ kind-unprepare: ## Remove KIND support for LoadBalancer services
150145
@kubectl delete -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml
151146
@kubectl delete -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/namespace.yaml
152147

153-
system-tests: install-tools ## run end-to-end tests against Kubernetes cluster defined in ~/.kube/config
148+
system-tests: install-tools ## Run end-to-end tests against Kubernetes cluster defined in ~/.kube/config
154149
NAMESPACE="rabbitmq-system" ginkgo -nodes=3 -randomizeAllSpecs -r system_tests/
155150

156-
chart-tests:
151+
chart-tests: ## Run Helm chart tests
157152
echo "running charts tests"
158153
cd charts/rabbitmq && ./test.sh
159154

160-
kubectl-plugin-tests:
155+
kubectl-plugin-tests: ## Run kubectl-rabbitmq tests
161156
echo "running kubectl plugin tests"
162157
./bin/kubectl-rabbitmq.bats
163158

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ require (
1212
github.com/michaelklishin/rabbit-hole/v2 v2.8.0
1313
github.com/onsi/ginkgo v1.16.1
1414
github.com/onsi/gomega v1.11.0
15+
github.com/rabbitmq/rabbitmq-stream-go-client v0.0.0-20210422170636-520637be5dde
1516
github.com/sclevine/yj v0.0.0-20200815061347-554173e71934
1617
github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71
1718
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb

go.sum

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -367,8 +367,9 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaU
367367
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
368368
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
369369
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
370-
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
371370
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
371+
github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
372+
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
372373
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
373374
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
374375
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
@@ -564,6 +565,7 @@ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+
564565
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
565566
github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
566567
github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
568+
github.com/onsi/ginkgo v1.15.1/go.mod h1:Dd6YFfwBW84ETqqtL0CPyPXillHgY6XhQH3uuCCTr/o=
567569
github.com/onsi/ginkgo v1.16.1 h1:foqVmeWDD6yYpK+Yz3fHyNIxFYNxswxqNFjSKe+vI54=
568570
github.com/onsi/ginkgo v1.16.1/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E=
569571
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
@@ -623,6 +625,8 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T
623625
github.com/qri-io/starlib v0.4.2-0.20200213133954-ff2e8cd5ef8d h1:K6eOUihrFLdZjZnA4XlRp864fmWXv9YTIk7VPLhRacA=
624626
github.com/qri-io/starlib v0.4.2-0.20200213133954-ff2e8cd5ef8d/go.mod h1:7DPO4domFU579Ga6E61sB9VFNaniPVwJP5C4bBCu3wA=
625627
github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI=
628+
github.com/rabbitmq/rabbitmq-stream-go-client v0.0.0-20210422170636-520637be5dde h1:mqccUEJlP1qGNDztZx7svxQ9c4nUMgkk/SaIunGbOKk=
629+
github.com/rabbitmq/rabbitmq-stream-go-client v0.0.0-20210422170636-520637be5dde/go.mod h1:smigXgSjihJBEh9pqwqh+vWhNr2JNg7NN/3pX0qYWRQ=
626630
github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M=
627631
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
628632
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
@@ -664,8 +668,9 @@ github.com/spf13/cobra v0.0.0-20170417170307-b6cb39589372/go.mod h1:1l0Ry5zgKvJa
664668
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
665669
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
666670
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
667-
github.com/spf13/cobra v1.1.1 h1:KfztREH0tPxJJ+geloSLaAkaPkr4ki2Er5quFV1TDo4=
668671
github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
672+
github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M=
673+
github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
669674
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
670675
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
671676
github.com/spf13/pflag v0.0.0-20170417173400-9e4c21054fa1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
@@ -932,8 +937,9 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w
932937
golang.org/x/sys v0.0.0-20200928205150-006507a75852/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
933938
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
934939
golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
935-
golang.org/x/sys v0.0.0-20210112080510-489259a85091 h1:DMyOG0U+gKfu8JZzg2UQe9MeaC1X+xQWlAKcRnjxjCw=
936940
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
941+
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
942+
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
937943
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
938944
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
939945
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1005,8 +1011,9 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK
10051011
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
10061012
golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
10071013
golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
1008-
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e h1:4nW4NLDYnU28ojHaHO8OVxFHk/aQ33U01a9cjED+pzE=
10091014
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
1015+
golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
1016+
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
10101017
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
10111018
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
10121019
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1117,8 +1124,9 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh
11171124
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
11181125
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
11191126
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
1120-
honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U=
11211127
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
1128+
honnef.co/go/tools v0.1.3 h1:qTakTkI6ni6LFD5sBwwsdSO+AQqbSIxOauHTTQKZ/7o=
1129+
honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
11221130
k8s.io/api v0.0.0-20190918155943-95b840bb6a1f/go.mod h1:uWuOHnjmNrtQomJrvEBg0c0HRNyQ+8KTEERVsK0PW48=
11231131
k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
11241132
k8s.io/api v0.20.2 h1:y/HR22XDZY3pniu9hIFDLpUCPq2w5eQ6aV/VFQ7uJMw=

system_tests/system_test.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ CONSOLE_LOG=new`
523523
})
524524
})
525525

526-
When("(web) MQTT and STOMP plugins are enabled", func() {
526+
When("(web) MQTT, STOMP, and stream plugins are enabled", func() {
527527
var (
528528
cluster *rabbitmqv1beta1.RabbitmqCluster
529529
hostname string
@@ -532,13 +532,14 @@ CONSOLE_LOG=new`
532532
)
533533

534534
BeforeEach(func() {
535-
instanceName := "mqtt-stomp-rabbit"
535+
instanceName := "mqtt-stomp-stream"
536536
cluster = newRabbitmqCluster(namespace, instanceName)
537537
cluster.Spec.Service.Type = "NodePort"
538538
cluster.Spec.Rabbitmq.AdditionalPlugins = []rabbitmqv1beta1.Plugin{
539539
"rabbitmq_mqtt",
540540
"rabbitmq_web_mqtt",
541541
"rabbitmq_stomp",
542+
"rabbitmq_stream",
542543
}
543544
Expect(createRabbitmqCluster(ctx, rmqClusterClient, cluster)).To(Succeed())
544545
waitForRabbitmqRunning(cluster)
@@ -564,6 +565,12 @@ CONSOLE_LOG=new`
564565
publishAndConsumeSTOMPMsg(hostname, rabbitmqNodePort(ctx, clientSet, cluster, "stomp"), username, password, nil)
565566

566567
// github.com/go-stomp/stomp does not support STOMP-over-WebSockets
568+
569+
By("stream")
570+
if strings.Contains(cluster.Spec.Image, ":3.8") || strings.Contains(cluster.Spec.Image, "vmware-tanzu-rabbitmq:2020") {
571+
Skip("rabbitmq_stream plugin is not supported by RabbitMQ image " + cluster.Spec.Image)
572+
}
573+
publishAndConsumeStreamMsg(ctx, hostname, rabbitmqNodePort(ctx, clientSet, cluster, "stream"), username, password)
567574
})
568575
})
569576
})

system_tests/utils.go

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
"crypto/x509"
1717
"encoding/json"
1818
"fmt"
19-
"gopkg.in/ini.v1"
2019
"io"
2120
"io/ioutil"
2221
"log"
@@ -28,6 +27,8 @@ import (
2827
"strings"
2928
"time"
3029

30+
"gopkg.in/ini.v1"
31+
3132
k8sresource "k8s.io/apimachinery/pkg/api/resource"
3233

3334
mgmtApi "github.com/michaelklishin/rabbit-hole/v2"
@@ -41,6 +42,8 @@ import (
4142
mqtt "github.com/eclipse/paho.mqtt.golang"
4243
"github.com/go-stomp/stomp"
4344
rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
45+
streamamqp "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/amqp"
46+
"github.com/rabbitmq/rabbitmq-stream-go-client/pkg/streaming"
4447
"github.com/streadway/amqp"
4548
corev1 "k8s.io/api/core/v1"
4649
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -821,10 +824,10 @@ func createCertificateChain(hostname string, caCertWriter, certWriter, keyWriter
821824
return caCert, caKey, nil
822825
}
823826

824-
func publishAndConsumeMQTTMsg(hostname, nodePort, username, password string, overWebSocket bool, tlsConfig *tls.Config) {
825-
url := fmt.Sprintf("tcp://%s:%s", hostname, nodePort)
827+
func publishAndConsumeMQTTMsg(hostname, port, username, password string, overWebSocket bool, tlsConfig *tls.Config) {
828+
url := fmt.Sprintf("tcp://%s:%s", hostname, port)
826829
if overWebSocket {
827-
url = fmt.Sprintf("ws://%s:%s/ws", hostname, nodePort)
830+
url = fmt.Sprintf("ws://%s:%s/ws", hostname, port)
828831
}
829832
opts := mqtt.NewClientOptions().
830833
AddBroker(url).
@@ -834,7 +837,7 @@ func publishAndConsumeMQTTMsg(hostname, nodePort, username, password string, ove
834837
SetProtocolVersion(4) // RabbitMQ MQTT plugin targets MQTT 3.1.1
835838

836839
if tlsConfig != nil {
837-
url = fmt.Sprintf("ssl://%s:%s", hostname, nodePort)
840+
url = fmt.Sprintf("ssl://%s:%s", hostname, port)
838841
opts = opts.
839842
AddBroker(url).
840843
SetTLSConfig(tlsConfig)
@@ -885,13 +888,13 @@ func publishAndConsumeMQTTMsg(hostname, nodePort, username, password string, ove
885888
c.Disconnect(250)
886889
}
887890

888-
func publishAndConsumeSTOMPMsg(hostname, stompNodePort, username, password string, tlsConfig *tls.Config) {
891+
func publishAndConsumeSTOMPMsg(hostname, port, username, password string, tlsConfig *tls.Config) {
889892
var conn *stomp.Conn
890893
var err error
891894

892895
// Create a secure tls.Conn and pass to stomp.Connect, otherwise use Stomp.Dial
893896
if tlsConfig != nil {
894-
secureConn, err := tls.Dial("tcp", fmt.Sprintf("%s:%s", hostname, stompNodePort), tlsConfig)
897+
secureConn, err := tls.Dial("tcp", fmt.Sprintf("%s:%s", hostname, port), tlsConfig)
895898
ExpectWithOffset(1, err).NotTo(HaveOccurred())
896899
defer secureConn.Close()
897900

@@ -913,7 +916,7 @@ func publishAndConsumeSTOMPMsg(hostname, stompNodePort, username, password strin
913916
for retry := 0; retry < 5; retry++ {
914917
fmt.Printf("Attempt #%d to connect using STOMP\n", retry)
915918
conn, err = stomp.Dial("tcp",
916-
fmt.Sprintf("%s:%s", hostname, stompNodePort),
919+
fmt.Sprintf("%s:%s", hostname, port),
917920
stomp.ConnOpt.Login(username, password),
918921
stomp.ConnOpt.AcceptVersion(stomp.V12),
919922
stomp.ConnOpt.Host("/"),
@@ -951,6 +954,42 @@ func publishAndConsumeSTOMPMsg(hostname, stompNodePort, username, password strin
951954
ExpectWithOffset(1, conn.Disconnect()).To(Succeed())
952955
}
953956

957+
func publishAndConsumeStreamMsg(ctx context.Context, hostname, port, username, password string) {
958+
uri := fmt.Sprintf("rabbitmq-streaming://%s:%s@%s:%s/%%2f", username, password, hostname, port)
959+
client, err := streaming.NewClientCreator().Uri(uri).Connect()
960+
Expect(err).ToNot(HaveOccurred())
961+
962+
streamName := "system-test-stream"
963+
Expect(client.StreamCreator().Stream(streamName).Create()).To(Succeed())
964+
965+
var msgReceived []byte
966+
consumer, err := client.ConsumerCreator().
967+
Stream(streamName).
968+
Name("system-test-consumer").
969+
MessagesHandler(func(context streaming.ConsumerContext, message *streamamqp.Message) {
970+
Expect(message.Data).To(HaveLen(1))
971+
msgReceived = message.Data[0]
972+
}).Build()
973+
Expect(err).ToNot(HaveOccurred())
974+
975+
msgSent := []byte("test message stream")
976+
producer, err := client.ProducerCreator().Stream(streamName).Build()
977+
Expect(err).ToNot(HaveOccurred())
978+
_, err = producer.BatchPublish(ctx, []*streamamqp.Message{
979+
streamamqp.NewMessage(msgSent)},
980+
)
981+
Expect(err).ToNot(HaveOccurred())
982+
983+
Eventually(func() []byte {
984+
return msgReceived
985+
}, 5*time.Second).Should(Equal(msgSent), "consumer should receive message sent by producer")
986+
987+
Expect(producer.Close()).To(Succeed())
988+
Expect(consumer.UnSubscribe()).To(Succeed())
989+
Expect(client.DeleteStream(streamName)).To(Succeed())
990+
Expect(client.Close()).To(Succeed())
991+
}
992+
954993
func pod(ctx context.Context, clientSet *kubernetes.Clientset, r *rabbitmqv1beta1.RabbitmqCluster, i int) *corev1.Pod {
955994
podName := statefulSetPodName(r, i)
956995
var pod *corev1.Pod

0 commit comments

Comments
 (0)