Skip to content

Commit 108cfcf

Browse files
Merge pull request #247 from swghosh/refactor/template-for-testdata
Refactor `test/e2e/testdata` to use go template based replacements
2 parents 91e24b4 + 63e232e commit 108cfcf

File tree

6 files changed

+83
-41
lines changed

6 files changed

+83
-41
lines changed

test/e2e/certificates_test.go

Lines changed: 22 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package e2e
55

66
import (
77
"context"
8+
"fmt"
89
"os"
910
"path/filepath"
1011
"time"
@@ -508,29 +509,22 @@ var _ = Describe("ACME Certificate", Ordered, func() {
508509
By("Creating new certificate ClusterIssuer")
509510
// The name is defined by the testdata YAML file clusterissuer_gcp.yaml
510511
clusterIssuerName := "acme-dns01-clouddns-ambient"
511-
replaceStrMap := map[string]string{
512-
"PROJECT_ID": gcpProjectId,
513-
}
514-
loadFileAndReplaceStr := func(fileName string) ([]byte, error) {
515-
fileContentsStr, err := replaceStrInFile(replaceStrMap, fileName)
516-
return []byte(fileContentsStr), err
517-
}
518-
loader.CreateFromFile(loadFileAndReplaceStr, filepath.Join("testdata", "acme", "clusterissuer_gcp.yaml"), "")
512+
loader.CreateFromFile(AssetFunc(testassets.ReadFile).WithTemplateValues(
513+
IssuerConfig{
514+
GCPProjectID: gcpProjectId,
515+
},
516+
), filepath.Join("testdata", "acme", "clusterissuer_gcp.yaml"), "")
519517
defer certmanagerClient.CertmanagerV1().ClusterIssuers().Delete(ctx, clusterIssuerName, metav1.DeleteOptions{})
520518

521519
By("Creating new certificate")
522520
randomString := randomStr(3)
523-
replaceStrMap = map[string]string{
524-
"RANDOM_STR": randomString,
525-
"DNS_NAME": baseDomain,
526-
}
527-
loadFileAndReplaceStr = func(fileName string) ([]byte, error) {
528-
fileContentsStr, err := replaceStrInFile(replaceStrMap, fileName)
529-
return []byte(fileContentsStr), err
530-
}
531521
// The name is defined by the testdata YAML file certificate_gcp.yaml
532522
certName := "cert-with-acme-dns01-clouddns-ambient"
533-
loader.CreateFromFile(loadFileAndReplaceStr, filepath.Join("testdata", "acme", "certificate_gcp.yaml"), ns.Name)
523+
loader.CreateFromFile(AssetFunc(testassets.ReadFile).WithTemplateValues(
524+
CertificateConfig{
525+
DNSName: fmt.Sprintf("%s.%s", randomString, baseDomain),
526+
},
527+
), filepath.Join("testdata", "acme", "certificate_gcp.yaml"), ns.Name)
534528

535529
By("Waiting for certificate to get ready")
536530
err = waitForCertificateReadiness(ctx, certName, ns.Name)
@@ -559,29 +553,23 @@ var _ = Describe("ACME Certificate", Ordered, func() {
559553
By("creating new certificate ClusterIssuer with IBM Cloud CIS webhook solver")
560554
randomString := randomStr(3)
561555
clusterIssuerName := "letsencrypt-dns01-explicit-ic"
562-
replaceStrMap := map[string]string{
563-
"CIS_CRN": cisCRN,
564-
}
565-
loadFileAndReplaceStr := func(fileName string) ([]byte, error) {
566-
fileContentsStr, err := replaceStrInFile(replaceStrMap, fileName)
567-
return []byte(fileContentsStr), err
568-
}
569-
loader.CreateFromFile(loadFileAndReplaceStr, filepath.Join("testdata", "acme", "clusterissuer_ibmcis.yaml"), "")
556+
loader.CreateFromFile(AssetFunc(testassets.ReadFile).WithTemplateValues(
557+
IssuerConfig{
558+
IBMCloudCISCRN: cisCRN,
559+
},
560+
), filepath.Join("testdata", "acme", "clusterissuer_ibmcis.yaml"), "")
570561
defer certmanagerClient.CertmanagerV1().ClusterIssuers().Delete(ctx, clusterIssuerName, metav1.DeleteOptions{})
571562

572563
By("creating new certificate")
573564
// The name is defined by the testdata YAML file certificate_ibmcis.yaml
574565
certDomain := "adwie." + appsDomain // acronym for "ACME dns-01 ibmcloud Webhook Explicit", short naming to pass dns name validation
575566
certName := "letsencrypt-cert-ic"
576-
replaceStrMap = map[string]string{
577-
"RANDOM_STR": randomString,
578-
"DNS_NAME": certDomain,
579-
}
580-
loadFileAndReplaceStr = func(fileName string) ([]byte, error) {
581-
fileContentsStr, err := replaceStrInFile(replaceStrMap, fileName)
582-
return []byte(fileContentsStr), err
583-
}
584-
loader.CreateFromFile(loadFileAndReplaceStr, filepath.Join("testdata", "acme", "certificate_ibmcis.yaml"), ns.Name)
567+
loader.CreateFromFile(
568+
AssetFunc(testassets.ReadFile).WithTemplateValues(
569+
CertificateConfig{
570+
DNSName: certDomain,
571+
},
572+
), filepath.Join("testdata", "acme", "certificate_ibmcis.yaml"), ns.Name)
585573

586574
By("waiting for certificate to get ready")
587575
err := waitForCertificateReadiness(ctx, certName, ns.Name)

test/e2e/config_template.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
//go:build e2e
2+
// +build e2e
3+
4+
package e2e
5+
6+
import (
7+
"bytes"
8+
"text/template"
9+
)
10+
11+
// IssuerConfig customizes fields in the issuer spec
12+
type IssuerConfig struct {
13+
GCPProjectID string
14+
IBMCloudCISCRN string
15+
}
16+
17+
// Certificate customize fields in the cert spec
18+
type CertificateConfig struct {
19+
DNSName string
20+
}
21+
22+
// replaceWithTemplate puts field values from a template struct
23+
func replaceWithTemplate(sourceFileContents string, templatedValues any) ([]byte, error) {
24+
tmpl, err := template.New("template").Parse(sourceFileContents)
25+
if err != nil {
26+
return nil, err
27+
}
28+
29+
var doc bytes.Buffer
30+
err = tmpl.Execute(&doc, templatedValues)
31+
if err != nil {
32+
return nil, err
33+
}
34+
35+
return doc.Bytes(), nil
36+
}
37+
38+
// AssetFunc wraps the asset load function (used in dynamic resource loader),
39+
// and extends it with a hook to allow template value replacement.
40+
type AssetFunc func(name string) ([]byte, error)
41+
42+
// WithTemplateValues is a wrapper for using `replaceWithTemplate` with an `AssetFunc`,
43+
// i.e. chains the loading -> modification.
44+
func (sourceFn AssetFunc) WithTemplateValues(templatedValues any) AssetFunc {
45+
x := func(name string) ([]byte, error) {
46+
bytes, err := sourceFn(name)
47+
if err != nil {
48+
return nil, err
49+
}
50+
51+
fileContentsStr := string(bytes)
52+
return replaceWithTemplate(fileContentsStr, templatedValues)
53+
}
54+
return x
55+
}

test/e2e/testdata/acme/certificate_gcp.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ spec:
99
kind: ClusterIssuer
1010
name: acme-dns01-clouddns-ambient
1111
dnsNames:
12-
- RANDOM_STR.DNS_NAME
13-
- '*.RANDOM_STR.DNS_NAME'
12+
- {{.DNSName}}
13+
- '*.{{.DNSName}}'

test/e2e/testdata/acme/certificate_ibmcis.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ metadata:
44
name: letsencrypt-cert-ic
55
spec:
66
dnsNames:
7-
- RANDOM_STR.DNS_NAME
8-
- '*.RANDOM_STR.DNS_NAME'
7+
- {{.DNSName}}
8+
- '*.{{.DNSName}}'
99
issuerRef:
1010
name: letsencrypt-dns01-explicit-ic
1111
kind: ClusterIssuer

test/e2e/testdata/acme/clusterissuer_gcp.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ spec:
1212
- dns01:
1313
cloudDNS:
1414
# The ID of the GCP project
15-
project: PROJECT_ID
15+
project: {{.GCPProjectId}}

test/e2e/testdata/acme/clusterissuer_ibmcis.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,4 @@ spec:
1717
name: ibmcis-credentials
1818
key: api-token
1919
cisCRN:
20-
- "CIS_CRN"
21-
20+
- "{{.IBMCloudCISCRN}}"

0 commit comments

Comments
 (0)