@@ -1777,6 +1777,9 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
17771777 configCount , jobCount , pvcCount int
17781778 invalidSourceRepo , invalidSourceCluster , invalidOptions bool
17791779 expectedClusterCondition * metav1.Condition
1780+ expectedEventMessage string
1781+ expectedCommandPieces []string
1782+ missingCommandPieces []string
17801783 }
17811784
17821785 for _ , dedicated := range []bool {true , false } {
@@ -1799,6 +1802,8 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
17991802 configCount : 1 , jobCount : 1 , pvcCount : 1 ,
18001803 invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : false ,
18011804 expectedClusterCondition : nil ,
1805+ expectedCommandPieces : []string {"--stanza=" , "--pg1-path=" , "--repo=" , "--delta" },
1806+ missingCommandPieces : []string {"--target-action" },
18021807 },
18031808 }, {
18041809 desc : "invalid source cluster" ,
@@ -1812,6 +1817,7 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
18121817 configCount : 0 , jobCount : 0 , pvcCount : 0 ,
18131818 invalidSourceRepo : false , invalidSourceCluster : true , invalidOptions : false ,
18141819 expectedClusterCondition : nil ,
1820+ expectedEventMessage : "does not exist" ,
18151821 },
18161822 }, {
18171823 desc : "invalid source repo" ,
@@ -1825,6 +1831,7 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
18251831 configCount : 1 , jobCount : 0 , pvcCount : 0 ,
18261832 invalidSourceRepo : true , invalidSourceCluster : false , invalidOptions : false ,
18271833 expectedClusterCondition : nil ,
1834+ expectedEventMessage : "does not have a repo named" ,
18281835 },
18291836 }, {
18301837 desc : "invalid option: --repo=" ,
@@ -1839,6 +1846,7 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
18391846 configCount : 1 , jobCount : 0 , pvcCount : 1 ,
18401847 invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : true ,
18411848 expectedClusterCondition : nil ,
1849+ expectedEventMessage : "Option '--repo' is not allowed: please use the 'repoName' field instead." ,
18421850 },
18431851 }, {
18441852 desc : "invalid option: --repo " ,
@@ -1853,6 +1861,7 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
18531861 configCount : 1 , jobCount : 0 , pvcCount : 1 ,
18541862 invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : true ,
18551863 expectedClusterCondition : nil ,
1864+ expectedEventMessage : "Option '--repo' is not allowed: please use the 'repoName' field instead." ,
18561865 },
18571866 }, {
18581867 desc : "invalid option: stanza" ,
@@ -1867,6 +1876,7 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
18671876 configCount : 1 , jobCount : 0 , pvcCount : 1 ,
18681877 invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : true ,
18691878 expectedClusterCondition : nil ,
1879+ expectedEventMessage : "Option '--stanza' is not allowed: the operator will automatically set this option" ,
18701880 },
18711881 }, {
18721882 desc : "invalid option: pg1-path" ,
@@ -1881,6 +1891,68 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
18811891 configCount : 1 , jobCount : 0 , pvcCount : 1 ,
18821892 invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : true ,
18831893 expectedClusterCondition : nil ,
1894+ expectedEventMessage : "Option '--pg1-path' is not allowed: the operator will automatically set this option" ,
1895+ },
1896+ }, {
1897+ desc : "invalid option: target-action" ,
1898+ dataSource : & v1beta1.DataSource {PostgresCluster : & v1beta1.PostgresClusterDataSource {
1899+ ClusterName : "invalid-target-action-option" , RepoName : "repo1" ,
1900+ Options : []string {"--target-action" },
1901+ }},
1902+ clusterBootstrapped : false ,
1903+ sourceClusterName : "invalid-target-action-option" ,
1904+ sourceClusterRepos : []v1beta1.PGBackRestRepo {{Name : "repo1" }},
1905+ result : testResult {
1906+ configCount : 1 , jobCount : 0 , pvcCount : 1 ,
1907+ invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : true ,
1908+ expectedClusterCondition : nil ,
1909+ expectedEventMessage : "Option '--target-action' is not allowed: the operator will automatically set this option" ,
1910+ },
1911+ }, {
1912+ desc : "invalid option: link-map" ,
1913+ dataSource : & v1beta1.DataSource {PostgresCluster : & v1beta1.PostgresClusterDataSource {
1914+ ClusterName : "invalid-link-map-option" , RepoName : "repo1" ,
1915+ Options : []string {"--link-map" },
1916+ }},
1917+ clusterBootstrapped : false ,
1918+ sourceClusterName : "invalid-link-map-option" ,
1919+ sourceClusterRepos : []v1beta1.PGBackRestRepo {{Name : "repo1" }},
1920+ result : testResult {
1921+ configCount : 1 , jobCount : 0 , pvcCount : 1 ,
1922+ invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : true ,
1923+ expectedClusterCondition : nil ,
1924+ expectedEventMessage : "Option '--link-map' is not allowed: the operator will automatically set this option" ,
1925+ },
1926+ }, {
1927+ desc : "valid option: target-timeline" ,
1928+ dataSource : & v1beta1.DataSource {PostgresCluster : & v1beta1.PostgresClusterDataSource {
1929+ ClusterName : "valid-target-timeline-option" , RepoName : "repo1" ,
1930+ Options : []string {"--target-timeline=1" },
1931+ }},
1932+ clusterBootstrapped : false ,
1933+ sourceClusterName : "valid-target-timeline-option" ,
1934+ sourceClusterRepos : []v1beta1.PGBackRestRepo {{Name : "repo1" }},
1935+ result : testResult {
1936+ configCount : 1 , jobCount : 1 , pvcCount : 1 ,
1937+ invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : false ,
1938+ expectedClusterCondition : nil ,
1939+ expectedCommandPieces : []string {"--stanza=" , "--pg1-path=" , "--repo=" , "--delta" , "--target-timeline=1" },
1940+ missingCommandPieces : []string {"--target=" , "--target-action=promote" },
1941+ },
1942+ }, {
1943+ desc : "valid option: target" ,
1944+ dataSource : & v1beta1.DataSource {PostgresCluster : & v1beta1.PostgresClusterDataSource {
1945+ ClusterName : "valid-target-option" , RepoName : "repo1" ,
1946+ Options : []string {"--target=some-date" },
1947+ }},
1948+ clusterBootstrapped : false ,
1949+ sourceClusterName : "valid-target-option" ,
1950+ sourceClusterRepos : []v1beta1.PGBackRestRepo {{Name : "repo1" }},
1951+ result : testResult {
1952+ configCount : 1 , jobCount : 1 , pvcCount : 1 ,
1953+ invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : false ,
1954+ expectedClusterCondition : nil ,
1955+ expectedCommandPieces : []string {"--stanza=" , "--pg1-path=" , "--repo=" , "--delta" , "--target=some-date" , "--target-action=promote" },
18841956 },
18851957 }, {
18861958 desc : "cluster bootstrapped init condition missing" ,
@@ -2003,6 +2075,16 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
20032075 if len (restoreJobs .Items ) == 1 {
20042076 assert .Assert (t , restoreJobs .Items [0 ].Labels [naming .LabelStartupInstance ] != "" )
20052077 assert .Assert (t , restoreJobs .Items [0 ].Annotations [naming .PGBackRestConfigHash ] != "" )
2078+ for _ , cmd := range tc .result .expectedCommandPieces {
2079+ assert .Assert (t , cmp .Contains (
2080+ strings .Join (restoreJobs .Items [0 ].Spec .Template .Spec .Containers [0 ].Command , " " ),
2081+ cmd ))
2082+ }
2083+ for _ , cmd := range tc .result .missingCommandPieces {
2084+ assert .Assert (t , ! strings .Contains (
2085+ strings .Join (restoreJobs .Items [0 ].Spec .Template .Spec .Containers [0 ].Command , " " ),
2086+ cmd ))
2087+ }
20062088 }
20072089
20082090 dataPVCs := & corev1.PersistentVolumeClaimList {}
@@ -2040,7 +2122,11 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
20402122 "involvedObject.namespace" : namespace ,
20412123 "reason" : "InvalidDataSource" ,
20422124 })
2043- return len (events .Items ) == 1 , err
2125+ eventExists := len (events .Items ) > 0
2126+ if eventExists {
2127+ assert .Assert (t , cmp .Contains (events .Items [0 ].Message , tc .result .expectedEventMessage ))
2128+ }
2129+ return eventExists , err
20442130 }))
20452131 }
20462132 })
0 commit comments