Skip to content

Commit 6971add

Browse files
gabo1208gab-satchi
andauthored
[release-1.6] Testing: e2e & conformance. Adds ability to specify custom images and secrets for rabbitmqclusters (#922)
* testing: e2e & conformance. Adds ability to specify custom images and secrets for rabbitmqclusters (#916) * fixed unused var Co-authored-by: Gab Satchi <[email protected]>
1 parent 7ea7078 commit 6971add

File tree

8 files changed

+174
-13
lines changed

8 files changed

+174
-13
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: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,61 @@ package rabbitmqcluster
1818

1919
import (
2020
"context"
21+
"embed"
22+
"log"
2123
"time"
2224

25+
"github.com/kelseyhightower/envconfig"
2326
"knative.dev/reconciler-test/pkg/feature"
2427
"knative.dev/reconciler-test/pkg/k8s"
2528
"knative.dev/reconciler-test/pkg/manifest"
2629

2730
"k8s.io/apimachinery/pkg/runtime/schema"
2831
)
2932

33+
//go:embed "*.yaml"
34+
var yamls embed.FS
35+
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+
3076
func GVR() schema.GroupVersionResource {
3177
return schema.GroupVersionResource{Group: "rabbitmq.com", Version: "v1beta1", Resource: "rabbitmqclusters"}
3278
}
@@ -41,7 +87,7 @@ func Install(name string, opts ...manifest.CfgFn) feature.StepFn {
4187
}
4288

4389
return func(ctx context.Context, t feature.T) {
44-
if _, err := manifest.InstallLocalYaml(ctx, cfg); err != nil {
90+
if _, err := manifest.InstallYamlFS(ctx, yamls, cfg); err != nil {
4591
t.Fatal(err)
4692
}
4793
}

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: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,65 @@ package rabbitmq
1818

1919
import (
2020
"context"
21+
"embed"
22+
"log"
2123

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

29+
//go:embed "*.yaml"
30+
var yamls embed.FS
31+
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+
2739
func init() {
28-
environment.RegisterPackage(manifest.ImagesLocalYaml()...)
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+
}
2964
}
3065

31-
func Install() feature.StepFn {
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+
3278
return func(ctx context.Context, t feature.T) {
33-
if _, err := manifest.InstallLocalYaml(ctx, nil); err != nil {
79+
if _, err := manifest.InstallYamlFS(ctx, yamls, cfg); err != nil {
3480
t.Fatal(err)
3581
}
3682
}

test/e2e/config/rabbitmqvhost/rabbitmqvhost.go

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,65 @@ package rabbitmqvhost
1818

1919
import (
2020
"context"
21+
"embed"
22+
"log"
2123

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

29+
//go:embed "*.yaml"
30+
var yamls embed.FS
31+
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+
2739
func init() {
28-
environment.RegisterPackage(manifest.ImagesLocalYaml()...)
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+
}
2964
}
3065

31-
func Install() feature.StepFn {
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+
3278
return func(ctx context.Context, t feature.T) {
33-
if _, err := manifest.InstallLocalYaml(ctx, nil); err != nil {
79+
if _, err := manifest.InstallYamlFS(ctx, yamls, cfg); err != nil {
3480
t.Fatal(err)
3581
}
3682
}

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)