@@ -1778,6 +1778,9 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
17781778configCount , jobCount , pvcCount int
17791779invalidSourceRepo , invalidSourceCluster , invalidOptions bool
17801780expectedClusterCondition * metav1.Condition
1781+ expectedEventMessage string
1782+ expectedCommandPieces []string
1783+ missingCommandPieces []string
17811784}
17821785
17831786for _ , dedicated := range []bool {true , false } {
@@ -1800,6 +1803,8 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
18001803configCount : 1 , jobCount : 1 , pvcCount : 1 ,
18011804invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : false ,
18021805expectedClusterCondition : nil ,
1806+ expectedCommandPieces : []string {"--stanza=" , "--pg1-path=" , "--repo=" , "--delta" },
1807+ missingCommandPieces : []string {"--target-action" },
18031808},
18041809}, {
18051810desc : "invalid source cluster" ,
@@ -1813,6 +1818,7 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
18131818configCount : 0 , jobCount : 0 , pvcCount : 0 ,
18141819invalidSourceRepo : false , invalidSourceCluster : true , invalidOptions : false ,
18151820expectedClusterCondition : nil ,
1821+ expectedEventMessage : "does not exist" ,
18161822},
18171823}, {
18181824desc : "invalid source repo" ,
@@ -1826,6 +1832,7 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
18261832configCount : 1 , jobCount : 0 , pvcCount : 0 ,
18271833invalidSourceRepo : true , invalidSourceCluster : false , invalidOptions : false ,
18281834expectedClusterCondition : nil ,
1835+ expectedEventMessage : "does not have a repo named" ,
18291836},
18301837}, {
18311838desc : "invalid option: --repo=" ,
@@ -1840,6 +1847,7 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
18401847configCount : 1 , jobCount : 0 , pvcCount : 1 ,
18411848invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : true ,
18421849expectedClusterCondition : nil ,
1850+ expectedEventMessage : "Option '--repo' is not allowed: please use the 'repoName' field instead." ,
18431851},
18441852}, {
18451853desc : "invalid option: --repo " ,
@@ -1854,6 +1862,7 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
18541862configCount : 1 , jobCount : 0 , pvcCount : 1 ,
18551863invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : true ,
18561864expectedClusterCondition : nil ,
1865+ expectedEventMessage : "Option '--repo' is not allowed: please use the 'repoName' field instead." ,
18571866},
18581867}, {
18591868desc : "invalid option: stanza" ,
@@ -1868,6 +1877,7 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
18681877configCount : 1 , jobCount : 0 , pvcCount : 1 ,
18691878invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : true ,
18701879expectedClusterCondition : nil ,
1880+ expectedEventMessage : "Option '--stanza' is not allowed: the operator will automatically set this option" ,
18711881},
18721882}, {
18731883desc : "invalid option: pg1-path" ,
@@ -1882,6 +1892,68 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
18821892configCount : 1 , jobCount : 0 , pvcCount : 1 ,
18831893invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : true ,
18841894expectedClusterCondition : nil ,
1895+ expectedEventMessage : "Option '--pg1-path' is not allowed: the operator will automatically set this option" ,
1896+ },
1897+ }, {
1898+ desc : "invalid option: target-action" ,
1899+ dataSource : & v1beta1.DataSource {PostgresCluster : & v1beta1.PostgresClusterDataSource {
1900+ ClusterName : "invalid-target-action-option" , RepoName : "repo1" ,
1901+ Options : []string {"--target-action" },
1902+ }},
1903+ clusterBootstrapped : false ,
1904+ sourceClusterName : "invalid-target-action-option" ,
1905+ sourceClusterRepos : []v1beta1.PGBackRestRepo {{Name : "repo1" }},
1906+ result : testResult {
1907+ configCount : 1 , jobCount : 0 , pvcCount : 1 ,
1908+ invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : true ,
1909+ expectedClusterCondition : nil ,
1910+ expectedEventMessage : "Option '--target-action' is not allowed: the operator will automatically set this option" ,
1911+ },
1912+ }, {
1913+ desc : "invalid option: link-map" ,
1914+ dataSource : & v1beta1.DataSource {PostgresCluster : & v1beta1.PostgresClusterDataSource {
1915+ ClusterName : "invalid-link-map-option" , RepoName : "repo1" ,
1916+ Options : []string {"--link-map" },
1917+ }},
1918+ clusterBootstrapped : false ,
1919+ sourceClusterName : "invalid-link-map-option" ,
1920+ sourceClusterRepos : []v1beta1.PGBackRestRepo {{Name : "repo1" }},
1921+ result : testResult {
1922+ configCount : 1 , jobCount : 0 , pvcCount : 1 ,
1923+ invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : true ,
1924+ expectedClusterCondition : nil ,
1925+ expectedEventMessage : "Option '--link-map' is not allowed: the operator will automatically set this option" ,
1926+ },
1927+ }, {
1928+ desc : "valid option: target-timeline" ,
1929+ dataSource : & v1beta1.DataSource {PostgresCluster : & v1beta1.PostgresClusterDataSource {
1930+ ClusterName : "valid-target-timeline-option" , RepoName : "repo1" ,
1931+ Options : []string {"--target-timeline=1" },
1932+ }},
1933+ clusterBootstrapped : false ,
1934+ sourceClusterName : "valid-target-timeline-option" ,
1935+ sourceClusterRepos : []v1beta1.PGBackRestRepo {{Name : "repo1" }},
1936+ result : testResult {
1937+ configCount : 1 , jobCount : 1 , pvcCount : 1 ,
1938+ invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : false ,
1939+ expectedClusterCondition : nil ,
1940+ expectedCommandPieces : []string {"--stanza=" , "--pg1-path=" , "--repo=" , "--delta" , "--target-timeline=1" },
1941+ missingCommandPieces : []string {"--target=" , "--target-action=promote" },
1942+ },
1943+ }, {
1944+ desc : "valid option: target" ,
1945+ dataSource : & v1beta1.DataSource {PostgresCluster : & v1beta1.PostgresClusterDataSource {
1946+ ClusterName : "valid-target-option" , RepoName : "repo1" ,
1947+ Options : []string {"--target=some-date" },
1948+ }},
1949+ clusterBootstrapped : false ,
1950+ sourceClusterName : "valid-target-option" ,
1951+ sourceClusterRepos : []v1beta1.PGBackRestRepo {{Name : "repo1" }},
1952+ result : testResult {
1953+ configCount : 1 , jobCount : 1 , pvcCount : 1 ,
1954+ invalidSourceRepo : false , invalidSourceCluster : false , invalidOptions : false ,
1955+ expectedClusterCondition : nil ,
1956+ expectedCommandPieces : []string {"--stanza=" , "--pg1-path=" , "--repo=" , "--delta" , "--target=some-date" , "--target-action=promote" },
18851957},
18861958}, {
18871959desc : "cluster bootstrapped init condition missing" ,
@@ -2004,6 +2076,16 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
20042076if len (restoreJobs .Items ) == 1 {
20052077assert .Assert (t , restoreJobs .Items [0 ].Labels [naming .LabelStartupInstance ] != "" )
20062078assert .Assert (t , restoreJobs .Items [0 ].Annotations [naming .PGBackRestConfigHash ] != "" )
2079+ for _ , cmd := range tc .result .expectedCommandPieces {
2080+ assert .Assert (t , cmp .Contains (
2081+ strings .Join (restoreJobs .Items [0 ].Spec .Template .Spec .Containers [0 ].Command , " " ),
2082+ cmd ))
2083+ }
2084+ for _ , cmd := range tc .result .missingCommandPieces {
2085+ assert .Assert (t , ! strings .Contains (
2086+ strings .Join (restoreJobs .Items [0 ].Spec .Template .Spec .Containers [0 ].Command , " " ),
2087+ cmd ))
2088+ }
20072089}
20082090
20092091dataPVCs := & corev1.PersistentVolumeClaimList {}
@@ -2041,7 +2123,11 @@ func TestReconcilePostgresClusterDataSource(t *testing.T) {
20412123"involvedObject.namespace" : namespace ,
20422124"reason" : "InvalidDataSource" ,
20432125})
2044- return len (events .Items ) == 1 , err
2126+ eventExists := len (events .Items ) > 0
2127+ if eventExists {
2128+ assert .Assert (t , cmp .Contains (events .Items [0 ].Message , tc .result .expectedEventMessage ))
2129+ }
2130+ return eventExists , err
20452131}))
20462132}
20472133})
0 commit comments