diff --git a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/9.4_plus/sql.sql b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/9.4_plus/sql.sql index b9ad7cf72..0120ed2bb 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/9.4_plus/sql.sql +++ b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/9.4_plus/sql.sql @@ -31,7 +31,7 @@ UNION ALL array_to_string(array_agg(sql), E'\n') AS sql FROM (SELECT - 'GRANT ' || array_to_string(array_agg(rolname), ', ') || ' TO ' || pg_catalog.quote_ident(pg_get_userbyid(%(rid)s::OID)) || + 'GRANT ' || array_to_string(array_agg(rolname order by rolname), ', ') || ' TO ' || pg_catalog.quote_ident(pg_get_userbyid(%(rid)s::OID)) || CASE WHEN admin_option THEN ' WITH ADMIN OPTION;' ELSE ';' END AS sql FROM (SELECT diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options1.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options1.msql index b6864d79d..cd6738440 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options1.msql +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options1.msql @@ -7,7 +7,7 @@ ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" VALID UNTIL '2050-01-01T00:00:00+05:30' PASSWORD 'xxxxxx'; -GRANT pg_signal_backend TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; -GRANT pg_monitor TO "Role2_$%{}[]()&*^!@""'`\/#"; +GRANT test_rolemembership_1 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; +GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#"; ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres SET application_name TO 'pg4'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options1.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options1.sql index 9013abd9b..4c82ac175 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options1.sql +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options1.sql @@ -12,8 +12,8 @@ CREATE ROLE "Role2_$%{}[]()&*^!@""'`\/#" WITH ENCRYPTED PASSWORD '' VALID UNTIL ''; -GRANT pg_monitor TO "Role2_$%{}[]()&*^!@""'`\/#"; -GRANT pg_signal_backend TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; +GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#"; +GRANT test_rolemembership_1 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres SET application_name TO 'pg4'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options2.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options2.msql index 85a402a33..06672e893 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options2.msql +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options2.msql @@ -1,2 +1,2 @@ -REVOKE ADMIN OPTION FOR pg_signal_backend FROM "Role2_$%{}[]()&*^!@""'`\/#"; -GRANT pg_monitor TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; +REVOKE ADMIN OPTION FOR test_rolemembership_1 FROM "Role2_$%{}[]()&*^!@""'`\/#"; +GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options2.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options2.sql index 71dd6832b..bcd7e779d 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options2.sql +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options2.sql @@ -12,8 +12,8 @@ CREATE ROLE "Role2_$%{}[]()&*^!@""'`\/#" WITH ENCRYPTED PASSWORD '' VALID UNTIL '2050-01-01 00:00:00+05:30'; -GRANT pg_signal_backend TO "Role2_$%{}[]()&*^!@""'`\/#"; -GRANT pg_monitor TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; +GRANT test_rolemembership_1 TO "Role2_$%{}[]()&*^!@""'`\/#"; +GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres SET application_name TO 'pg4'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options3.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options3.msql index 353fec735..ab13abdd6 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options3.msql +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options3.msql @@ -1 +1 @@ -REVOKE pg_signal_backend FROM "Role2_$%{}[]()&*^!@""'`\/#"; +REVOKE test_rolemembership_1 FROM "Role2_$%{}[]()&*^!@""'`\/#"; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options3.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options3.sql index 3e0f354c5..17493540a 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options3.sql +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options3.sql @@ -12,7 +12,7 @@ CREATE ROLE "Role2_$%{}[]()&*^!@""'`\/#" WITH ENCRYPTED PASSWORD '' VALID UNTIL '2050-01-01 00:00:00+05:30'; -GRANT pg_monitor TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; +GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres SET application_name TO 'pg4'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options4.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options4.msql index e18804b40..d987e1c7f 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options4.msql +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options4.msql @@ -1 +1 @@ -GRANT pg_signal_backend, pg_monitor TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; +GRANT test_rolemembership_1, test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options4.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options4.sql index b92fd5d3d..89a9da4ff 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options4.sql +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options4.sql @@ -12,7 +12,7 @@ CREATE ROLE "Role2_$%{}[]()&*^!@""'`\/#" WITH ENCRYPTED PASSWORD '' VALID UNTIL '2050-01-01 00:00:00+05:30'; -GRANT pg_monitor, pg_signal_backend TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; +GRANT test_rolemembership_1, test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres SET application_name TO 'pg4'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/test.json b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/test.json index 8df404e60..568d10f8b 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/test.json +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/test.json @@ -1,5 +1,49 @@ { "scenarios": [ + { + "type": "create", + "name": "Create Role 1 for testing rolemembership", + "endpoint": "NODE-role.obj", + "sql_endpoint": "NODE-role.sql_id", + "data": { + "rolname": "test_rolemembership_1", + "rolcanlogin": false, + "rolpassword": null, + "rolconnlimit": -1, + "rolsuper": false, + "rolcreaterole": false, + "rolcreatedb": false, + "rolinherit": true, + "rolcatupdate": false, + "rolreplication": false, + "rolmembership": [], + "seclabels": [], + "variables": [] + }, + "store_object_id": true + }, + { + "type": "create", + "name": "Create Role 2 for testing rolemembership", + "endpoint": "NODE-role.obj", + "sql_endpoint": "NODE-role.sql_id", + "data": { + "rolname": "test_rolemembership_2", + "rolcanlogin": false, + "rolpassword": null, + "rolconnlimit": -1, + "rolsuper": false, + "rolcreaterole": false, + "rolcreatedb": false, + "rolinherit": true, + "rolcatupdate": false, + "rolreplication": false, + "rolmembership": [], + "seclabels": [], + "variables": [] + }, + "store_object_id": true + }, { "type": "create", "name": "Create Role", @@ -62,7 +106,7 @@ "rolconnlimit": 100, "rolvaliduntil": "2050-01-01 00:00:00 +05:30", "variables": { "added": [{"name":"application_name","value":"pg4","database":"postgres"}] }, - "rolmembership": { "added": [{"role": "pg_signal_backend", "admin": true}, {"role": "pg_monitor", "admin": false}] } + "rolmembership": { "added": [{"role": "test_rolemembership_1", "admin": true}, {"role": "test_rolemembership_2", "admin": false}] } }, "expected_sql_file": "alter_role_options1.sql", "expected_msql_file": "alter_role_options1.msql", @@ -76,7 +120,7 @@ "sql_endpoint": "NODE-role.sql_id", "msql_endpoint": "NODE-role.msql_id", "data": { - "rolmembership": { "changed": [{"role": "pg_signal_backend", "admin": false}, {"role": "pg_monitor", "admin": true}] } + "rolmembership": { "changed": [{"role": "test_rolemembership_1", "admin": false}, {"role": "test_rolemembership_2", "admin": true}] } }, "expected_sql_file": "alter_role_options2.sql", "expected_msql_file": "alter_role_options2.msql", @@ -91,7 +135,7 @@ "sql_endpoint": "NODE-role.sql_id", "msql_endpoint": "NODE-role.msql_id", "data": { - "rolmembership": { "deleted": [{"role": "pg_signal_backend"}] } + "rolmembership": { "deleted": [{"role": "test_rolemembership_1"}] } }, "expected_sql_file": "alter_role_options3.sql", "expected_msql_file": "alter_role_options3.msql", @@ -107,8 +151,8 @@ "msql_endpoint": "NODE-role.msql_id", "data": { "rolmembership": { - "added": [{"role": "pg_signal_backend", "admin": true}], - "changed": [{"role": "pg_monitor", "admin": true}] + "added": [{"role": "test_rolemembership_1", "admin": true}], + "changed": [{"role": "test_rolemembership_2", "admin": true}] } }, "expected_sql_file": "alter_role_options4.sql", @@ -123,6 +167,13 @@ "endpoint": "NODE-role.obj_id", "data": {} }, + { + "type": "delete", + "name": "Drop Role", + "endpoint": "NODE-role.obj", + "data": {"ids": ["", ""]}, + "preprocess_data": true + }, { "type": "create", "name": "Create Login Role", diff --git a/web/regression/re_sql/tests/test_resql.py b/web/regression/re_sql/tests/test_resql.py index b670bfacf..05ba712fb 100644 --- a/web/regression/re_sql/tests/test_resql.py +++ b/web/regression/re_sql/tests/test_resql.py @@ -281,7 +281,7 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator): # Store the object id based on endpoints if 'store_object_id' in scenario: self.store_object_ids(object_id, - scenario['data']['name'], + scenario['data'], scenario['endpoint']) # Compare the reverse engineering SQL @@ -324,8 +324,9 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator): elif 'type' in scenario and scenario['type'] == 'delete': # Get the delete url and delete the object created above. delete_url = self.get_url(scenario['endpoint'], object_id) - delete_response = self.tester.delete(delete_url, - follow_redirects=True) + delete_response = self.tester.delete( + delete_url, data=json.dumps(scenario.get('data', {})), + follow_redirects=True) try: self.assertEquals(delete_response.status_code, 200) except Exception as e: @@ -628,7 +629,7 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator): return sql - def store_object_ids(self, object_id, object_name, endpoint): + def store_object_ids(self, object_id, object_data, endpoint): """ This functions will store the object id based on endpoints :param object_id: Object id of the created node @@ -636,12 +637,15 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator): :param endpoint: :return: """ + object_name = object_data.get('name', '') if endpoint.__contains__("NODE-table"): self.parent_ids['tid'] = object_id elif endpoint.__contains__("NODE-foreign_data_wrapper"): self.parent_ids['fid'] = object_id elif endpoint.__contains__("NODE-foreign_server"): self.parent_ids['fsid'] = object_id + elif endpoint.__contains__("NODE-role.obj"): + object_name = object_data['rolname'] # Store object id with object name self.all_object_ids[object_name] = object_id