Skip to content

Commit dc59f0f

Browse files
wadlejitendraJitendra Wadlelitaocdl
authored
test: add E2E test using endpoint CA with Azurite
Co-authored-by: Jitendra Wadle <jitendrawadle@Laptop566-pn-in.local> Co-authored-by: Tao <tao.li@enterprisedb.com>
1 parent 0a67762 commit dc59f0f

File tree

8 files changed

+99
-23
lines changed

8 files changed

+99
-23
lines changed

tests/e2e/asserts_test.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,10 +1424,6 @@ func prepareClusterForPITROnAzureBlob(namespace, clusterName, backupSampleFile,
14241424
}
14251425

14261426
func prepareClusterOnAzurite(namespace, clusterName, clusterSampleFile string) {
1427-
// Create a cluster in a namespace we'll delete after the test
1428-
err := env.CreateNamespace(namespace)
1429-
Expect(err).ToNot(HaveOccurred())
1430-
14311427
By("creating the Azurite storage credentials", func() {
14321428
AssertStorageCredentialsAreCreatedOnAzurite(namespace)
14331429
})

tests/e2e/backup_restore_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,8 @@ var _ = Describe("Backup and restore", func() {
449449
scheduledBackupImmediateSampleFile = fixturesDir +
450450
"/backup/scheduled_backup_immediate/scheduled-backup-immediate-azurite.yaml"
451451
backupFile = fixturesDir + "/backup/azurite/backup.yaml"
452+
caSecName = "azurite-ca-secret"
453+
tlsSecName = "azurite-tls-secret"
452454
)
453455

454456
BeforeAll(func() {
@@ -461,6 +463,24 @@ var _ = Describe("Backup and restore", func() {
461463
clusterName, err := env.GetResourceNameFromYAML(azuriteBlobSampleFile)
462464
Expect(err).ToNot(HaveOccurred())
463465

466+
// Create a cluster in a namespace we'll delete after the test
467+
err = env.CreateNamespace(namespace)
468+
Expect(err).ToNot(HaveOccurred())
469+
470+
By("creating ca and tls certificate secrets", func() {
471+
// create CA certificates
472+
_, caPair := testUtils.CreateSecretCA(namespace, clusterName, caSecName, true, env)
473+
474+
// sign and create secret using CA certificate and key
475+
serverPair, err := caPair.CreateAndSignPair("azurite", certs.CertTypeServer,
476+
[]string{"azurite.internal.mydomain.net, azurite.default.svc, azurite.default,"},
477+
)
478+
Expect(err).ToNot(HaveOccurred())
479+
serverSecret := serverPair.GenerateCertificateSecret(namespace, tlsSecName)
480+
err = env.Client.Create(env.Ctx, serverSecret)
481+
Expect(err).ToNot(HaveOccurred())
482+
})
483+
464484
// Setup Azurite and az cli along with Postgresql cluster
465485
prepareClusterBackupOnAzurite(namespace, clusterName, azuriteBlobSampleFile, backupFile, tableName)
466486
})
@@ -547,6 +567,8 @@ var _ = Describe("Clusters Recovery From Barman Object Store", func() {
547567
sourceBackupFileAzureSAS = fixturesBackupDir + "backup-azure-blob-sas.yaml"
548568
sourceBackupFileAzurePITRSAS = fixturesBackupDir + "backup-azure-blob-pitr-sas.yaml"
549569
level = tests.High
570+
caSecName = "azurite-ca-secret"
571+
tlsSecName = "azurite-tls-secret"
550572
)
551573

552574
var namespace, clusterName, azStorageAccount, azStorageKey string
@@ -838,6 +860,24 @@ var _ = Describe("Clusters Recovery From Barman Object Store", func() {
838860
clusterName, err := env.GetResourceNameFromYAML(azuriteBlobSampleFile)
839861
Expect(err).ToNot(HaveOccurred())
840862

863+
// Create a cluster in a namespace we'll delete after the test
864+
err = env.CreateNamespace(namespace)
865+
Expect(err).ToNot(HaveOccurred())
866+
867+
By("creating ca and tls certificate secrets", func() {
868+
// create CA certificates
869+
_, caPair := testUtils.CreateSecretCA(namespace, clusterName, caSecName, true, env)
870+
871+
// sign and create secret using CA certificate and key
872+
serverPair, err := caPair.CreateAndSignPair("azurite", certs.CertTypeServer,
873+
[]string{"azurite.internal.mydomain.net, azurite.default.svc, azurite.default,"},
874+
)
875+
Expect(err).ToNot(HaveOccurred())
876+
serverSecret := serverPair.GenerateCertificateSecret(namespace, tlsSecName)
877+
err = env.Client.Create(env.Ctx, serverSecret)
878+
Expect(err).ToNot(HaveOccurred())
879+
})
880+
841881
// Setup Azurite and az cli along with PostgreSQL cluster
842882
prepareClusterBackupOnAzurite(namespace, clusterName, azuriteBlobSampleFile, backupFileAzurite, tableName)
843883
})

tests/e2e/fixtures/backup/azurite/az-cli.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# In az cli client pod we need to export env 'REQUESTS_CA_BUNDLE' variable with value "/etc/ssl/certs/rootCA.pem"
2+
# for custom CA bundle to connect azurite server
13
apiVersion: v1
24
kind: Pod
35
metadata:
@@ -19,3 +21,15 @@ spec:
1921
secretKeyRef:
2022
name: azurite
2123
key: AZURE_CONNECTION_STRING
24+
- name: REQUESTS_CA_BUNDLE
25+
value: "/etc/ssl/certs/rootCA.pem"
26+
volumeMounts:
27+
- name: cert
28+
mountPath: "/etc/ssl/certs"
29+
volumes:
30+
- name: cert
31+
secret:
32+
secretName: azurite-ca-secret
33+
items:
34+
- key: ca.crt
35+
path: rootCA.pem
Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# We need pass custom --cert and --key in .pem format to start azurite as https mode
2+
# refer "https://github.com/Azure/Azurite#https-setup"
13
apiVersion: apps/v1
24
kind: Deployment
35
metadata:
@@ -18,19 +20,31 @@ spec:
1820
app: azurite
1921
spec:
2022
containers:
21-
- image: mcr.microsoft.com/azure-storage/azurite
22-
name: azurite
23-
env:
24-
- name: AZURITE_ACCOUNTS
25-
valueFrom:
26-
secretKeyRef:
27-
name: azurite
28-
key: AZURITE_ACCOUNTS
29-
ports:
30-
- containerPort: 10000
31-
volumeMounts:
32-
- mountPath: /data
33-
name: data-volume
23+
- image: mcr.microsoft.com/azure-storage/azurite
24+
name: azurite
25+
command: ["azurite"]
26+
args: ["-l", "/data", "--cert", "/etc/ssl/certs/azurite.pem", "--key", "/etc/ssl/certs/azurite-key.pem", "--oauth", "basic", "--blobHost", "0.0.0.0"]
27+
env:
28+
- name: AZURITE_ACCOUNTS
29+
valueFrom:
30+
secretKeyRef:
31+
name: azurite
32+
key: AZURITE_ACCOUNTS
33+
ports:
34+
- containerPort: 10000
35+
volumeMounts:
36+
- mountPath: /data
37+
name: data-volume
38+
- name: cert
39+
mountPath: "/etc/ssl/certs"
3440
volumes:
35-
- name: data-volume
36-
emptyDir: { }
41+
- name: data-volume
42+
emptyDir: { }
43+
- name: cert
44+
secret:
45+
secretName: azurite-tls-secret
46+
items:
47+
- key: tls.crt
48+
path: azurite.pem
49+
- key: tls.key
50+
path: azurite-key.pem

tests/e2e/fixtures/backup/azurite/azurite-secret.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
apiVersion: v1
22
stringData:
33
AZURITE_ACCOUNTS: storageaccountname:c3RvcmFnZWFjY291bnRrZXk=
4-
AZURE_CONNECTION_STRING: DefaultEndpointsProtocol=http;AccountName=storageaccountname;AccountKey=c3RvcmFnZWFjY291bnRrZXk=;BlobEndpoint=http://azurite:10000/storageaccountname;
4+
AZURE_CONNECTION_STRING: DefaultEndpointsProtocol=https;AccountName=storageaccountname;AccountKey=c3RvcmFnZWFjY291bnRrZXk=;BlobEndpoint=https://azurite:10000/storageaccountname;
55
kind: Secret
66
metadata:
77
creationTimestamp: null

tests/e2e/fixtures/backup/azurite/cluster-backup.yaml.template

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ spec:
1313
# Backup properties
1414
backup:
1515
barmanObjectStore:
16-
destinationPath: http://azurite:10000/storageaccountname/pg-backup-azurite
16+
destinationPath: https://azurite:10000/storageaccountname/pg-backup-azurite
17+
endpointCA:
18+
key: ca.crt
19+
name: azurite-ca-secret
1720
azureCredentials:
1821
connectionString:
1922
name: azurite

tests/e2e/fixtures/backup/recovery_external_clusters/external-clusters-azurite-03.yaml.template

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@ spec:
3434
externalClusters:
3535
- name: pg-backup-azurite
3636
barmanObjectStore:
37-
destinationPath: http://azurite:10000/storageaccountname/pg-backup-azurite
37+
destinationPath: https://azurite:10000/storageaccountname/pg-backup-azurite
38+
endpointCA:
39+
key: ca.crt
40+
name: azurite-ca-secret
3841
azureCredentials:
3942
connectionString:
4043
name: azurite

tests/utils/backup.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ func CreateClusterFromExternalClusterBackupWithPITROnAzurite(
267267
targetTime string,
268268
env *TestingEnvironment) error {
269269
storageClassName := os.Getenv("E2E_DEFAULT_STORAGE_CLASS")
270-
DestinationPath := fmt.Sprintf("http://azurite:10000/storageaccountname/%v", sourceClusterName)
270+
DestinationPath := fmt.Sprintf("https://azurite:10000/storageaccountname/%v", sourceClusterName)
271271

272272
restoreCluster := &apiv1.Cluster{
273273
ObjectMeta: v1.ObjectMeta{
@@ -308,6 +308,12 @@ func CreateClusterFromExternalClusterBackupWithPITROnAzurite(
308308
Name: sourceClusterName,
309309
BarmanObjectStore: &apiv1.BarmanObjectStoreConfiguration{
310310
DestinationPath: DestinationPath,
311+
EndpointCA: &apiv1.SecretKeySelector{
312+
LocalObjectReference: apiv1.LocalObjectReference{
313+
Name: "azurite-ca-secret",
314+
},
315+
Key: "ca.crt",
316+
},
311317
AzureCredentials: &apiv1.AzureCredentials{
312318
ConnectionString: &apiv1.SecretKeySelector{
313319
LocalObjectReference: apiv1.LocalObjectReference{

0 commit comments

Comments
 (0)