@@ -867,6 +867,7 @@ var _ = Describe("PostgresRole Controller", func() {
867867 When ("no role exists" , func () {
868868 It ("should return immediately" , func () {
869869 var existingRole * postgresql.Role
870+ var onDeleteOptions * managedpostgresoperatorhoppscalecomv1alpha1.PostgresRoleOnDelete
870871
871872 controllerReconciler := & PostgresRoleReconciler {
872873 Client : k8sClient ,
@@ -875,7 +876,7 @@ var _ = Describe("PostgresRole Controller", func() {
875876 CacheRolePasswords : map [string ]string {},
876877 }
877878
878- err := controllerReconciler .reconcileOnDeletion (existingRole , false )
879+ err := controllerReconciler .reconcileOnDeletion (existingRole , false , onDeleteOptions )
879880 Expect (err ).NotTo (HaveOccurred ())
880881 for _ , poolMock := range pgpoolsMock {
881882 if err := poolMock .ExpectationsWereMet (); err != nil {
@@ -884,6 +885,95 @@ var _ = Describe("PostgresRole Controller", func() {
884885 }
885886 })
886887 })
888+
889+ When ("reassignOwnedTo is configured" , func () {
890+ It ("reassign owned objects before deletion" , func () {
891+ existingRole := & postgresql.Role {
892+ Name : "myrole" ,
893+ }
894+ onDeleteOptions := & managedpostgresoperatorhoppscalecomv1alpha1.PostgresRoleOnDelete {
895+ ReassignOwnedTo : "myrolebis" ,
896+ }
897+
898+ databases := []string {
899+ "postgres" ,
900+ "foo" ,
901+ }
902+
903+ for _ , database := range databases {
904+ mock , err := pgxmock .NewPool ()
905+ if err != nil {
906+ Fail (err .Error ())
907+ }
908+ pgpoolsMock [database ] = mock
909+ pgpools .Databases [database ] = pgpoolsMock [database ]
910+ }
911+
912+ /*
913+ pgpoolsMock["default"].ExpectQuery(fmt.Sprintf("^%s$", regexp.QuoteMeta(postgresql.GetRoleSQLStatement))).
914+ WithArgs("myrole").
915+ WillReturnRows(
916+ pgxmock.NewRows([]string{
917+ "rolname",
918+ "rolsuper",
919+ "rolinherit",
920+ "rolcreaterole",
921+ "rolcreatedb",
922+ "rolcanlogin",
923+ "rolreplication",
924+ "rolbypassrls",
925+ }).
926+ AddRow(
927+ "myrole",
928+ false,
929+ false,
930+ true,
931+ true,
932+ false,
933+ false,
934+ false,
935+ ),
936+ )
937+ */
938+
939+ pgpoolsMock ["default" ].ExpectQuery (fmt .Sprintf ("^%s$" , regexp .QuoteMeta ("SELECT datname FROM pg_database WHERE datistemplate = false" ))).
940+ WillReturnRows (
941+ pgxmock .NewRows ([]string {
942+ "datname" ,
943+ }).
944+ AddRow (
945+ "postgres" ,
946+ ).
947+ AddRow (
948+ "foo" ,
949+ ),
950+ )
951+
952+ for _ , database := range databases {
953+ pgpoolsMock [database ].ExpectExec (fmt .Sprintf ("^%s$" , regexp .QuoteMeta (`REASSIGN OWNED BY "myrole" TO "myrolebis"` ))).
954+ WillReturnResult (pgxmock .NewResult ("REASSIGN OWNED" , 1 ))
955+ }
956+
957+ pgpoolsMock ["default" ].ExpectExec (fmt .Sprintf ("^%s$" , regexp .QuoteMeta (`DROP ROLE "myrole"` ))).
958+ WillReturnResult (pgxmock .NewResult ("DROP ROLE" , 1 ))
959+
960+ controllerReconciler := & PostgresRoleReconciler {
961+ Client : k8sClient ,
962+ Scheme : k8sClient .Scheme (),
963+ PGPools : pgpools ,
964+ CacheRolePasswords : map [string ]string {},
965+ }
966+
967+ err := controllerReconciler .reconcileOnDeletion (existingRole , false , onDeleteOptions )
968+ Expect (err ).NotTo (HaveOccurred ())
969+ for _ , poolMock := range pgpoolsMock {
970+ if err := poolMock .ExpectationsWereMet (); err != nil {
971+ Fail (err .Error ())
972+ }
973+ }
974+ })
975+ })
976+
887977 })
888978 })
889979})
0 commit comments