add unit tests
This commit is contained in:
		
							parent
							
								
									901f4108c4
								
							
						
					
					
						commit
						e8a4495de4
					
				|  | @ -13,6 +13,7 @@ import ( | |||
| 	"github.com/zalando/postgres-operator/pkg/util/k8sutil" | ||||
| 	"github.com/zalando/postgres-operator/pkg/util/teams" | ||||
| 	v1 "k8s.io/api/core/v1" | ||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
|  | @ -32,7 +33,7 @@ var cl = New( | |||
| 		}, | ||||
| 	}, | ||||
| 	k8sutil.NewMockKubernetesClient(), | ||||
| 	acidv1.Postgresql{}, | ||||
| 	acidv1.Postgresql{ObjectMeta: metav1.ObjectMeta{Name: "acid-test", Namespace: "test"}}, | ||||
| 	logger, | ||||
| ) | ||||
| 
 | ||||
|  | @ -756,3 +757,89 @@ func TestInitSystemUsers(t *testing.T) { | |||
| 		t.Errorf("%s, System users are not allowed to be a connection pool user", testName) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestPreparedDatabases(t *testing.T) { | ||||
| 	testName := "TestDefaultPreparedDatabase" | ||||
| 
 | ||||
| 	cl.Spec.PreparedDatabases = map[string]acidv1.PreparedDatabase{} | ||||
| 	cl.initPreparedDatabaseRoles() | ||||
| 
 | ||||
| 	for _, role := range []string{"acid_test_owner", "acid_test_reader", "acid_test_writer", | ||||
| 		"acid_test_data_owner", "acid_test_data_reader", "acid_test_data_writer"} { | ||||
| 		if _, exist := cl.pgUsers[role]; !exist { | ||||
| 			t.Errorf("%s, default role %q for prepared database not present", testName, role) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	testName = "TestPreparedDatabaseWithSchema" | ||||
| 
 | ||||
| 	cl.Spec.PreparedDatabases = map[string]acidv1.PreparedDatabase{ | ||||
| 		"foo": { | ||||
| 			DefaultUsers: true, | ||||
| 			PreparedSchemas: map[string]acidv1.PreparedSchema{ | ||||
| 				"bar": { | ||||
| 					DefaultUsers: true, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| 	cl.initPreparedDatabaseRoles() | ||||
| 
 | ||||
| 	for _, role := range []string{ | ||||
| 		"foo_owner", "foo_reader", "foo_writer", | ||||
| 		"foo_owner_user", "foo_reader_user", "foo_writer_user", | ||||
| 		"foo_bar_owner", "foo_bar_reader", "foo_bar_writer", | ||||
| 		"foo_bar_owner_user", "foo_bar_reader_user", "foo_bar_writer_user"} { | ||||
| 		if _, exist := cl.pgUsers[role]; !exist { | ||||
| 			t.Errorf("%s, default role %q for prepared database not present", testName, role) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	roleTests := []struct { | ||||
| 		subTest  string | ||||
| 		role     string | ||||
| 		memberOf string | ||||
| 		admin    string | ||||
| 	}{ | ||||
| 		{ | ||||
| 			subTest:  "Test admin role of owner", | ||||
| 			role:     "foo_owner", | ||||
| 			memberOf: "", | ||||
| 			admin:    "admin", | ||||
| 		}, | ||||
| 		{ | ||||
| 			subTest:  "Test writer is a member of reader", | ||||
| 			role:     "foo_writer", | ||||
| 			memberOf: "foo_reader", | ||||
| 			admin:    "foo_owner", | ||||
| 		}, | ||||
| 		{ | ||||
| 			subTest:  "Test reader LOGIN role", | ||||
| 			role:     "foo_reader_user", | ||||
| 			memberOf: "foo_reader", | ||||
| 			admin:    "foo_owner", | ||||
| 		}, | ||||
| 		{ | ||||
| 			subTest:  "Test schema owner", | ||||
| 			role:     "foo_bar_owner", | ||||
| 			memberOf: "", | ||||
| 			admin:    "foo_owner", | ||||
| 		}, | ||||
| 		{ | ||||
| 			subTest:  "Test schema writer LOGIN role", | ||||
| 			role:     "foo_bar_writer_user", | ||||
| 			memberOf: "foo_bar_writer", | ||||
| 			admin:    "foo_bar_owner", | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	for _, tt := range roleTests { | ||||
| 		user := cl.pgUsers[tt.role] | ||||
| 		if (tt.memberOf == "" && len(user.MemberOf) > 0) || (tt.memberOf != "" && user.MemberOf[0] != tt.memberOf) { | ||||
| 			t.Errorf("%s, incorrect membership for default role %q. Expected %q, got %q", tt.subTest, tt.role, tt.memberOf, user.MemberOf[0]) | ||||
| 		} | ||||
| 		if user.AdminRole != tt.admin { | ||||
| 			t.Errorf("%s, incorrect admin role for default role %q. Expected %q, got %q", tt.subTest, tt.role, tt.admin, user.AdminRole) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -160,9 +160,9 @@ func (c *Cluster) closeDbConn() (err error) { | |||
| 		c.logger.Debug("closing database connection") | ||||
| 		if err = c.pgDb.Close(); err != nil { | ||||
| 			c.logger.Errorf("could not close database connection: %v", err) | ||||
| 		} else { | ||||
| 			c.pgDb = nil | ||||
| 		} | ||||
| 		c.pgDb = nil | ||||
| 
 | ||||
| 		return nil | ||||
| 	} | ||||
| 	c.logger.Warning("attempted to close an empty db connection object") | ||||
|  | @ -488,7 +488,7 @@ func (c *Cluster) installLookupFunction(poolerSchema, poolerUser string) error { | |||
| 
 | ||||
| 	templater := template.Must(template.New("sql").Parse(connectionPoolerLookup)) | ||||
| 
 | ||||
| 	for dbname, _ := range currentDatabases { | ||||
| 	for dbname := range currentDatabases { | ||||
| 		if dbname == "template0" || dbname == "template1" { | ||||
| 			continue | ||||
| 		} | ||||
|  |  | |||
|  | @ -553,10 +553,10 @@ func (c *Cluster) syncDatabases() error { | |||
| 		preparedDatabases = map[string]acidv1.PreparedDatabase{strings.Replace(c.Name, "-", "_", -1): {}} | ||||
| 		c.Spec.PreparedDatabases = preparedDatabases | ||||
| 	} | ||||
| 	for preparedDatname := range c.Spec.PreparedDatabases { | ||||
| 		_, exists := currentDatabases[preparedDatname] | ||||
| 	for preparedDatabaseName := range c.Spec.PreparedDatabases { | ||||
| 		_, exists := currentDatabases[preparedDatabaseName] | ||||
| 		if !exists { | ||||
| 			createDatabases[preparedDatname] = preparedDatname + constants.OwnerRoleNameSuffix | ||||
| 			createDatabases[preparedDatabaseName] = preparedDatabaseName + constants.OwnerRoleNameSuffix | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue