update getNewPgVersion and added tests
This commit is contained in:
		
							parent
							
								
									64022c9367
								
							
						
					
					
						commit
						2b1d74cb4a
					
				|  | @ -725,17 +725,13 @@ func extractPgVersionFromBinPath(binPath string, template string) (string, error | ||||||
| 	return fmt.Sprintf("%v", pgVersion), nil | 	return fmt.Sprintf("%v", pgVersion), nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (c *Cluster) getNewPgVersion(containers []v1.Container, newPgVersion string) (string, error) { | func (c *Cluster) getNewPgVersion(container v1.Container, newPgVersion string) (string, error) { | ||||||
| 	var ( | 	var ( | ||||||
| 		spiloConfiguration spiloConfiguration | 		spiloConfiguration spiloConfiguration | ||||||
| 		runningPgVersion   string | 		runningPgVersion   string | ||||||
| 		err                error | 		err                error | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
| 	for _, container := range containers { |  | ||||||
| 		if container.Name != "postgres" { |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
| 	for _, env := range container.Env { | 	for _, env := range container.Env { | ||||||
| 		if env.Name != "SPILO_CONFIGURATION" { | 		if env.Name != "SPILO_CONFIGURATION" { | ||||||
| 			continue | 			continue | ||||||
|  | @ -745,7 +741,6 @@ func (c *Cluster) getNewPgVersion(containers []v1.Container, newPgVersion string | ||||||
| 			return newPgVersion, err | 			return newPgVersion, err | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	if len(spiloConfiguration.PgLocalConfiguration) > 0 { | 	if len(spiloConfiguration.PgLocalConfiguration) > 0 { | ||||||
| 		currentBinPath := fmt.Sprintf("%v", spiloConfiguration.PgLocalConfiguration[patroniPGBinariesParameterName]) | 		currentBinPath := fmt.Sprintf("%v", spiloConfiguration.PgLocalConfiguration[patroniPGBinariesParameterName]) | ||||||
|  |  | ||||||
|  | @ -381,6 +381,135 @@ func TestCloneEnv(t *testing.T) { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func TestExtractPgVersionFromBinPath(t *testing.T) { | ||||||
|  | 	testName := "TestExtractPgVersionFromBinPath" | ||||||
|  | 	tests := []struct { | ||||||
|  | 		subTest  string | ||||||
|  | 		binPath  string | ||||||
|  | 		template string | ||||||
|  | 		expected string | ||||||
|  | 	}{ | ||||||
|  | 		{ | ||||||
|  | 			subTest:  "test current bin path with decimal against hard coded template", | ||||||
|  | 			binPath:  "/usr/lib/postgresql/9.6/bin", | ||||||
|  | 			template: pgBinariesLocationTemplate, | ||||||
|  | 			expected: "9.6", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			subTest:  "test current bin path against hard coded template", | ||||||
|  | 			binPath:  "/usr/lib/postgresql/12/bin", | ||||||
|  | 			template: pgBinariesLocationTemplate, | ||||||
|  | 			expected: "12", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			subTest:  "test alternative bin path against a matching template", | ||||||
|  | 			binPath:  "/usr/pgsql-12/bin", | ||||||
|  | 			template: "/usr/pgsql-%v/bin", | ||||||
|  | 			expected: "12", | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	for _, tt := range tests { | ||||||
|  | 		pgVersion, err := extractPgVersionFromBinPath(tt.binPath, tt.template) | ||||||
|  | 		if err != nil { | ||||||
|  | 			t.Errorf("Unexpected error: %v", err) | ||||||
|  | 		} | ||||||
|  | 		if pgVersion != tt.expected { | ||||||
|  | 			t.Errorf("%s %s: Expected version %s, have %s instead", | ||||||
|  | 				testName, tt.subTest, tt.expected, pgVersion) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestGetPgVersion(t *testing.T) { | ||||||
|  | 	testName := "TestGetPgVersion" | ||||||
|  | 	tests := []struct { | ||||||
|  | 		subTest          string | ||||||
|  | 		pgContainer      v1.Container | ||||||
|  | 		currentPgVersion string | ||||||
|  | 		newPgVersion     string | ||||||
|  | 	}{ | ||||||
|  | 		{ | ||||||
|  | 			subTest: "new version with decimal point differs from current SPILO_CONFIGURATION", | ||||||
|  | 			pgContainer: v1.Container{ | ||||||
|  | 				Name: "postgres", | ||||||
|  | 				Env: []v1.EnvVar{ | ||||||
|  | 					{ | ||||||
|  | 						Name:  "SPILO_CONFIGURATION", | ||||||
|  | 						Value: "{\"postgresql\": {\"bin_dir\": \"/usr/lib/postgresql/9.6/bin\"}}", | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			currentPgVersion: "9.6", | ||||||
|  | 			newPgVersion:     "12", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			subTest: "new version differs from current SPILO_CONFIGURATION", | ||||||
|  | 			pgContainer: v1.Container{ | ||||||
|  | 				Name: "postgres", | ||||||
|  | 				Env: []v1.EnvVar{ | ||||||
|  | 					{ | ||||||
|  | 						Name:  "SPILO_CONFIGURATION", | ||||||
|  | 						Value: "{\"postgresql\": {\"bin_dir\": \"/usr/lib/postgresql/11/bin\"}}", | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			currentPgVersion: "11", | ||||||
|  | 			newPgVersion:     "12", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			subTest: "new version is lower than the one found in current SPILO_CONFIGURATION", | ||||||
|  | 			pgContainer: v1.Container{ | ||||||
|  | 				Name: "postgres", | ||||||
|  | 				Env: []v1.EnvVar{ | ||||||
|  | 					{ | ||||||
|  | 						Name:  "SPILO_CONFIGURATION", | ||||||
|  | 						Value: "{\"postgresql\": {\"bin_dir\": \"/usr/lib/postgresql/12/bin\"}}", | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			currentPgVersion: "12", | ||||||
|  | 			newPgVersion:     "11", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			subTest: "new version is the same like in the current SPILO_CONFIGURATION", | ||||||
|  | 			pgContainer: v1.Container{ | ||||||
|  | 				Name: "postgres", | ||||||
|  | 				Env: []v1.EnvVar{ | ||||||
|  | 					{ | ||||||
|  | 						Name:  "SPILO_CONFIGURATION", | ||||||
|  | 						Value: "{\"postgresql\": {\"bin_dir\": \"/usr/lib/postgresql/12/bin\"}}", | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			currentPgVersion: "12", | ||||||
|  | 			newPgVersion:     "12", | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var cluster = New( | ||||||
|  | 		Config{ | ||||||
|  | 			OpConfig: config.Config{ | ||||||
|  | 				ProtectedRoles: []string{"admin"}, | ||||||
|  | 				Auth: config.Auth{ | ||||||
|  | 					SuperUsername:       superUserName, | ||||||
|  | 					ReplicationUsername: replicationUserName, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, k8sutil.KubernetesClient{}, acidv1.Postgresql{}, logger) | ||||||
|  | 
 | ||||||
|  | 	for _, tt := range tests { | ||||||
|  | 		pgVersion, err := cluster.getNewPgVersion(tt.pgContainer, tt.newPgVersion) | ||||||
|  | 		if err != nil { | ||||||
|  | 			t.Errorf("Unexpected error: %v", err) | ||||||
|  | 		} | ||||||
|  | 		if pgVersion != tt.currentPgVersion { | ||||||
|  | 			t.Errorf("%s %s: Expected version %s, have %s instead", | ||||||
|  | 				testName, tt.subTest, tt.currentPgVersion, pgVersion) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func TestSecretVolume(t *testing.T) { | func TestSecretVolume(t *testing.T) { | ||||||
| 	testName := "TestSecretVolume" | 	testName := "TestSecretVolume" | ||||||
| 	tests := []struct { | 	tests := []struct { | ||||||
|  |  | ||||||
|  | @ -286,11 +286,16 @@ func (c *Cluster) syncStatefulSet() error { | ||||||
| 		c.Statefulset = sset | 		c.Statefulset = sset | ||||||
| 
 | 
 | ||||||
| 		// check if there is no Postgres version mismatch
 | 		// check if there is no Postgres version mismatch
 | ||||||
| 		pgVersion, err := c.getNewPgVersion(c.Statefulset.Spec.Template.Spec.Containers, c.Spec.PostgresqlParam.PgVersion) | 		for _, container := range c.Statefulset.Spec.Template.Spec.Containers { | ||||||
|  | 			if container.Name != "postgres" { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			pgVersion, err := c.getNewPgVersion(container, c.Spec.PostgresqlParam.PgVersion) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return fmt.Errorf("could not parse current Postgres version: %v", err) | 				return fmt.Errorf("could not parse current Postgres version: %v", err) | ||||||
| 			} | 			} | ||||||
| 			c.Spec.PostgresqlParam.PgVersion = pgVersion | 			c.Spec.PostgresqlParam.PgVersion = pgVersion | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 		desiredSS, err := c.generateStatefulSet(&c.Spec) | 		desiredSS, err := c.generateStatefulSet(&c.Spec) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue