@@ -250,6 +250,8 @@ def test_additional_teams_and_members(self):
250250 }
251251 k8s .update_config (enable_postgres_team_crd )
252252
253+ # add team and member to custom-team-membership
254+ # contains already elephant user
253255 k8s .api .custom_objects_api .patch_namespaced_custom_object (
254256 'acid.zalan.do' , 'v1' , 'default' ,
255257 'postgresteams' , 'custom-team-membership' ,
@@ -300,6 +302,13 @@ def test_additional_teams_and_members(self):
300302 self .eventuallyEqual (lambda : len (self .query_database (leader .metadata .name , "postgres" , user_query )), 2 ,
301303 "Database role of replaced member in PostgresTeam not renamed" , 10 , 5 )
302304
305+ # create fake deletion user so operator fails renaming
306+ # but altering role to NOLOGIN will succeed
307+ create_fake_deletion_user = """
308+ CREATE USER tester_delete_me NOLOGIN;
309+ """
310+ self .query_database (leader .metadata .name , "postgres" , create_fake_deletion_user )
311+
303312 # re-add additional member and check if the role is renamed back
304313 k8s .api .custom_objects_api .patch_namespaced_custom_object (
305314 'acid.zalan.do' , 'v1' , 'default' ,
@@ -317,12 +326,45 @@ def test_additional_teams_and_members(self):
317326 user_query = """
318327 SELECT rolname
319328 FROM pg_catalog.pg_roles
320- WHERE (rolname = 'kind' AND rolcanlogin)
321- OR (rolname = 'tester_delete_me' AND NOT rolcanlogin);
329+ WHERE rolname = 'kind' AND rolcanlogin;
322330 """
323- self .eventuallyEqual (lambda : len (self .query_database (leader .metadata .name , "postgres" , user_query )), 2 ,
331+ self .eventuallyEqual (lambda : len (self .query_database (leader .metadata .name , "postgres" , user_query )), 1 ,
324332 "Database role of recreated member in PostgresTeam not renamed back to original name" , 10 , 5 )
325333
334+ user_query = """
335+ SELECT rolname
336+ FROM pg_catalog.pg_roles
337+ WHERE rolname IN ('tester','tester_delete_me') AND NOT rolcanlogin;
338+ """
339+ self .eventuallyEqual (lambda : len (self .query_database (leader .metadata .name , "postgres" , user_query )), 2 ,
340+ "Database role of replaced member in PostgresTeam not denied from login" , 10 , 5 )
341+
342+ # re-add other additional member, operator should grant LOGIN back to tester
343+ # but nothing happens to deleted role
344+ k8s .api .custom_objects_api .patch_namespaced_custom_object (
345+ 'acid.zalan.do' , 'v1' , 'default' ,
346+ 'postgresteams' , 'custom-team-membership' ,
347+ {
348+ 'spec' : {
349+ 'additionalMembers' : {
350+ 'e2e' : [
351+ 'kind' ,
352+ 'tester'
353+ ]
354+ },
355+ }
356+ })
357+
358+ user_query = """
359+ SELECT rolname
360+ FROM pg_catalog.pg_roles
361+ WHERE (rolname IN ('tester', 'kind')
362+ AND rolcanlogin)
363+ OR (rolname = 'tester_delete_me' AND NOT rolcanlogin);
364+ """
365+ self .eventuallyEqual (lambda : len (self .query_database (leader .metadata .name , "postgres" , user_query )), 3 ,
366+ "Database role of deleted member in PostgresTeam not removed when recreated manually" , 10 , 5 )
367+
326368 # revert config change
327369 revert_resync = {
328370 "data" : {
@@ -1204,8 +1246,9 @@ def test_node_affinity(self):
12041246 self .eventuallyEqual (lambda : k8s .get_operator_state (), {"0" : "idle" }, "Operator does not get in sync" )
12051247
12061248 # node affinity change should cause another rolling update and relocation of replica
1207- k8s .wait_for_pod_start ( 'spilo-role=replica,' + cluster_label )
1249+ k8s .wait_for_pod_failover ( master_nodes , 'spilo-role=replica,' + cluster_label )
12081250 k8s .wait_for_pod_start ('spilo-role=master,' + cluster_label )
1251+ k8s .wait_for_pod_start ('spilo-role=replica,' + cluster_label )
12091252
12101253 except timeout_decorator .TimeoutError :
12111254 print ('Operator log: {}' .format (k8s .get_operator_log ()))
@@ -1956,4 +1999,4 @@ def query_database(self, pod_name, db_name, query):
19561999 return result_set
19572000
19582001if __name__ == '__main__' :
1959- unittest .main ()
2002+ unittest .main ()
0 commit comments