Skip to content

Commit 884edf1

Browse files
testing: e2e & conformance. Adds ability to specify custom images and secrets for rabbitmqclusters (#921)
Co-authored-by: Gab Satchi <[email protected]>
1 parent 34bc84b commit 884edf1

File tree

8 files changed

+167
-8
lines changed

8 files changed

+167
-8
lines changed

Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,20 +367,28 @@ test-e2e-publish: | $(KUBECONFIG) ## Run TestKoPublish end-to-end tests - assum
367367
.PHONY: test-e2e-broker
368368
test-e2e-broker: | $(KUBECONFIG) ## Run Broker end-to-end tests - assumes a K8S with all necessary components installed (Knative & RabbitMQ)
369369
@printf "$(WARN)$(BOLD)rabbitmqcluster$(NORMAL)$(WARN) has large resource requirements 🤔$(NORMAL)\n"
370+
RABBITMQ_SERVER_IMAGE=$(RABBITMQ_SERVER_IMAGE) \
371+
RABBITMQ_IMAGE_PULL_SECRET=$(RABBITMQ_IMAGE_PULL_SECRET) \
370372
go test -v -race -count=1 -timeout=20m -tags=e2e ./test/e2e/... -run 'Test.*Broker.*'
371373

372374
.PHONY: test-e2e-source
373375
test-e2e-source: | $(KUBECONFIG) ## Run Source end-to-end tests - assumes a K8S with all necessary components installed (Knative & RabbitMQ)
376+
RABBITMQ_SERVER_IMAGE=$(RABBITMQ_SERVER_IMAGE) \
377+
RABBITMQ_IMAGE_PULL_SECRET=$(RABBITMQ_IMAGE_PULL_SECRET) \
374378
go test -v -race -count=1 -timeout=15m -tags=e2e ./test/e2e/... -run 'Test.*Source.*'
375379

376380
.PHONY: test-e2e
377381
test-e2e: install ## Run all end-to-end tests - manages all dependencies, including K8S components
382+
RABBITMQ_SERVER_IMAGE=$(RABBITMQ_SERVER_IMAGE) \
383+
RABBITMQ_IMAGE_PULL_SECRET=$(RABBITMQ_IMAGE_PULL_SECRET) \
378384
go test -v -race -count=1 -timeout=50m -tags=e2e ./test/e2e/...
379385

380386
.PHONY: _test-conformance
381387
_test-conformance:
382388
BROKER_TEMPLATES=$(BROKER_TEMPLATES) \
383389
BROKER_CLASS=RabbitMQBroker \
390+
RABBITMQ_SERVER_IMAGE=$(RABBITMQ_SERVER_IMAGE) \
391+
RABBITMQ_IMAGE_PULL_SECRET=$(RABBITMQ_IMAGE_PULL_SECRET) \
384392
go test -v -tags=e2e \
385393
-count=1 -parallel=8 -timeout=1h \
386394
-run TestBroker.*Conformance.* $(CURDIR)/test/conformance/...

test/conformance/conformance_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
_ "knative.dev/pkg/system/testing"
3030

3131
"knative.dev/eventing-rabbitmq/test/conformance/features/rabbitmqcluster"
32+
r "knative.dev/eventing-rabbitmq/test/conformance/resources/rabbitmqcluster"
3233
"knative.dev/eventing/test/rekt/features/broker"
3334
b "knative.dev/eventing/test/rekt/resources/broker"
3435
"knative.dev/reconciler-test/pkg/environment"
@@ -46,7 +47,7 @@ func TestBrokerControlPlaneConformance(t *testing.T) {
4647
environment.Managed(t),
4748
)
4849

49-
env.Prerequisite(ctx, t, rabbitmqcluster.GoesReady("rabbitbroker", b.WithEnvConfig()...))
50+
env.Prerequisite(ctx, t, rabbitmqcluster.GoesReady("rabbitbroker", r.WithEnvConfig()...))
5051
// Install and wait for a Ready Broker.
5152
env.Prerequisite(ctx, t, broker.GoesReady("default", b.WithEnvConfig()...))
5253
env.TestSet(ctx, t, broker.ControlPlaneConformance("default"))
@@ -61,7 +62,7 @@ func TestBrokerDataPlaneConformance(t *testing.T) {
6162
environment.Managed(t),
6263
)
6364

64-
env.Prerequisite(ctx, t, rabbitmqcluster.GoesReady("rabbitbroker", b.WithEnvConfig()...))
65+
env.Prerequisite(ctx, t, rabbitmqcluster.GoesReady("rabbitbroker", r.WithEnvConfig()...))
6566
// Install and wait for a Ready Broker.
6667
env.Prerequisite(ctx, t, broker.GoesReady("default3", b.WithEnvConfig()...))
6768

test/conformance/resources/rabbitmqcluster/rabbitmqcluster.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ package rabbitmqcluster
1919
import (
2020
"context"
2121
"embed"
22+
"log"
2223
"time"
2324

25+
"github.com/kelseyhightower/envconfig"
2426
"knative.dev/reconciler-test/pkg/feature"
2527
"knative.dev/reconciler-test/pkg/k8s"
2628
"knative.dev/reconciler-test/pkg/manifest"
@@ -31,6 +33,46 @@ import (
3133
//go:embed "*.yaml"
3234
var yamls embed.FS
3335

36+
var EnvCfg EnvConfig
37+
38+
type EnvConfig struct {
39+
RabbitmqServerImage string `envconfig:"RABBITMQ_SERVER_IMAGE"`
40+
RabbitmqImagePullSecret string `envconfig:"RABBITMQ_IMAGE_PULL_SECRET"`
41+
}
42+
43+
func init() {
44+
// Process EventingGlobal.
45+
if err := envconfig.Process("", &EnvCfg); err != nil {
46+
log.Fatal("Failed to process env var", err)
47+
}
48+
}
49+
50+
func WithEnvConfig() []manifest.CfgFn {
51+
cfg := []manifest.CfgFn{}
52+
53+
if EnvCfg.RabbitmqServerImage != "" {
54+
cfg = append(cfg, WithRabbitmqServerImage(EnvCfg.RabbitmqServerImage))
55+
}
56+
57+
if EnvCfg.RabbitmqImagePullSecret != "" {
58+
cfg = append(cfg, WithRabbitmqImagePullSecret(EnvCfg.RabbitmqImagePullSecret))
59+
}
60+
61+
return cfg
62+
}
63+
64+
func WithRabbitmqServerImage(name string) manifest.CfgFn {
65+
return func(cfg map[string]interface{}) {
66+
cfg["rabbitmqServerImage"] = name
67+
}
68+
}
69+
70+
func WithRabbitmqImagePullSecret(name string) manifest.CfgFn {
71+
return func(cfg map[string]interface{}) {
72+
cfg["rabbitmqImagePullSecretName"] = name
73+
}
74+
}
75+
3476
func GVR() schema.GroupVersionResource {
3577
return schema.GroupVersionResource{Group: "rabbitmq.com", Version: "v1beta1", Resource: "rabbitmqclusters"}
3678
}

test/conformance/resources/rabbitmqcluster/rabbitmqcluster.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ metadata:
44
name: {{ .name }}
55
namespace: {{ .namespace }}
66
spec:
7+
{{ if .rabbitmqServerImage }}
8+
image: {{ .rabbitmqServerImage }}
9+
{{ end }}
10+
{{ if .rabbitmqImagePullSecretName }}
11+
imagePullSecrets:
12+
- name: {{ .rabbitmqImagePullSecretName }}
13+
{{ end }}
714
replicas: 1
815
resources:
916
limits:

test/e2e/config/rabbitmq/cluster.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ metadata:
2222
# to declare objects against this RabbitMQ cluster
2323
rabbitmq.com/topology-allowed-namespaces: "*"
2424
spec:
25+
{{ if .rabbitmqServerImage }}
26+
image: {{ .rabbitmqServerImage }}
27+
{{ end }}
28+
{{ if .rabbitmqImagePullSecretName }}
29+
imagePullSecrets:
30+
- name: {{ .rabbitmqImagePullSecretName }}
31+
{{ end }}
2532
replicas: 1
2633
resources:
2734
limits:

test/e2e/config/rabbitmq/rabbitmq.go

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,64 @@ package rabbitmq
1919
import (
2020
"context"
2121
"embed"
22+
"log"
2223

24+
"github.com/kelseyhightower/envconfig"
2325
"knative.dev/reconciler-test/pkg/feature"
2426
"knative.dev/reconciler-test/pkg/manifest"
2527
)
2628

2729
//go:embed "*.yaml"
2830
var yamls embed.FS
2931

30-
func Install() feature.StepFn {
32+
var EnvCfg EnvConfig
33+
34+
type EnvConfig struct {
35+
RabbitmqServerImage string `envconfig:"RABBITMQ_SERVER_IMAGE"`
36+
RabbitmqImagePullSecret string `envconfig:"RABBITMQ_IMAGE_PULL_SECRET"`
37+
}
38+
39+
func init() {
40+
// Process EventingGlobal.
41+
if err := envconfig.Process("", &EnvCfg); err != nil {
42+
log.Fatal("Failed to process env var", err)
43+
}
44+
}
45+
46+
func WithEnvConfig() []manifest.CfgFn {
47+
cfg := []manifest.CfgFn{}
48+
49+
if EnvCfg.RabbitmqServerImage != "" {
50+
cfg = append(cfg, WithRabbitmqServerImage(EnvCfg.RabbitmqServerImage))
51+
}
52+
53+
if EnvCfg.RabbitmqImagePullSecret != "" {
54+
cfg = append(cfg, WithRabbitmqImagePullSecret(EnvCfg.RabbitmqImagePullSecret))
55+
}
56+
57+
return cfg
58+
}
59+
60+
func WithRabbitmqServerImage(name string) manifest.CfgFn {
61+
return func(cfg map[string]interface{}) {
62+
cfg["rabbitmqServerImage"] = name
63+
}
64+
}
65+
66+
func WithRabbitmqImagePullSecret(name string) manifest.CfgFn {
67+
return func(cfg map[string]interface{}) {
68+
cfg["rabbitmqImagePullSecretName"] = name
69+
}
70+
}
71+
72+
func Install(opts ...manifest.CfgFn) feature.StepFn {
73+
cfg := map[string]interface{}{}
74+
for _, fn := range opts {
75+
fn(cfg)
76+
}
77+
3178
return func(ctx context.Context, t feature.T) {
32-
if _, err := manifest.InstallYamlFS(ctx, yamls, nil); err != nil {
79+
if _, err := manifest.InstallYamlFS(ctx, yamls, cfg); err != nil {
3380
t.Fatal(err)
3481
}
3582
}

test/e2e/config/rabbitmqvhost/rabbitmqvhost.go

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,64 @@ package rabbitmqvhost
1919
import (
2020
"context"
2121
"embed"
22+
"log"
2223

24+
"github.com/kelseyhightower/envconfig"
2325
"knative.dev/reconciler-test/pkg/feature"
2426
"knative.dev/reconciler-test/pkg/manifest"
2527
)
2628

2729
//go:embed "*.yaml"
2830
var yamls embed.FS
2931

30-
func Install() feature.StepFn {
32+
var EnvCfg EnvConfig
33+
34+
type EnvConfig struct {
35+
RabbitmqServerImage string `envconfig:"RABBITMQ_SERVER_IMAGE"`
36+
RabbitmqImagePullSecret string `envconfig:"RABBITMQ_IMAGE_PULL_SECRET"`
37+
}
38+
39+
func init() {
40+
// Process EventingGlobal.
41+
if err := envconfig.Process("", &EnvCfg); err != nil {
42+
log.Fatal("Failed to process env var", err)
43+
}
44+
}
45+
46+
func WithEnvConfig() []manifest.CfgFn {
47+
cfg := []manifest.CfgFn{}
48+
49+
if EnvCfg.RabbitmqServerImage != "" {
50+
cfg = append(cfg, WithRabbitmqServerImage(EnvCfg.RabbitmqServerImage))
51+
}
52+
53+
if EnvCfg.RabbitmqImagePullSecret != "" {
54+
cfg = append(cfg, WithRabbitmqImagePullSecret(EnvCfg.RabbitmqImagePullSecret))
55+
}
56+
57+
return cfg
58+
}
59+
60+
func WithRabbitmqServerImage(name string) manifest.CfgFn {
61+
return func(cfg map[string]interface{}) {
62+
cfg["rabbitmqServerImage"] = name
63+
}
64+
}
65+
66+
func WithRabbitmqImagePullSecret(name string) manifest.CfgFn {
67+
return func(cfg map[string]interface{}) {
68+
cfg["rabbitmqImagePullSecretName"] = name
69+
}
70+
}
71+
72+
func Install(opts ...manifest.CfgFn) feature.StepFn {
73+
cfg := map[string]interface{}{}
74+
for _, fn := range opts {
75+
fn(cfg)
76+
}
77+
3178
return func(ctx context.Context, t feature.T) {
32-
if _, err := manifest.InstallYamlFS(ctx, yamls, nil); err != nil {
79+
if _, err := manifest.InstallYamlFS(ctx, yamls, cfg); err != nil {
3380
t.Fatal(err)
3481
}
3582
}

test/e2e/rabbitmqcluster.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,15 @@ const (
5858
func RabbitMQCluster() *feature.Feature {
5959
f := new(feature.Feature)
6060

61-
f.Setup("install a rabbitmqcluster", rabbitmq.Install())
61+
f.Setup("install a rabbitmqcluster", rabbitmq.Install(rabbitmq.WithEnvConfig()...))
6262
f.Requirement("RabbitMQCluster goes ready", RabbitMQClusterReady)
6363
return f
6464
}
6565

6666
func RabbitMQClusterVHost() *feature.Feature {
6767
f := new(feature.Feature)
6868

69-
f.Setup("install a rabbitmqcluster with a default vhost and user permissions to it", rabbitmqvhost.Install())
69+
f.Setup("install a rabbitmqcluster with a default vhost and user permissions to it", rabbitmqvhost.Install(rabbitmqvhost.WithEnvConfig()...))
7070
f.Requirement("RabbitMQCluster goes ready", RabbitMQClusterReady)
7171
f.Requirement("Add credentials to default user secret", RabbitMQClusterConnectionSecretVhost)
7272
return f

0 commit comments

Comments
 (0)