@@ -1509,3 +1509,106 @@ func TestGenerateCapabilities(t *testing.T) {
15091509 }
15101510 }
15111511}
1512+
1513+ func TestVolumeSelector (t * testing.T ) {
1514+ testName := "TestVolumeSelector"
1515+ makeSpec := func (volume acidv1.Volume ) acidv1.PostgresSpec {
1516+ return acidv1.PostgresSpec {
1517+ TeamID : "myapp" ,
1518+ NumberOfInstances : 0 ,
1519+ Resources : acidv1.Resources {
1520+ ResourceRequests : acidv1.ResourceDescription {CPU : "1" , Memory : "10" },
1521+ ResourceLimits : acidv1.ResourceDescription {CPU : "1" , Memory : "10" },
1522+ },
1523+ Volume : volume ,
1524+ }
1525+ }
1526+
1527+ tests := []struct {
1528+ subTest string
1529+ volume acidv1.Volume
1530+ wantSelector * metav1.LabelSelector
1531+ }{
1532+ {
1533+ subTest : "PVC template has no selector" ,
1534+ volume : acidv1.Volume {
1535+ Size : "1G" ,
1536+ },
1537+ wantSelector : nil ,
1538+ },
1539+ {
1540+ subTest : "PVC template has simple label selector" ,
1541+ volume : acidv1.Volume {
1542+ Size : "1G" ,
1543+ Selector : & metav1.LabelSelector {
1544+ MatchLabels : map [string ]string {"environment" : "unittest" },
1545+ },
1546+ },
1547+ wantSelector : & metav1.LabelSelector {
1548+ MatchLabels : map [string ]string {"environment" : "unittest" },
1549+ },
1550+ },
1551+ {
1552+ subTest : "PVC template has full selector" ,
1553+ volume : acidv1.Volume {
1554+ Size : "1G" ,
1555+ Selector : & metav1.LabelSelector {
1556+ MatchLabels : map [string ]string {"environment" : "unittest" },
1557+ MatchExpressions : []metav1.LabelSelectorRequirement {
1558+ {
1559+ Key : "flavour" ,
1560+ Operator : metav1 .LabelSelectorOpIn ,
1561+ Values : []string {"banana" , "chocolate" },
1562+ },
1563+ },
1564+ },
1565+ },
1566+ wantSelector : & metav1.LabelSelector {
1567+ MatchLabels : map [string ]string {"environment" : "unittest" },
1568+ MatchExpressions : []metav1.LabelSelectorRequirement {
1569+ {
1570+ Key : "flavour" ,
1571+ Operator : metav1 .LabelSelectorOpIn ,
1572+ Values : []string {"banana" , "chocolate" },
1573+ },
1574+ },
1575+ },
1576+ },
1577+ }
1578+
1579+ cluster := New (
1580+ Config {
1581+ OpConfig : config.Config {
1582+ PodManagementPolicy : "ordered_ready" ,
1583+ ProtectedRoles : []string {"admin" },
1584+ Auth : config.Auth {
1585+ SuperUsername : superUserName ,
1586+ ReplicationUsername : replicationUserName ,
1587+ },
1588+ },
1589+ }, k8sutil.KubernetesClient {}, acidv1.Postgresql {}, logger , eventRecorder )
1590+
1591+ for _ , tt := range tests {
1592+ pgSpec := makeSpec (tt .volume )
1593+ sts , err := cluster .generateStatefulSet (& pgSpec )
1594+ if err != nil {
1595+ t .Fatalf ("%s %s: no statefulset created %v" , testName , tt .subTest , err )
1596+ }
1597+
1598+ volIdx := len (sts .Spec .VolumeClaimTemplates )
1599+ for i , ct := range sts .Spec .VolumeClaimTemplates {
1600+ if ct .ObjectMeta .Name == constants .DataVolumeName {
1601+ volIdx = i
1602+ break
1603+ }
1604+ }
1605+ if volIdx == len (sts .Spec .VolumeClaimTemplates ) {
1606+ t .Errorf ("%s %s: no datavolume found in sts" , testName , tt .subTest )
1607+ }
1608+
1609+ selector := sts .Spec .VolumeClaimTemplates [volIdx ].Spec .Selector
1610+ if ! reflect .DeepEqual (selector , tt .wantSelector ) {
1611+ t .Errorf ("%s %s: expected: %#v but got: %#v" , testName , tt .subTest , tt .wantSelector , selector )
1612+ }
1613+ }
1614+ }
0 commit comments