Skip to content

Commit 322d211

Browse files
committed
test: add e2e tests
1 parent 3cab795 commit 322d211

10 files changed

+206
-80
lines changed

.github/workflows/test.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,9 @@ jobs:
4646
CF_ZONE_ID: ${{ secrets.CF_ZONE_ID }}
4747
run: |
4848
make test
49+
50+
- name: Run E2E Tests
51+
env:
52+
CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
53+
run: |
54+
make test-e2e

config/manager/kustomization.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,8 @@
11
resources:
22
- manager.yaml
3+
apiVersion: kustomize.config.k8s.io/v1beta1
4+
kind: Kustomization
5+
images:
6+
- name: controller
7+
newName: containeroo/cloudflare-operator
8+
newTag: test
Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
1+
---
2+
apiVersion: v1
3+
kind: Secret
4+
metadata:
5+
name: api-token-sample
6+
namespace: cloudflare-operator-system
7+
type: Opaque
8+
stringData:
9+
apiToken: ${CF_API_TOKEN}
10+
---
111
apiVersion: cloudflare-operator.io/v1
212
kind: Account
313
metadata:
4-
labels:
5-
app.kubernetes.io/name: account
6-
app.kubernetes.io/instance: account-sample
7-
app.kubernetes.io/part-of: cloudflare-operator
8-
app.kubernetes.io/managed-by: kustomize
9-
app.kubernetes.io/created-by: cloudflare-operator
1014
name: account-sample
1115
spec:
1216
apiToken:
1317
secretRef:
1418
name: api-token-sample
15-
namespace: default
19+
namespace: cloudflare-operator-system
Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
1+
---
12
apiVersion: cloudflare-operator.io/v1
23
kind: DNSRecord
34
metadata:
4-
labels:
5-
app.kubernetes.io/name: dnsrecord
6-
app.kubernetes.io/instance: dnsrecord-sample
7-
app.kubernetes.io/part-of: cloudflare-operator
8-
app.kubernetes.io/managed-by: kustomize
9-
app.kubernetes.io/created-by: cloudflare-operator
105
name: dnsrecord-sample
6+
namespace: cloudflare-operator-system
117
spec:
12-
name: example.com
13-
content: 1.1.1.1
14-
type: A # or CNAME
15-
# optionally, you can also reference an IP object
16-
# ipRef:
17-
# name: ip-sample
18-
proxied: true # or false
19-
ttl: 1 # for auto or between 120 and 86400
20-
interval: 5m
8+
name: containeroo-test.org
9+
content: 9.9.9.9
10+
type: A
11+
proxied: false
12+
ttl: 1
13+
---
14+
apiVersion: cloudflare-operator.io/v1
15+
kind: DNSRecord
16+
metadata:
17+
name: dnsrecord-ip-ref-sample
18+
namespace: cloudflare-operator-system
19+
spec:
20+
name: containeroo-test.org
21+
type: A
22+
ipRef:
23+
name: ip-sample
24+
proxied: false
25+
ttl: 1

config/samples/cloudflareoperatorio_v1_ip.yaml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
1+
---
12
apiVersion: cloudflare-operator.io/v1
23
kind: IP
34
metadata:
4-
labels:
5-
app.kubernetes.io/name: ip
6-
app.kubernetes.io/instance: ip-sample
7-
app.kubernetes.io/part-of: cloudflare-operator
8-
app.kubernetes.io/managed-by: kustomize
9-
app.kubernetes.io/created-by: cloudflare-operator
105
name: ip-sample
116
spec:
127
type: static # or dynamic
Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
1+
---
12
apiVersion: cloudflare-operator.io/v1
23
kind: Zone
34
metadata:
4-
labels:
5-
app.kubernetes.io/name: zone
6-
app.kubernetes.io/instance: zone-sample
7-
app.kubernetes.io/part-of: cloudflare-operator
8-
app.kubernetes.io/managed-by: kustomize
9-
app.kubernetes.io/created-by: cloudflare-operator
105
name: zone-sample
116
spec:
12-
name: example.com
7+
name: containeroo-test.org
138
prune: false
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
apiVersion: networking.k8s.io/v1
3+
kind: Ingress
4+
metadata:
5+
name: ingress-sample
6+
namespace: cloudflare-operator-system
7+
annotations:
8+
cloudflare-operator.io/content: "144.144.144.144"
9+
spec:
10+
rules:
11+
- host: ingress.containeroo-test.org
12+
http:
13+
paths:
14+
- path: /
15+
pathType: Prefix
16+
backend:
17+
service:
18+
name: service1
19+
port:
20+
number: 80

test/e2e/e2e_suite_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ import (
2727
// Run e2e tests using the Ginkgo runner.
2828
func TestE2E(t *testing.T) {
2929
RegisterFailHandler(Fail)
30-
fmt.Fprintf(GinkgoWriter, "Starting cloudflare-operator suite\n")
30+
fmt.Fprintf(GinkgoWriter, "Starting cloudflare-operator suite\n") // nolint:errcheck
3131
RunSpecs(t, "e2e suite")
3232
}

test/e2e/e2e_test.go

Lines changed: 92 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,6 @@ var _ = Describe("controller", Ordered, func() {
3434
By("installing prometheus operator")
3535
Expect(utils.InstallPrometheusOperator()).To(Succeed())
3636

37-
By("installing the cert-manager")
38-
Expect(utils.InstallCertManager()).To(Succeed())
39-
4037
By("creating manager namespace")
4138
cmd := exec.Command("kubectl", "create", "ns", namespace)
4239
_, _ = utils.Run(cmd)
@@ -46,11 +43,28 @@ var _ = Describe("controller", Ordered, func() {
4643
By("uninstalling the Prometheus manager bundle")
4744
utils.UninstallPrometheusOperator()
4845

49-
By("uninstalling the cert-manager bundle")
50-
utils.UninstallCertManager()
46+
By("removing all ingresses")
47+
cmd := exec.Command("kubectl", "delete", "ingresses", "--all", "--all-namespaces")
48+
_, _ = utils.Run(cmd)
49+
50+
By("removing all dnsrecords")
51+
cmd = exec.Command("kubectl", "delete", "dnsrecords", "--all", "--all-namespaces")
52+
_, _ = utils.Run(cmd)
53+
54+
By("removing all ips")
55+
cmd = exec.Command("kubectl", "delete", "ips", "--all", "--all-namespaces")
56+
_, _ = utils.Run(cmd)
57+
58+
By("removing all zones")
59+
cmd = exec.Command("kubectl", "delete", "zones", "--all", "--all-namespaces")
60+
_, _ = utils.Run(cmd)
61+
62+
By("removing all accounts")
63+
cmd = exec.Command("kubectl", "delete", "accounts", "--all", "--all-namespaces")
64+
_, _ = utils.Run(cmd)
5165

5266
By("removing manager namespace")
53-
cmd := exec.Command("kubectl", "delete", "ns", namespace)
67+
cmd = exec.Command("kubectl", "delete", "ns", namespace)
5468
_, _ = utils.Run(cmd)
5569
})
5670

@@ -60,7 +74,7 @@ var _ = Describe("controller", Ordered, func() {
6074
var err error
6175

6276
// projectimage stores the name of the image used in the example
63-
projectimage := "example.com/cloudflare-operator:v0.0.1"
77+
projectimage := "containeroo/cloudflare-operator:test"
6478

6579
By("building the manager(Operator) image")
6680
cmd := exec.Command("make", "docker-build", fmt.Sprintf("IMG=%s", projectimage))
@@ -74,6 +88,7 @@ var _ = Describe("controller", Ordered, func() {
7488
By("installing CRDs")
7589
cmd = exec.Command("make", "install")
7690
_, err = utils.Run(cmd)
91+
ExpectWithOffset(1, err).NotTo(HaveOccurred())
7792

7893
By("deploying the controller-manager")
7994
cmd = exec.Command("make", "deploy", fmt.Sprintf("IMG=%s", projectimage))
@@ -117,4 +132,74 @@ var _ = Describe("controller", Ordered, func() {
117132
EventuallyWithOffset(1, verifyControllerUp, time.Minute, time.Second).Should(Succeed())
118133
})
119134
})
135+
136+
It("should reconcile account", func() {
137+
command := "envsubst < config/samples/cloudflareoperatorio_v1_account.yaml | kubectl apply -f -"
138+
cmd := exec.Command("sh", "-c", command)
139+
_, err := utils.Run(cmd)
140+
Expect(err).NotTo(HaveOccurred())
141+
142+
Eventually(utils.VerifyObjectReady, time.Minute, time.Second).
143+
WithArguments("account", "account-sample").Should(Succeed())
144+
})
145+
146+
It("should reconcile zone", func() {
147+
cmd := exec.Command("kubectl", "apply", "-f", "config/samples/cloudflareoperatorio_v1_zone.yaml")
148+
_, err := utils.Run(cmd)
149+
Expect(err).NotTo(HaveOccurred())
150+
151+
Eventually(utils.VerifyObjectReady, time.Minute, time.Second).WithArguments("zone", "zone-sample").Should(Succeed())
152+
})
153+
154+
It("should reconcile ip", func() {
155+
cmd := exec.Command("kubectl", "apply", "-f", "config/samples/cloudflareoperatorio_v1_ip.yaml")
156+
_, err := utils.Run(cmd)
157+
Expect(err).NotTo(HaveOccurred())
158+
159+
Eventually(utils.VerifyObjectReady, time.Minute, time.Second).
160+
WithArguments("ip", "ip-sample").Should(Succeed())
161+
})
162+
163+
It("should reconcile dnsreocrd", func() {
164+
cmd := exec.Command("kubectl", "apply", "-f", "config/samples/cloudflareoperatorio_v1_dnsrecord.yaml")
165+
_, err := utils.Run(cmd)
166+
Expect(err).NotTo(HaveOccurred())
167+
168+
Eventually(utils.VerifyObjectReady, time.Minute, time.Second).
169+
WithArguments("dnsrecord", "dnsrecord-sample").Should(Succeed())
170+
})
171+
172+
It("should reconcile dnsrecord with ipRef", func() {
173+
Eventually(utils.VerifyDNSRecordContent, time.Minute, time.Second).
174+
WithArguments("dnsrecord-ip-ref-sample", "1.1.1.1").Should(Succeed())
175+
})
176+
177+
It("should reconcile dnsrecord with ipRef when ip changes", func() {
178+
cmd := exec.Command("kubectl", "patch", "ip", "ip-sample", "--type=merge", "-p", `{"spec":{"address":"9.9.9.9"}}`)
179+
_, err := utils.Run(cmd)
180+
Expect(err).NotTo(HaveOccurred())
181+
182+
Eventually(utils.VerifyDNSRecordContent, time.Minute, time.Second).
183+
WithArguments("dnsrecord-ip-ref-sample", "9.9.9.9").Should(Succeed())
184+
})
185+
186+
It("should create dnsrecord from an ingress", func() {
187+
cmd := exec.Command("kubectl", "apply", "-f", "config/samples/networking_v1_ingress.yaml")
188+
_, err := utils.Run(cmd)
189+
Expect(err).NotTo(HaveOccurred())
190+
191+
Eventually(utils.VerifyObjectReady, time.Minute, time.Second).
192+
WithArguments("dnsrecord", "ingress-containeroo-test-org").Should(Succeed())
193+
})
194+
195+
It("should update dnsrecord when ingress annotations change", func() {
196+
cmd := exec.Command(
197+
"kubectl", "-n", namespace, "patch", "ingress", "ingress-sample",
198+
"--type=merge", "-p", `{"metadata":{"annotations":{"cloudflare-operator.io/content":"145.145.145.145"}}}`)
199+
_, err := utils.Run(cmd)
200+
Expect(err).NotTo(HaveOccurred())
201+
202+
Eventually(utils.VerifyDNSRecordContent, time.Minute, time.Second).
203+
WithArguments("ingress-containeroo-test-org", "145.145.145.145").Should(Succeed())
204+
})
120205
})

0 commit comments

Comments
 (0)