@@ -197,13 +197,15 @@ def test_additional_teams_and_members(self):
197197 enable_postgres_team_crd = {
198198 "data" : {
199199 "enable_postgres_team_crd" : "true" ,
200- "resync_period" : "15s" ,
200+ "enable_team_member_deprecation" : "true" ,
201+ "role_deletion_suffix" : "_delete_me" ,
202+ "resync_period" : "15s"
201203 },
202204 }
203205 self .k8s .update_config (enable_postgres_team_crd )
204206 self .eventuallyEqual (lambda : self .k8s .get_operator_state (), {"0" : "idle" },
205207 "Operator does not get in sync" )
206-
208+
207209 self .k8s .api .custom_objects_api .patch_namespaced_custom_object (
208210 'acid.zalan.do' , 'v1' , 'default' ,
209211 'postgresteams' , 'custom-team-membership' ,
@@ -222,18 +224,60 @@ def test_additional_teams_and_members(self):
222224 }
223225 })
224226
225- # make sure we let one sync pass and the new user being added
226- time .sleep (15 )
227-
228227 leader = self .k8s .get_cluster_leader_pod ()
229228 user_query = """
230- SELECT usename
231- FROM pg_catalog.pg_user
232- WHERE usename IN ('elephant', 'kind');
229+ SELECT rolname
230+ FROM pg_catalog.pg_roles
231+ WHERE rolname IN ('elephant', 'kind');
232+ """
233+ self .eventuallyEqual (lambda : len (self .query_database (leader .metadata .name , "postgres" , user_query )), 2 ,
234+ "Not all additional users found in database" , 10 , 5 )
235+
236+ # replace additional member and check if the removed member's role is renamed
237+ self .k8s .api .custom_objects_api .patch_namespaced_custom_object (
238+ 'acid.zalan.do' , 'v1' , 'default' ,
239+ 'postgresteams' , 'custom-team-membership' ,
240+ {
241+ 'spec' : {
242+ 'additionalMembers' : {
243+ 'e2e' : [
244+ 'tester'
245+ ]
246+ },
247+ }
248+ })
249+
250+ user_query = """
251+ SELECT rolname
252+ FROM pg_catalog.pg_roles
253+ WHERE (rolname = 'tester' AND rolcanlogin)
254+ OR (rolname = 'kind_delete_me' AND NOT rolcanlogin);
255+ """
256+ self .eventuallyEqual (lambda : len (self .query_database (leader .metadata .name , "postgres" , user_query )), 2 ,
257+ "Database role of replaced member in PostgresTeam not renamed" , 10 , 5 )
258+
259+ # re-add additional member and check if the role is renamed back
260+ self .k8s .api .custom_objects_api .patch_namespaced_custom_object (
261+ 'acid.zalan.do' , 'v1' , 'default' ,
262+ 'postgresteams' , 'custom-team-membership' ,
263+ {
264+ 'spec' : {
265+ 'additionalMembers' : {
266+ 'e2e' : [
267+ 'kind'
268+ ]
269+ },
270+ }
271+ })
272+
273+ user_query = """
274+ SELECT rolname
275+ FROM pg_catalog.pg_roles
276+ WHERE (rolname = 'kind' AND rolcanlogin)
277+ OR (rolname = 'tester_delete_me' AND NOT rolcanlogin);
233278 """
234- users = self .query_database (leader .metadata .name , "postgres" , user_query )
235- self .eventuallyEqual (lambda : len (users ), 2 ,
236- "Not all additional users found in database: {}" .format (users ))
279+ self .eventuallyEqual (lambda : len (self .query_database (leader .metadata .name , "postgres" , user_query )), 2 ,
280+ "Database role of recreated member in PostgresTeam not renamed back to original name" , 10 , 5 )
237281
238282 # revert config change
239283 revert_resync = {
@@ -407,9 +451,9 @@ def test_enable_disable_connection_pooler(self):
407451
408452 leader = k8s .get_cluster_leader_pod ()
409453 schemas_query = """
410- select schema_name
411- from information_schema.schemata
412- where schema_name = 'pooler'
454+ SELECT schema_name
455+ FROM information_schema.schemata
456+ WHERE schema_name = 'pooler'
413457 """
414458
415459 db_list = self .list_databases (leader .metadata .name )
@@ -529,6 +573,7 @@ def verify_role():
529573 "Parameters" : None ,
530574 "AdminRole" : "" ,
531575 "Origin" : 2 ,
576+ "Deleted" : False
532577 })
533578 return True
534579 except :
@@ -1417,7 +1462,7 @@ def list_databases(self, pod_name):
14171462 k8s = self .k8s
14181463 result_set = []
14191464 db_list = []
1420- db_list_query = "select datname from pg_database"
1465+ db_list_query = "SELECT datname FROM pg_database"
14211466 exec_query = r"psql -tAq -c \"{}\" -d {}"
14221467
14231468 try :
0 commit comments