public inbox for [email protected]  
help / color / mirror / Atom feed
RE-SQL tests for Roles & Resource Group nodes
11+ messages / 3 participants
[nested] [flat]

* RE-SQL tests for Roles & Resource Group nodes
@ 2019-07-01 05:31 Murtuza Zabuawala <[email protected]>
  2019-07-01 14:25 ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  0 siblings, 1 reply; 11+ messages in thread

From: Murtuza Zabuawala @ 2019-07-01 05:31 UTC (permalink / raw)
  To: pgadmin-hackers

Hi,

PFA patch to add RE-SQL tests for Roles & Resource Group nodes.


--
Regards,
Murtuza Zabuawala
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


Attachments:

  [application/octet-stream] RM_4415.diff (32.8K, 3-RM_4415.diff)
  download | inline diff:
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py b/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py
index 9047b7f7..05763e14 100644
--- a/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py
@@ -226,8 +226,9 @@ class ResourceGroupView(NodeView):
                         "Connection to the server has been lost."
                     )
                 )
-
-            self.template_path = 'resource_groups/sql'
+            self.sql_path = 'resource_groups/sql/#{0}#'.format(
+                self.manager.version
+            )
             return f(*args, **kwargs)
 
         return wrap
@@ -242,7 +243,7 @@ class ResourceGroupView(NodeView):
             gid: Server Group ID
             sid: Server ID
         """
-        sql = render_template("/".join([self.template_path, 'properties.sql']))
+        sql = render_template("/".join([self.sql_path, 'properties.sql']))
         status, res = self.conn.execute_dict(sql)
 
         if not status:
@@ -263,7 +264,7 @@ class ResourceGroupView(NodeView):
             sid: Server ID
         """
 
-        sql = render_template("/".join([self.template_path, 'nodes.sql']),
+        sql = render_template("/".join([self.sql_path, 'nodes.sql']),
                               rgid=rg_id)
         status, result = self.conn.execute_2darray(sql)
         if not status:
@@ -295,7 +296,7 @@ class ResourceGroupView(NodeView):
             sid: Server ID
         """
         res = []
-        sql = render_template("/".join([self.template_path, 'nodes.sql']))
+        sql = render_template("/".join([self.sql_path, 'nodes.sql']))
         status, result = self.conn.execute_2darray(sql)
         if not status:
             return internal_server_error(errormsg=result)
@@ -326,7 +327,7 @@ class ResourceGroupView(NodeView):
             rg_id: Resource Group ID
         """
         sql = render_template(
-            "/".join([self.template_path, 'properties.sql']), rgid=rg_id)
+            "/".join([self.sql_path, 'properties.sql']), rgid=rg_id)
         status, res = self.conn.execute_dict(sql)
 
         if not status:
@@ -368,7 +369,7 @@ class ResourceGroupView(NodeView):
         try:
             # Below logic will create new resource group
             sql = render_template(
-                "/".join([self.template_path, 'create.sql']),
+                "/".join([self.sql_path, 'create.sql']),
                 rgname=data['name'], conn=self.conn
             )
             if sql and sql.strip('\n') and sql.strip(' '):
@@ -380,7 +381,7 @@ class ResourceGroupView(NodeView):
             # resource group you can't run multiple commands in one
             # transaction.
             sql = render_template(
-                "/".join([self.template_path, 'update.sql']),
+                "/".join([self.sql_path, 'update.sql']),
                 data=data, conn=self.conn
             )
             # Checking if we are not executing empty query
@@ -391,7 +392,7 @@ class ResourceGroupView(NodeView):
             # Below logic is used to fetch the oid of the newly created
             # resource group
             sql = render_template(
-                "/".join([self.template_path, 'getoid.sql']),
+                "/".join([self.sql_path, 'getoid.sql']),
                 rgname=data['name']
             )
             # Checking if we are not executing empty query
@@ -431,7 +432,7 @@ class ResourceGroupView(NodeView):
 
         try:
             sql = render_template(
-                "/".join([self.template_path, 'properties.sql']), rgid=rg_id)
+                "/".join([self.sql_path, 'properties.sql']), rgid=rg_id)
             status, res = self.conn.execute_dict(sql)
             if not status:
                 return internal_server_error(errormsg=res)
@@ -442,7 +443,7 @@ class ResourceGroupView(NodeView):
 
             if data['name'] != old_data['name']:
                 sql = render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     oldname=old_data['name'], newname=data['name'],
                     conn=self.conn
                 )
@@ -458,7 +459,7 @@ class ResourceGroupView(NodeView):
             if data['cpu_rate_limit'] != old_data['cpu_rate_limit'] or \
                     data['dirty_rate_limit'] != old_data['dirty_rate_limit']:
                 sql = render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     data=data, conn=self.conn
                 )
                 if sql and sql.strip('\n') and sql.strip(' '):
@@ -499,7 +500,7 @@ class ResourceGroupView(NodeView):
             for rg_id in data['ids']:
                 # Get name for resource group from rg_id
                 sql = render_template(
-                    "/".join([self.template_path, 'delete.sql']),
+                    "/".join([self.sql_path, 'delete.sql']),
                     rgid=rg_id, conn=self.conn
                 )
                 status, rgname = self.conn.execute_scalar(sql)
@@ -520,7 +521,7 @@ class ResourceGroupView(NodeView):
 
                 # drop resource group
                 sql = render_template(
-                    "/".join([self.template_path, 'delete.sql']),
+                    "/".join([self.sql_path, 'delete.sql']),
                     rgname=rgname, conn=self.conn
                 )
                 status, res = self.conn.execute_scalar(sql)
@@ -580,7 +581,7 @@ class ResourceGroupView(NodeView):
         ]
         if rg_id is not None:
             sql = render_template(
-                "/".join([self.template_path, 'properties.sql']), rgid=rg_id)
+                "/".join([self.sql_path, 'properties.sql']), rgid=rg_id)
             status, res = self.conn.execute_dict(sql)
             if not status:
                 return internal_server_error(errormsg=res)
@@ -599,7 +600,7 @@ class ResourceGroupView(NodeView):
             if data['name'] != old_data['name']:
                 name_changed = True
                 sql = render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     oldname=old_data['name'], newname=data['name'],
                     conn=self.conn
                 )
@@ -609,12 +610,12 @@ class ResourceGroupView(NodeView):
                     sql += "\n-- Following query will be executed in a " \
                            "separate transaction\n"
                 sql += render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     data=data, conn=self.conn
                 )
         else:
             sql = render_template(
-                "/".join([self.template_path, 'create.sql']),
+                "/".join([self.sql_path, 'create.sql']),
                 rgname=data['name'], conn=self.conn
             )
 
@@ -630,7 +631,7 @@ class ResourceGroupView(NodeView):
                 sql += "\n-- Following query will be executed in a " \
                        "separate transaction\n"
                 sql += render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     data=data, conn=self.conn
                 )
 
@@ -647,7 +648,7 @@ class ResourceGroupView(NodeView):
             rg_id: Resource Group ID
         """
         sql = render_template(
-            "/".join([self.template_path, 'properties.sql']), rgid=rg_id
+            "/".join([self.sql_path, 'properties.sql']), rgid=rg_id
         )
         status, res = self.conn.execute_dict(sql)
         if not status:
@@ -661,13 +662,13 @@ class ResourceGroupView(NodeView):
         old_data = dict(res['rows'][0])
 
         sql = render_template(
-            "/".join([self.template_path, 'create.sql']),
+            "/".join([self.sql_path, 'create.sql']),
             display_comments=True,
             rgname=old_data['name'], conn=self.conn
         )
         sql += "\n"
         sql += render_template(
-            "/".join([self.template_path, 'update.sql']),
+            "/".join([self.sql_path, 'update.sql']),
             data=old_data, conn=self.conn
         )
 
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/create.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/create.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/create.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/create.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/delete.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/delete.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/delete.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/delete.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/getoid.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/getoid.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/getoid.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/getoid.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/nodes.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/nodes.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/nodes.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/properties.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/properties.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/properties.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/properties.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/update.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/update.sql
similarity index 97%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/update.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/update.sql
index 2b19e108..e5c0a234 100644
--- a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/update.sql
@@ -6,4 +6,4 @@ ALTER RESOURCE GROUP {{ conn|qtIdent(oldname) }} RENAME TO {{ conn|qtIdent(newna
 {% if data %}
 ALTER RESOURCE GROUP {{ conn|qtIdent(data.name) }}
     SET cpu_rate_limit = {{data.cpu_rate_limit|default(0)}}, dirty_rate_limit = {{data.dirty_rate_limit|default(0)}};
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_name.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_name.sql
new file mode 100644
index 00000000..c774cbf5
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_name.sql
@@ -0,0 +1,8 @@
+-- RESOURCE GROUP: new_test_resql_resource_group
+
+-- DROP RESOURCE GROUP new_test_resql_resource_group
+
+CREATE RESOURCE GROUP new_test_resql_resource_group;
+
+ALTER RESOURCE GROUP new_test_resql_resource_group
+    SET cpu_rate_limit = 0, dirty_rate_limit = 0;
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_options.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_options.sql
new file mode 100644
index 00000000..fb21309d
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_options.sql
@@ -0,0 +1,8 @@
+-- RESOURCE GROUP: new_test_resql_resource_group
+
+-- DROP RESOURCE GROUP new_test_resql_resource_group
+
+CREATE RESOURCE GROUP new_test_resql_resource_group;
+
+ALTER RESOURCE GROUP new_test_resql_resource_group
+    SET cpu_rate_limit = 1, dirty_rate_limit = 5;
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/create_resource_group.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/create_resource_group.sql
new file mode 100644
index 00000000..3eb35a6a
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/create_resource_group.sql
@@ -0,0 +1,8 @@
+-- RESOURCE GROUP: test_resql_resource_group
+
+-- DROP RESOURCE GROUP test_resql_resource_group
+
+CREATE RESOURCE GROUP test_resql_resource_group;
+
+ALTER RESOURCE GROUP test_resql_resource_group
+    SET cpu_rate_limit = 0, dirty_rate_limit = 0;
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/test.json b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/test.json
new file mode 100644
index 00000000..312eb3df
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/test.json
@@ -0,0 +1,43 @@
+{
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Resource groups",
+      "endpoint": "NODE-resource_group.obj",
+      "sql_endpoint": "NODE-resource_group.sql_id",
+      "data": {
+          "name": "test_resql_resource_group",
+          "cpu_rate_limit": 0,
+          "dirty_rate_limit": 0
+      },
+      "expected_sql_file": "create_resource_group.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Resource groups name",
+      "endpoint": "NODE-resource_group.obj_id",
+      "sql_endpoint": "NODE-resource_group.sql_id",
+      "data": {
+        "name": "new_test_resql_resource_group"
+      },
+      "expected_sql_file": "alter_resource_group_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Resource groups options",
+      "endpoint": "NODE-resource_group.obj_id",
+      "sql_endpoint": "NODE-resource_group.sql_id",
+      "data": {
+        "cpu_rate_limit": 1,
+        "dirty_rate_limit": 5
+      },
+      "expected_sql_file": "alter_resource_group_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop Resource groups",
+      "endpoint": "NODE-resource_group.obj_id",
+      "data": {}
+    }
+  ]
+}
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_description.sql
new file mode 100644
index 00000000..7879f300
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_description.sql
@@ -0,0 +1,12 @@
+-- Role: test_resql_role_pg91
+-- DROP ROLE test_resql_role_pg91;
+
+CREATE ROLE test_resql_role_pg91 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE test_resql_role_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_name.sql
new file mode 100644
index 00000000..3122bd02
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_name.sql
@@ -0,0 +1,12 @@
+-- Role: new_test_resql_role_pg91
+-- DROP ROLE new_test_resql_role_pg91;
+
+CREATE ROLE new_test_resql_role_pg91 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE new_test_resql_role_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_options.sql
new file mode 100644
index 00000000..8d205ec6
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_options.sql
@@ -0,0 +1,15 @@
+-- Role: new_test_resql_role_pg91
+-- DROP ROLE new_test_resql_role_pg91;
+
+CREATE ROLE new_test_resql_role_pg91 WITH
+  NOLOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = new_test_resql_role_pg91;
+
+COMMENT ON ROLE new_test_resql_role_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_description.sql
new file mode 100644
index 00000000..e34aa437
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_description.sql
@@ -0,0 +1,15 @@
+-- User: test_resql_user_pg91
+-- DROP USER test_resql_user_pg91;
+
+CREATE USER test_resql_user_pg91 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = test_resql_user_pg91;
+
+COMMENT ON ROLE test_resql_user_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_name.sql
new file mode 100644
index 00000000..0f1078d4
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_name.sql
@@ -0,0 +1,15 @@
+-- User: new_test_resql_user_pg91
+-- DROP USER new_test_resql_user_pg91;
+
+CREATE USER new_test_resql_user_pg91 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = new_test_resql_user_pg91;
+
+COMMENT ON ROLE new_test_resql_user_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_options.sql
new file mode 100644
index 00000000..8e6e636a
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_options.sql
@@ -0,0 +1,12 @@
+-- User: new_test_resql_user_pg91
+-- DROP USER new_test_resql_user_pg91;
+
+CREATE USER new_test_resql_user_pg91 WITH
+  LOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE new_test_resql_user_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_role.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_role.sql
new file mode 100644
index 00000000..7f9bf63d
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_role.sql
@@ -0,0 +1,10 @@
+-- Role: test_resql_role_pg91
+-- DROP ROLE test_resql_role_pg91;
+
+CREATE ROLE test_resql_role_pg91 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_user.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_user.sql
new file mode 100644
index 00000000..12da84a1
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_user.sql
@@ -0,0 +1,13 @@
+-- User: test_resql_user_pg91
+-- DROP USER test_resql_user_pg91;
+
+CREATE USER test_resql_user_pg91 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = test_resql_user_pg91;
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/test.json b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/test.json
new file mode 100644
index 00000000..0e8c6994
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/test.json
@@ -0,0 +1,124 @@
+{
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Role",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_role_pg91",
+          "rolcanlogin": false,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": false,
+          "rolcreaterole": false,
+          "rolcreatedb": false,
+          "rolinherit": true,
+          "rolcatupdate": false,
+          "rolreplication": false,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_role.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_role_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_role_pg91"
+      },
+      "expected_sql_file": "alter_role_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": true,
+        "rolcreatedb": true
+      },
+      "expected_sql_file": "alter_role_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop Role",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    },
+    {
+      "type": "create",
+      "name": "Create User",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_user_pg91",
+          "rolcanlogin": true,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": true,
+          "rolcreaterole": true,
+          "rolcreatedb": true,
+          "rolinherit": true,
+          "rolcatupdate": true,
+          "rolreplication": true,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_user.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_user_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_user_pg91"
+      },
+      "expected_sql_file": "alter_user_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": false,
+        "rolcreatedb": false
+      },
+      "expected_sql_file": "alter_user_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop User",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    }
+  ]
+}
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_description.sql
new file mode 100644
index 00000000..7be33986
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_description.sql
@@ -0,0 +1,12 @@
+-- Role: test_resql_role_pg95
+-- DROP ROLE test_resql_role_pg95;
+
+CREATE ROLE test_resql_role_pg95 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE test_resql_role_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_name.sql
new file mode 100644
index 00000000..563404c7
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_name.sql
@@ -0,0 +1,12 @@
+-- Role: new_test_resql_role_pg95
+-- DROP ROLE new_test_resql_role_pg95;
+
+CREATE ROLE new_test_resql_role_pg95 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE new_test_resql_role_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options.sql
new file mode 100644
index 00000000..980bad23
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options.sql
@@ -0,0 +1,12 @@
+-- Role: new_test_resql_role_pg95
+-- DROP ROLE new_test_resql_role_pg95;
+
+CREATE ROLE new_test_resql_role_pg95 WITH
+  NOLOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE new_test_resql_role_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_description.sql
new file mode 100644
index 00000000..2eed6025
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_description.sql
@@ -0,0 +1,12 @@
+-- User: test_resql_user_pg95
+-- DROP USER test_resql_user_pg95;
+
+CREATE USER test_resql_user_pg95 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE test_resql_user_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_name.sql
new file mode 100644
index 00000000..07454a79
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_name.sql
@@ -0,0 +1,12 @@
+-- User: new_test_resql_user_pg95
+-- DROP USER new_test_resql_user_pg95;
+
+CREATE USER new_test_resql_user_pg95 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE new_test_resql_user_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_options.sql
new file mode 100644
index 00000000..5035fbb9
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_options.sql
@@ -0,0 +1,12 @@
+-- User: new_test_resql_user_pg95
+-- DROP USER new_test_resql_user_pg95;
+
+CREATE USER new_test_resql_user_pg95 WITH
+  LOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE new_test_resql_user_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_role.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_role.sql
new file mode 100644
index 00000000..51216477
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_role.sql
@@ -0,0 +1,10 @@
+-- Role: test_resql_role_pg95
+-- DROP ROLE test_resql_role_pg95;
+
+CREATE ROLE test_resql_role_pg95 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_user.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_user.sql
new file mode 100644
index 00000000..476384fb
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_user.sql
@@ -0,0 +1,10 @@
+-- User: test_resql_user_pg95
+-- DROP USER test_resql_user_pg95;
+
+CREATE USER test_resql_user_pg95 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
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
new file mode 100644
index 00000000..e902b3ee
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/test.json
@@ -0,0 +1,124 @@
+{
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Role",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_role_pg95",
+          "rolcanlogin": false,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": false,
+          "rolcreaterole": false,
+          "rolcreatedb": false,
+          "rolinherit": true,
+          "rolcatupdate": false,
+          "rolreplication": false,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_role.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_role_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_role_pg95"
+      },
+      "expected_sql_file": "alter_role_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": true,
+        "rolcreatedb": true
+      },
+      "expected_sql_file": "alter_role_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop Role",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    },
+    {
+      "type": "create",
+      "name": "Create User",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_user_pg95",
+          "rolcanlogin": true,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": true,
+          "rolcreaterole": true,
+          "rolcreatedb": true,
+          "rolinherit": true,
+          "rolcatupdate": true,
+          "rolreplication": true,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_user.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_user_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_user_pg95"
+      },
+      "expected_sql_file": "alter_user_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": false,
+        "rolcreatedb": false
+      },
+      "expected_sql_file": "alter_user_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop User",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    }
+  ]
+}
diff --git a/web/regression/re_sql/tests/test_resql.py b/web/regression/re_sql/tests/test_resql.py
index 369c8ddf..8cd724bc 100644
--- a/web/regression/re_sql/tests/test_resql.py
+++ b/web/regression/re_sql/tests/test_resql.py
@@ -207,6 +207,7 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
         # Remove first and last double quotes
         if resp_sql.startswith('"') and resp_sql.endswith('"'):
             resp_sql = resp_sql[1:-1]
+            resp_sql = resp_sql.rstrip()
 
         # Check if expected sql is given in JSON file or path of the output
         # file is given


^ permalink  raw  reply  [nested|flat] 11+ messages in thread

* Re: RE-SQL tests for Roles & Resource Group nodes
  2019-07-01 05:31 RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
@ 2019-07-01 14:25 ` Dave Page <[email protected]>
  2019-07-02 07:16   ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  0 siblings, 1 reply; 11+ messages in thread

From: Dave Page @ 2019-07-01 14:25 UTC (permalink / raw)
  To: Murtuza Zabuawala <[email protected]>; +Cc: pgadmin-hackers

Hi

On Mon, Jul 1, 2019 at 6:31 AM Murtuza Zabuawala <
[email protected]> wrote:

> Hi,
>
> PFA patch to add RE-SQL tests for Roles & Resource Group nodes.
>

Resource Groups don't exist in PG....

=============Running the test cases for 'Regression - PG 11'=============
runTest (regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)
Reverse Engineered SQL Test Cases

Create IMPLICIT Cast
Alter IMPLICIT Cast
Drop IMPLICIT Cast
Create EXPLICIT Cast
Alter EXPLICIT Cast
Drop EXPLICIT Cast


Create Resource groups
 ... 2019-07-01 15:24:16,930: ERROR flask.app: Failed to execute query
(execute_scalar) for the server #2 - DB:postgres (Query-id: 1562639):
Error Message:ERROR:  syntax error at or near "RESOURCE"
LINE 1: CREATE RESOURCE GROUP test_resql_resource_group;
               ^

FAIL

======================================================================
FAIL: runTest
(regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)
Reverse Engineered SQL Test Cases
----------------------------------------------------------------------
Traceback (most recent call last):
  File
"/Users/dpage/git/pgadmin4/web/regression/re_sql/tests/test_resql.py", line
88, in runTest
    self.execute_test_case(scenarios)
  File
"/Users/dpage/git/pgadmin4/web/regression/re_sql/tests/test_resql.py", line
145, in execute_test_case
    self.assertEquals(response.status_code, 200)
AssertionError: 500 != 200

----------------------------------------------------------------------
Ran 1 test in 0.767s

FAILED (failures=1)

======================================================================
Test Result Summary
======================================================================

Regression - PG 11:

0 tests passed
1 test failed:
ReverseEngineeredSQLTestCases (Reverse Engineered SQL Test Cases)
0 tests skipped

======================================================================

-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


^ permalink  raw  reply  [nested|flat] 11+ messages in thread

* Re: RE-SQL tests for Roles & Resource Group nodes
  2019-07-01 05:31 RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-01 14:25 ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
@ 2019-07-02 07:16   ` Murtuza Zabuawala <[email protected]>
  2019-07-02 07:17     ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-02 09:20     ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  0 siblings, 2 replies; 11+ messages in thread

From: Murtuza Zabuawala @ 2019-07-02 07:16 UTC (permalink / raw)
  To: Dave Page <[email protected]>; +Cc: pgadmin-hackers

Hi Dave,

Please find the updated patch,

- Added a mechanism to check for supported minimum/maximum version and a
server type in the framework.

Please review.


Thanks,
Murtuza

On Mon, Jul 1, 2019 at 7:55 PM Dave Page <[email protected]> wrote:

> Hi
>
> On Mon, Jul 1, 2019 at 6:31 AM Murtuza Zabuawala <
> [email protected]> wrote:
>
>> Hi,
>>
>> PFA patch to add RE-SQL tests for Roles & Resource Group nodes.
>>
>
> Resource Groups don't exist in PG....
>
> =============Running the test cases for 'Regression - PG 11'=============
> runTest (regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)
> Reverse Engineered SQL Test Cases
>
> Create IMPLICIT Cast
> Alter IMPLICIT Cast
> Drop IMPLICIT Cast
> Create EXPLICIT Cast
> Alter EXPLICIT Cast
> Drop EXPLICIT Cast
>
>
> Create Resource groups
>  ... 2019-07-01 15:24:16,930: ERROR flask.app: Failed to execute query
> (execute_scalar) for the server #2 - DB:postgres (Query-id: 1562639):
> Error Message:ERROR:  syntax error at or near "RESOURCE"
> LINE 1: CREATE RESOURCE GROUP test_resql_resource_group;
>                ^
>
> FAIL
>
> ======================================================================
> FAIL: runTest
> (regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)
> Reverse Engineered SQL Test Cases
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>   File
> "/Users/dpage/git/pgadmin4/web/regression/re_sql/tests/test_resql.py", line
> 88, in runTest
>     self.execute_test_case(scenarios)
>   File
> "/Users/dpage/git/pgadmin4/web/regression/re_sql/tests/test_resql.py", line
> 145, in execute_test_case
>     self.assertEquals(response.status_code, 200)
> AssertionError: 500 != 200
>
> ----------------------------------------------------------------------
> Ran 1 test in 0.767s
>
> FAILED (failures=1)
>
> ======================================================================
> Test Result Summary
> ======================================================================
>
> Regression - PG 11:
>
> 0 tests passed
> 1 test failed:
> ReverseEngineeredSQLTestCases (Reverse Engineered SQL Test Cases)
> 0 tests skipped
>
> ======================================================================
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>


^ permalink  raw  reply  [nested|flat] 11+ messages in thread

* Re: RE-SQL tests for Roles & Resource Group nodes
  2019-07-01 05:31 RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-01 14:25 ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  2019-07-02 07:16   ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
@ 2019-07-02 07:17     ` Murtuza Zabuawala <[email protected]>
  2019-07-02 12:22       ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  1 sibling, 1 reply; 11+ messages in thread

From: Murtuza Zabuawala @ 2019-07-02 07:17 UTC (permalink / raw)
  To: Dave Page <[email protected]>; +Cc: pgadmin-hackers

++ Attaching patch

On Tue, Jul 2, 2019 at 12:46 PM Murtuza Zabuawala <
[email protected]> wrote:

> Hi Dave,
>
> Please find the updated patch,
>
> - Added a mechanism to check for supported minimum/maximum version and a
> server type in the framework.
>
> Please review.
>
>
> Thanks,
> Murtuza
>
> On Mon, Jul 1, 2019 at 7:55 PM Dave Page <[email protected]> wrote:
>
>> Hi
>>
>> On Mon, Jul 1, 2019 at 6:31 AM Murtuza Zabuawala <
>> [email protected]> wrote:
>>
>>> Hi,
>>>
>>> PFA patch to add RE-SQL tests for Roles & Resource Group nodes.
>>>
>>
>> Resource Groups don't exist in PG....
>>
>> =============Running the test cases for 'Regression - PG 11'=============
>> runTest (regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)
>> Reverse Engineered SQL Test Cases
>>
>> Create IMPLICIT Cast
>> Alter IMPLICIT Cast
>> Drop IMPLICIT Cast
>> Create EXPLICIT Cast
>> Alter EXPLICIT Cast
>> Drop EXPLICIT Cast
>>
>>
>> Create Resource groups
>>  ... 2019-07-01 15:24:16,930: ERROR flask.app: Failed to execute query
>> (execute_scalar) for the server #2 - DB:postgres (Query-id: 1562639):
>> Error Message:ERROR:  syntax error at or near "RESOURCE"
>> LINE 1: CREATE RESOURCE GROUP test_resql_resource_group;
>>                ^
>>
>> FAIL
>>
>> ======================================================================
>> FAIL: runTest
>> (regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)
>> Reverse Engineered SQL Test Cases
>> ----------------------------------------------------------------------
>> Traceback (most recent call last):
>>   File
>> "/Users/dpage/git/pgadmin4/web/regression/re_sql/tests/test_resql.py", line
>> 88, in runTest
>>     self.execute_test_case(scenarios)
>>   File
>> "/Users/dpage/git/pgadmin4/web/regression/re_sql/tests/test_resql.py", line
>> 145, in execute_test_case
>>     self.assertEquals(response.status_code, 200)
>> AssertionError: 500 != 200
>>
>> ----------------------------------------------------------------------
>> Ran 1 test in 0.767s
>>
>> FAILED (failures=1)
>>
>> ======================================================================
>> Test Result Summary
>> ======================================================================
>>
>> Regression - PG 11:
>>
>> 0 tests passed
>> 1 test failed:
>> ReverseEngineeredSQLTestCases (Reverse Engineered SQL Test Cases)
>> 0 tests skipped
>>
>> ======================================================================
>>
>> --
>> Dave Page
>> Blog: http://pgsnake.blogspot.com
>> Twitter: @pgsnake
>>
>> EnterpriseDB UK: http://www.enterprisedb.com
>> The Enterprise PostgreSQL Company
>>
>


Attachments:

  [application/octet-stream] RM_4415_v1.diff (37.4K, 3-RM_4415_v1.diff)
  download | inline diff:
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py b/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py
index 9047b7f7..05763e14 100644
--- a/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py
@@ -226,8 +226,9 @@ class ResourceGroupView(NodeView):
                         "Connection to the server has been lost."
                     )
                 )
-
-            self.template_path = 'resource_groups/sql'
+            self.sql_path = 'resource_groups/sql/#{0}#'.format(
+                self.manager.version
+            )
             return f(*args, **kwargs)
 
         return wrap
@@ -242,7 +243,7 @@ class ResourceGroupView(NodeView):
             gid: Server Group ID
             sid: Server ID
         """
-        sql = render_template("/".join([self.template_path, 'properties.sql']))
+        sql = render_template("/".join([self.sql_path, 'properties.sql']))
         status, res = self.conn.execute_dict(sql)
 
         if not status:
@@ -263,7 +264,7 @@ class ResourceGroupView(NodeView):
             sid: Server ID
         """
 
-        sql = render_template("/".join([self.template_path, 'nodes.sql']),
+        sql = render_template("/".join([self.sql_path, 'nodes.sql']),
                               rgid=rg_id)
         status, result = self.conn.execute_2darray(sql)
         if not status:
@@ -295,7 +296,7 @@ class ResourceGroupView(NodeView):
             sid: Server ID
         """
         res = []
-        sql = render_template("/".join([self.template_path, 'nodes.sql']))
+        sql = render_template("/".join([self.sql_path, 'nodes.sql']))
         status, result = self.conn.execute_2darray(sql)
         if not status:
             return internal_server_error(errormsg=result)
@@ -326,7 +327,7 @@ class ResourceGroupView(NodeView):
             rg_id: Resource Group ID
         """
         sql = render_template(
-            "/".join([self.template_path, 'properties.sql']), rgid=rg_id)
+            "/".join([self.sql_path, 'properties.sql']), rgid=rg_id)
         status, res = self.conn.execute_dict(sql)
 
         if not status:
@@ -368,7 +369,7 @@ class ResourceGroupView(NodeView):
         try:
             # Below logic will create new resource group
             sql = render_template(
-                "/".join([self.template_path, 'create.sql']),
+                "/".join([self.sql_path, 'create.sql']),
                 rgname=data['name'], conn=self.conn
             )
             if sql and sql.strip('\n') and sql.strip(' '):
@@ -380,7 +381,7 @@ class ResourceGroupView(NodeView):
             # resource group you can't run multiple commands in one
             # transaction.
             sql = render_template(
-                "/".join([self.template_path, 'update.sql']),
+                "/".join([self.sql_path, 'update.sql']),
                 data=data, conn=self.conn
             )
             # Checking if we are not executing empty query
@@ -391,7 +392,7 @@ class ResourceGroupView(NodeView):
             # Below logic is used to fetch the oid of the newly created
             # resource group
             sql = render_template(
-                "/".join([self.template_path, 'getoid.sql']),
+                "/".join([self.sql_path, 'getoid.sql']),
                 rgname=data['name']
             )
             # Checking if we are not executing empty query
@@ -431,7 +432,7 @@ class ResourceGroupView(NodeView):
 
         try:
             sql = render_template(
-                "/".join([self.template_path, 'properties.sql']), rgid=rg_id)
+                "/".join([self.sql_path, 'properties.sql']), rgid=rg_id)
             status, res = self.conn.execute_dict(sql)
             if not status:
                 return internal_server_error(errormsg=res)
@@ -442,7 +443,7 @@ class ResourceGroupView(NodeView):
 
             if data['name'] != old_data['name']:
                 sql = render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     oldname=old_data['name'], newname=data['name'],
                     conn=self.conn
                 )
@@ -458,7 +459,7 @@ class ResourceGroupView(NodeView):
             if data['cpu_rate_limit'] != old_data['cpu_rate_limit'] or \
                     data['dirty_rate_limit'] != old_data['dirty_rate_limit']:
                 sql = render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     data=data, conn=self.conn
                 )
                 if sql and sql.strip('\n') and sql.strip(' '):
@@ -499,7 +500,7 @@ class ResourceGroupView(NodeView):
             for rg_id in data['ids']:
                 # Get name for resource group from rg_id
                 sql = render_template(
-                    "/".join([self.template_path, 'delete.sql']),
+                    "/".join([self.sql_path, 'delete.sql']),
                     rgid=rg_id, conn=self.conn
                 )
                 status, rgname = self.conn.execute_scalar(sql)
@@ -520,7 +521,7 @@ class ResourceGroupView(NodeView):
 
                 # drop resource group
                 sql = render_template(
-                    "/".join([self.template_path, 'delete.sql']),
+                    "/".join([self.sql_path, 'delete.sql']),
                     rgname=rgname, conn=self.conn
                 )
                 status, res = self.conn.execute_scalar(sql)
@@ -580,7 +581,7 @@ class ResourceGroupView(NodeView):
         ]
         if rg_id is not None:
             sql = render_template(
-                "/".join([self.template_path, 'properties.sql']), rgid=rg_id)
+                "/".join([self.sql_path, 'properties.sql']), rgid=rg_id)
             status, res = self.conn.execute_dict(sql)
             if not status:
                 return internal_server_error(errormsg=res)
@@ -599,7 +600,7 @@ class ResourceGroupView(NodeView):
             if data['name'] != old_data['name']:
                 name_changed = True
                 sql = render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     oldname=old_data['name'], newname=data['name'],
                     conn=self.conn
                 )
@@ -609,12 +610,12 @@ class ResourceGroupView(NodeView):
                     sql += "\n-- Following query will be executed in a " \
                            "separate transaction\n"
                 sql += render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     data=data, conn=self.conn
                 )
         else:
             sql = render_template(
-                "/".join([self.template_path, 'create.sql']),
+                "/".join([self.sql_path, 'create.sql']),
                 rgname=data['name'], conn=self.conn
             )
 
@@ -630,7 +631,7 @@ class ResourceGroupView(NodeView):
                 sql += "\n-- Following query will be executed in a " \
                        "separate transaction\n"
                 sql += render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     data=data, conn=self.conn
                 )
 
@@ -647,7 +648,7 @@ class ResourceGroupView(NodeView):
             rg_id: Resource Group ID
         """
         sql = render_template(
-            "/".join([self.template_path, 'properties.sql']), rgid=rg_id
+            "/".join([self.sql_path, 'properties.sql']), rgid=rg_id
         )
         status, res = self.conn.execute_dict(sql)
         if not status:
@@ -661,13 +662,13 @@ class ResourceGroupView(NodeView):
         old_data = dict(res['rows'][0])
 
         sql = render_template(
-            "/".join([self.template_path, 'create.sql']),
+            "/".join([self.sql_path, 'create.sql']),
             display_comments=True,
             rgname=old_data['name'], conn=self.conn
         )
         sql += "\n"
         sql += render_template(
-            "/".join([self.template_path, 'update.sql']),
+            "/".join([self.sql_path, 'update.sql']),
             data=old_data, conn=self.conn
         )
 
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/create.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/create.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/create.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/create.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/delete.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/delete.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/delete.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/delete.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/getoid.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/getoid.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/getoid.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/getoid.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/nodes.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/nodes.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/nodes.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/properties.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/properties.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/properties.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/properties.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/update.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/update.sql
similarity index 97%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/update.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/update.sql
index 2b19e108..e5c0a234 100644
--- a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/update.sql
@@ -6,4 +6,4 @@ ALTER RESOURCE GROUP {{ conn|qtIdent(oldname) }} RENAME TO {{ conn|qtIdent(newna
 {% if data %}
 ALTER RESOURCE GROUP {{ conn|qtIdent(data.name) }}
     SET cpu_rate_limit = {{data.cpu_rate_limit|default(0)}}, dirty_rate_limit = {{data.dirty_rate_limit|default(0)}};
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_name.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_name.sql
new file mode 100644
index 00000000..c774cbf5
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_name.sql
@@ -0,0 +1,8 @@
+-- RESOURCE GROUP: new_test_resql_resource_group
+
+-- DROP RESOURCE GROUP new_test_resql_resource_group
+
+CREATE RESOURCE GROUP new_test_resql_resource_group;
+
+ALTER RESOURCE GROUP new_test_resql_resource_group
+    SET cpu_rate_limit = 0, dirty_rate_limit = 0;
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_options.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_options.sql
new file mode 100644
index 00000000..fb21309d
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_options.sql
@@ -0,0 +1,8 @@
+-- RESOURCE GROUP: new_test_resql_resource_group
+
+-- DROP RESOURCE GROUP new_test_resql_resource_group
+
+CREATE RESOURCE GROUP new_test_resql_resource_group;
+
+ALTER RESOURCE GROUP new_test_resql_resource_group
+    SET cpu_rate_limit = 1, dirty_rate_limit = 5;
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/create_resource_group.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/create_resource_group.sql
new file mode 100644
index 00000000..3eb35a6a
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/create_resource_group.sql
@@ -0,0 +1,8 @@
+-- RESOURCE GROUP: test_resql_resource_group
+
+-- DROP RESOURCE GROUP test_resql_resource_group
+
+CREATE RESOURCE GROUP test_resql_resource_group;
+
+ALTER RESOURCE GROUP test_resql_resource_group
+    SET cpu_rate_limit = 0, dirty_rate_limit = 0;
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/test.json b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/test.json
new file mode 100644
index 00000000..03065361
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/test.json
@@ -0,0 +1,48 @@
+{
+  "prerequisite": {
+    "minVer": 90400,
+    "maxVer": null,
+    "type": "ppas"
+  },
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Resource groups",
+      "endpoint": "NODE-resource_group.obj",
+      "sql_endpoint": "NODE-resource_group.sql_id",
+      "data": {
+          "name": "test_resql_resource_group",
+          "cpu_rate_limit": 0,
+          "dirty_rate_limit": 0
+      },
+      "expected_sql_file": "create_resource_group.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Resource groups name",
+      "endpoint": "NODE-resource_group.obj_id",
+      "sql_endpoint": "NODE-resource_group.sql_id",
+      "data": {
+        "name": "new_test_resql_resource_group"
+      },
+      "expected_sql_file": "alter_resource_group_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Resource groups options",
+      "endpoint": "NODE-resource_group.obj_id",
+      "sql_endpoint": "NODE-resource_group.sql_id",
+      "data": {
+        "cpu_rate_limit": 1,
+        "dirty_rate_limit": 5
+      },
+      "expected_sql_file": "alter_resource_group_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop Resource groups",
+      "endpoint": "NODE-resource_group.obj_id",
+      "data": {}
+    }
+  ]
+}
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_description.sql
new file mode 100644
index 00000000..7879f300
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_description.sql
@@ -0,0 +1,12 @@
+-- Role: test_resql_role_pg91
+-- DROP ROLE test_resql_role_pg91;
+
+CREATE ROLE test_resql_role_pg91 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE test_resql_role_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_name.sql
new file mode 100644
index 00000000..3122bd02
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_name.sql
@@ -0,0 +1,12 @@
+-- Role: new_test_resql_role_pg91
+-- DROP ROLE new_test_resql_role_pg91;
+
+CREATE ROLE new_test_resql_role_pg91 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE new_test_resql_role_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_options.sql
new file mode 100644
index 00000000..8d205ec6
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_options.sql
@@ -0,0 +1,15 @@
+-- Role: new_test_resql_role_pg91
+-- DROP ROLE new_test_resql_role_pg91;
+
+CREATE ROLE new_test_resql_role_pg91 WITH
+  NOLOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = new_test_resql_role_pg91;
+
+COMMENT ON ROLE new_test_resql_role_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_description.sql
new file mode 100644
index 00000000..e34aa437
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_description.sql
@@ -0,0 +1,15 @@
+-- User: test_resql_user_pg91
+-- DROP USER test_resql_user_pg91;
+
+CREATE USER test_resql_user_pg91 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = test_resql_user_pg91;
+
+COMMENT ON ROLE test_resql_user_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_name.sql
new file mode 100644
index 00000000..0f1078d4
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_name.sql
@@ -0,0 +1,15 @@
+-- User: new_test_resql_user_pg91
+-- DROP USER new_test_resql_user_pg91;
+
+CREATE USER new_test_resql_user_pg91 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = new_test_resql_user_pg91;
+
+COMMENT ON ROLE new_test_resql_user_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_options.sql
new file mode 100644
index 00000000..8e6e636a
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_options.sql
@@ -0,0 +1,12 @@
+-- User: new_test_resql_user_pg91
+-- DROP USER new_test_resql_user_pg91;
+
+CREATE USER new_test_resql_user_pg91 WITH
+  LOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE new_test_resql_user_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_role.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_role.sql
new file mode 100644
index 00000000..7f9bf63d
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_role.sql
@@ -0,0 +1,10 @@
+-- Role: test_resql_role_pg91
+-- DROP ROLE test_resql_role_pg91;
+
+CREATE ROLE test_resql_role_pg91 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_user.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_user.sql
new file mode 100644
index 00000000..12da84a1
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_user.sql
@@ -0,0 +1,13 @@
+-- User: test_resql_user_pg91
+-- DROP USER test_resql_user_pg91;
+
+CREATE USER test_resql_user_pg91 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = test_resql_user_pg91;
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/test.json b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/test.json
new file mode 100644
index 00000000..0e8c6994
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/test.json
@@ -0,0 +1,124 @@
+{
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Role",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_role_pg91",
+          "rolcanlogin": false,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": false,
+          "rolcreaterole": false,
+          "rolcreatedb": false,
+          "rolinherit": true,
+          "rolcatupdate": false,
+          "rolreplication": false,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_role.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_role_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_role_pg91"
+      },
+      "expected_sql_file": "alter_role_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": true,
+        "rolcreatedb": true
+      },
+      "expected_sql_file": "alter_role_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop Role",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    },
+    {
+      "type": "create",
+      "name": "Create User",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_user_pg91",
+          "rolcanlogin": true,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": true,
+          "rolcreaterole": true,
+          "rolcreatedb": true,
+          "rolinherit": true,
+          "rolcatupdate": true,
+          "rolreplication": true,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_user.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_user_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_user_pg91"
+      },
+      "expected_sql_file": "alter_user_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": false,
+        "rolcreatedb": false
+      },
+      "expected_sql_file": "alter_user_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop User",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    }
+  ]
+}
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_description.sql
new file mode 100644
index 00000000..7be33986
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_description.sql
@@ -0,0 +1,12 @@
+-- Role: test_resql_role_pg95
+-- DROP ROLE test_resql_role_pg95;
+
+CREATE ROLE test_resql_role_pg95 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE test_resql_role_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_name.sql
new file mode 100644
index 00000000..563404c7
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_name.sql
@@ -0,0 +1,12 @@
+-- Role: new_test_resql_role_pg95
+-- DROP ROLE new_test_resql_role_pg95;
+
+CREATE ROLE new_test_resql_role_pg95 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE new_test_resql_role_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options.sql
new file mode 100644
index 00000000..980bad23
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options.sql
@@ -0,0 +1,12 @@
+-- Role: new_test_resql_role_pg95
+-- DROP ROLE new_test_resql_role_pg95;
+
+CREATE ROLE new_test_resql_role_pg95 WITH
+  NOLOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE new_test_resql_role_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_description.sql
new file mode 100644
index 00000000..2eed6025
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_description.sql
@@ -0,0 +1,12 @@
+-- User: test_resql_user_pg95
+-- DROP USER test_resql_user_pg95;
+
+CREATE USER test_resql_user_pg95 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE test_resql_user_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_name.sql
new file mode 100644
index 00000000..07454a79
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_name.sql
@@ -0,0 +1,12 @@
+-- User: new_test_resql_user_pg95
+-- DROP USER new_test_resql_user_pg95;
+
+CREATE USER new_test_resql_user_pg95 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE new_test_resql_user_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_options.sql
new file mode 100644
index 00000000..5035fbb9
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_options.sql
@@ -0,0 +1,12 @@
+-- User: new_test_resql_user_pg95
+-- DROP USER new_test_resql_user_pg95;
+
+CREATE USER new_test_resql_user_pg95 WITH
+  LOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE new_test_resql_user_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_role.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_role.sql
new file mode 100644
index 00000000..51216477
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_role.sql
@@ -0,0 +1,10 @@
+-- Role: test_resql_role_pg95
+-- DROP ROLE test_resql_role_pg95;
+
+CREATE ROLE test_resql_role_pg95 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_user.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_user.sql
new file mode 100644
index 00000000..476384fb
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_user.sql
@@ -0,0 +1,10 @@
+-- User: test_resql_user_pg95
+-- DROP USER test_resql_user_pg95;
+
+CREATE USER test_resql_user_pg95 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
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
new file mode 100644
index 00000000..e902b3ee
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/test.json
@@ -0,0 +1,124 @@
+{
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Role",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_role_pg95",
+          "rolcanlogin": false,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": false,
+          "rolcreaterole": false,
+          "rolcreatedb": false,
+          "rolinherit": true,
+          "rolcatupdate": false,
+          "rolreplication": false,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_role.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_role_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_role_pg95"
+      },
+      "expected_sql_file": "alter_role_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": true,
+        "rolcreatedb": true
+      },
+      "expected_sql_file": "alter_role_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop Role",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    },
+    {
+      "type": "create",
+      "name": "Create User",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_user_pg95",
+          "rolcanlogin": true,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": true,
+          "rolcreaterole": true,
+          "rolcreatedb": true,
+          "rolinherit": true,
+          "rolcatupdate": true,
+          "rolreplication": true,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_user.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_user_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_user_pg95"
+      },
+      "expected_sql_file": "alter_user_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": false,
+        "rolcreatedb": false
+      },
+      "expected_sql_file": "alter_user_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop User",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    }
+  ]
+}
diff --git a/web/regression/python_test_utils/test_utils.py b/web/regression/python_test_utils/test_utils.py
index 96a009bd..74afc10b 100644
--- a/web/regression/python_test_utils/test_utils.py
+++ b/web/regression/python_test_utils/test_utils.py
@@ -991,6 +991,8 @@ def get_server_type(server):
         pg_cursor.execute("SELECT version()")
         version_string = pg_cursor.fetchone()
         connection.close()
+        if type(version_string) == tuple:
+            version_string = version_string[0]
 
         if "Greenplum Database" in version_string:
             return 'gpdb'
diff --git a/web/regression/re_sql/tests/test_resql.py b/web/regression/re_sql/tests/test_resql.py
index 369c8ddf..ebe80c49 100644
--- a/web/regression/re_sql/tests/test_resql.py
+++ b/web/regression/re_sql/tests/test_resql.py
@@ -6,7 +6,7 @@
 # This software is released under the PostgreSQL Licence
 #
 ##########################################################################
-
+from __future__ import print_function
 import json
 import os
 
@@ -64,6 +64,7 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
     def runTest(self):
         # Create the module list on which reverse engineering sql test
         # cases will be executed.
+        server_info = self.server_information
         resql_module_list = create_resql_module_list(
             BaseTestGenerator.re_sql_module_list,
             BaseTestGenerator.exclude_pkgs)
@@ -84,7 +85,47 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
                                                       filename)
                     with open(complete_file_name) as jsonfp:
                         data = json.load(jsonfp)
-                        for key, scenarios in data.items():
+                        # CHECK SERVER VERSION & TYPE PRECONDITION
+                        if 'prerequisite' in data and \
+                                data['prerequisite'] is not None:
+                            prerequisite_data = data['prerequisite']
+                            if 'type' in prerequisite_data and \
+                                    prerequisite_data['type']:
+                                if server_info['type'] != \
+                                        prerequisite_data['type']:
+                                    self.skipTest(
+                                        "Server(Type: #{0}) is not supported"
+                                        " for the {1} module".format(
+                                            prerequisite_data['type'],
+                                            module.replace('_', ' ').title()
+                                        )
+                                    )
+
+                            if 'minVer' in prerequisite_data and \
+                                    prerequisite_data['minVer']:
+                                if server_info['server_version'] < \
+                                        prerequisite_data['minVer']:
+                                    self.skipTest(
+                                        "Server version is not supported"
+                                        " for the {0} module".format(
+                                            module.replace('_', ' ').title()
+                                        )
+                                    )
+
+                            if 'maxVer' in prerequisite_data and \
+                                    prerequisite_data['maxVer']:
+                                if server_info['server_version'] > \
+                                        prerequisite_data['maxVer']:
+                                    self.skipTest(
+                                        "Server version is not supported"
+                                        " for the {0} module".format(
+                                            module.replace('_', ' ').title()
+                                        )
+                                    )
+                        tests_scenarios = {}
+                        tests_scenarios['scenarios'] = data['scenarios']
+
+                        for key, scenarios in tests_scenarios.items():
                             self.execute_test_case(scenarios)
 
     def tearDown(self):
@@ -207,6 +248,7 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
         # Remove first and last double quotes
         if resp_sql.startswith('"') and resp_sql.endswith('"'):
             resp_sql = resp_sql[1:-1]
+            resp_sql = resp_sql.rstrip()
 
         # Check if expected sql is given in JSON file or path of the output
         # file is given
diff --git a/web/regression/runtests.py b/web/regression/runtests.py
index 1d4fa54b..cf9ab19c 100644
--- a/web/regression/runtests.py
+++ b/web/regression/runtests.py
@@ -444,6 +444,7 @@ if __name__ == '__main__':
 
             # Add the server version in server information
             server_information['server_version'] = connection.server_version
+            server_information['type'] = server['type']
 
             # Drop the database if already exists.
             test_utils.drop_database(connection, test_db_name)


^ permalink  raw  reply  [nested|flat] 11+ messages in thread

* Re: RE-SQL tests for Roles & Resource Group nodes
  2019-07-01 05:31 RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-01 14:25 ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  2019-07-02 07:16   ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-02 07:17     ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
@ 2019-07-02 12:22       ` Dave Page <[email protected]>
  2019-07-03 03:53         ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  0 siblings, 1 reply; 11+ messages in thread

From: Dave Page @ 2019-07-02 12:22 UTC (permalink / raw)
  To: Murtuza Zabuawala <[email protected]>; +Cc: pgadmin-hackers

Hi

On Tue, Jul 2, 2019 at 8:17 AM Murtuza Zabuawala <
[email protected]> wrote:

> ++ Attaching patch
>
> On Tue, Jul 2, 2019 at 12:46 PM Murtuza Zabuawala <
> [email protected]> wrote:
>
>> Hi Dave,
>>
>> Please find the updated patch,
>>
>> - Added a mechanism to check for supported minimum/maximum version and a
>> server type in the framework.
>>
>
There's still a problem with this I'm afraid - it says in the summary that
the re_sql test cases were all skipped, which is not the case. I think we
should just skip the irrelevant tests in the re_sql module, but not mark
the entire module as being skipped:

=============Running the test cases for 'Regression - PG 11'=============

runTest (regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)

Reverse Engineered SQL Test Cases


Create IMPLICIT Cast

Alter IMPLICIT Cast

Drop IMPLICIT Cast

Create EXPLICIT Cast

Alter EXPLICIT Cast

Drop EXPLICIT Cast

 ... skipped 'Server(Type: #ppas) is not supported for the Resource Groups
module'


----------------------------------------------------------------------

Ran 1 test in 0.480s


OK (skipped=1)


======================================================================

Test Result Summary

======================================================================


Regression - PG 11:


0 tests passed

0 tests failed

1 test skipped:

ReverseEngineeredSQLTestCases (Reverse Engineered SQL Test Cases)


======================================================================

-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


^ permalink  raw  reply  [nested|flat] 11+ messages in thread

* Re: RE-SQL tests for Roles & Resource Group nodes
  2019-07-01 05:31 RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-01 14:25 ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  2019-07-02 07:16   ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-02 07:17     ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-02 12:22       ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
@ 2019-07-03 03:53         ` Murtuza Zabuawala <[email protected]>
  2019-07-03 07:34           ` Re: RE-SQL tests for Roles & Resource Group nodes Akshay Joshi <[email protected]>
  0 siblings, 1 reply; 11+ messages in thread

From: Murtuza Zabuawala @ 2019-07-03 03:53 UTC (permalink / raw)
  To: Dave Page <[email protected]>; +Cc: pgadmin-hackers

Hi Dave,

PFA updated patch.

Please note that our framework considers test cases from all the modules as
one single test case, If we need module wise detailed summary report for
the reverse engineered SQL tests then we may have to change the framework.


Regards,
Murtuza


On Tue, Jul 2, 2019 at 5:52 PM Dave Page <[email protected]> wrote:

> Hi
>
> On Tue, Jul 2, 2019 at 8:17 AM Murtuza Zabuawala <
> [email protected]> wrote:
>
>> ++ Attaching patch
>>
>> On Tue, Jul 2, 2019 at 12:46 PM Murtuza Zabuawala <
>> [email protected]> wrote:
>>
>>> Hi Dave,
>>>
>>> Please find the updated patch,
>>>
>>> - Added a mechanism to check for supported minimum/maximum version and a
>>> server type in the framework.
>>>
>>
> There's still a problem with this I'm afraid - it says in the summary that
> the re_sql test cases were all skipped, which is not the case. I think we
> should just skip the irrelevant tests in the re_sql module, but not mark
> the entire module as being skipped:
>

> =============Running the test cases for 'Regression - PG 11'=============
>
> runTest (regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)
>
> Reverse Engineered SQL Test Cases
>
>
> Create IMPLICIT Cast
>
> Alter IMPLICIT Cast
>
> Drop IMPLICIT Cast
>
> Create EXPLICIT Cast
>
> Alter EXPLICIT Cast
>
> Drop EXPLICIT Cast
>
>  ... skipped 'Server(Type: #ppas) is not supported for the Resource
> Groups module'
>
>
> ----------------------------------------------------------------------
>
> Ran 1 test in 0.480s
>
>
> OK (skipped=1)
>
>
> ======================================================================
>
> Test Result Summary
>
> ======================================================================
>
>
> Regression - PG 11:
>
>
> 0 tests passed
>
> 0 tests failed
>
> 1 test skipped:
>
> ReverseEngineeredSQLTestCases (Reverse Engineered SQL Test Cases)
>
>
> ======================================================================
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>


Attachments:

  [application/octet-stream] RM_4415_v2.diff (38.4K, 3-RM_4415_v2.diff)
  download | inline diff:
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py b/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py
index 9047b7f7..05763e14 100644
--- a/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py
@@ -226,8 +226,9 @@ class ResourceGroupView(NodeView):
                         "Connection to the server has been lost."
                     )
                 )
-
-            self.template_path = 'resource_groups/sql'
+            self.sql_path = 'resource_groups/sql/#{0}#'.format(
+                self.manager.version
+            )
             return f(*args, **kwargs)
 
         return wrap
@@ -242,7 +243,7 @@ class ResourceGroupView(NodeView):
             gid: Server Group ID
             sid: Server ID
         """
-        sql = render_template("/".join([self.template_path, 'properties.sql']))
+        sql = render_template("/".join([self.sql_path, 'properties.sql']))
         status, res = self.conn.execute_dict(sql)
 
         if not status:
@@ -263,7 +264,7 @@ class ResourceGroupView(NodeView):
             sid: Server ID
         """
 
-        sql = render_template("/".join([self.template_path, 'nodes.sql']),
+        sql = render_template("/".join([self.sql_path, 'nodes.sql']),
                               rgid=rg_id)
         status, result = self.conn.execute_2darray(sql)
         if not status:
@@ -295,7 +296,7 @@ class ResourceGroupView(NodeView):
             sid: Server ID
         """
         res = []
-        sql = render_template("/".join([self.template_path, 'nodes.sql']))
+        sql = render_template("/".join([self.sql_path, 'nodes.sql']))
         status, result = self.conn.execute_2darray(sql)
         if not status:
             return internal_server_error(errormsg=result)
@@ -326,7 +327,7 @@ class ResourceGroupView(NodeView):
             rg_id: Resource Group ID
         """
         sql = render_template(
-            "/".join([self.template_path, 'properties.sql']), rgid=rg_id)
+            "/".join([self.sql_path, 'properties.sql']), rgid=rg_id)
         status, res = self.conn.execute_dict(sql)
 
         if not status:
@@ -368,7 +369,7 @@ class ResourceGroupView(NodeView):
         try:
             # Below logic will create new resource group
             sql = render_template(
-                "/".join([self.template_path, 'create.sql']),
+                "/".join([self.sql_path, 'create.sql']),
                 rgname=data['name'], conn=self.conn
             )
             if sql and sql.strip('\n') and sql.strip(' '):
@@ -380,7 +381,7 @@ class ResourceGroupView(NodeView):
             # resource group you can't run multiple commands in one
             # transaction.
             sql = render_template(
-                "/".join([self.template_path, 'update.sql']),
+                "/".join([self.sql_path, 'update.sql']),
                 data=data, conn=self.conn
             )
             # Checking if we are not executing empty query
@@ -391,7 +392,7 @@ class ResourceGroupView(NodeView):
             # Below logic is used to fetch the oid of the newly created
             # resource group
             sql = render_template(
-                "/".join([self.template_path, 'getoid.sql']),
+                "/".join([self.sql_path, 'getoid.sql']),
                 rgname=data['name']
             )
             # Checking if we are not executing empty query
@@ -431,7 +432,7 @@ class ResourceGroupView(NodeView):
 
         try:
             sql = render_template(
-                "/".join([self.template_path, 'properties.sql']), rgid=rg_id)
+                "/".join([self.sql_path, 'properties.sql']), rgid=rg_id)
             status, res = self.conn.execute_dict(sql)
             if not status:
                 return internal_server_error(errormsg=res)
@@ -442,7 +443,7 @@ class ResourceGroupView(NodeView):
 
             if data['name'] != old_data['name']:
                 sql = render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     oldname=old_data['name'], newname=data['name'],
                     conn=self.conn
                 )
@@ -458,7 +459,7 @@ class ResourceGroupView(NodeView):
             if data['cpu_rate_limit'] != old_data['cpu_rate_limit'] or \
                     data['dirty_rate_limit'] != old_data['dirty_rate_limit']:
                 sql = render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     data=data, conn=self.conn
                 )
                 if sql and sql.strip('\n') and sql.strip(' '):
@@ -499,7 +500,7 @@ class ResourceGroupView(NodeView):
             for rg_id in data['ids']:
                 # Get name for resource group from rg_id
                 sql = render_template(
-                    "/".join([self.template_path, 'delete.sql']),
+                    "/".join([self.sql_path, 'delete.sql']),
                     rgid=rg_id, conn=self.conn
                 )
                 status, rgname = self.conn.execute_scalar(sql)
@@ -520,7 +521,7 @@ class ResourceGroupView(NodeView):
 
                 # drop resource group
                 sql = render_template(
-                    "/".join([self.template_path, 'delete.sql']),
+                    "/".join([self.sql_path, 'delete.sql']),
                     rgname=rgname, conn=self.conn
                 )
                 status, res = self.conn.execute_scalar(sql)
@@ -580,7 +581,7 @@ class ResourceGroupView(NodeView):
         ]
         if rg_id is not None:
             sql = render_template(
-                "/".join([self.template_path, 'properties.sql']), rgid=rg_id)
+                "/".join([self.sql_path, 'properties.sql']), rgid=rg_id)
             status, res = self.conn.execute_dict(sql)
             if not status:
                 return internal_server_error(errormsg=res)
@@ -599,7 +600,7 @@ class ResourceGroupView(NodeView):
             if data['name'] != old_data['name']:
                 name_changed = True
                 sql = render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     oldname=old_data['name'], newname=data['name'],
                     conn=self.conn
                 )
@@ -609,12 +610,12 @@ class ResourceGroupView(NodeView):
                     sql += "\n-- Following query will be executed in a " \
                            "separate transaction\n"
                 sql += render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     data=data, conn=self.conn
                 )
         else:
             sql = render_template(
-                "/".join([self.template_path, 'create.sql']),
+                "/".join([self.sql_path, 'create.sql']),
                 rgname=data['name'], conn=self.conn
             )
 
@@ -630,7 +631,7 @@ class ResourceGroupView(NodeView):
                 sql += "\n-- Following query will be executed in a " \
                        "separate transaction\n"
                 sql += render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     data=data, conn=self.conn
                 )
 
@@ -647,7 +648,7 @@ class ResourceGroupView(NodeView):
             rg_id: Resource Group ID
         """
         sql = render_template(
-            "/".join([self.template_path, 'properties.sql']), rgid=rg_id
+            "/".join([self.sql_path, 'properties.sql']), rgid=rg_id
         )
         status, res = self.conn.execute_dict(sql)
         if not status:
@@ -661,13 +662,13 @@ class ResourceGroupView(NodeView):
         old_data = dict(res['rows'][0])
 
         sql = render_template(
-            "/".join([self.template_path, 'create.sql']),
+            "/".join([self.sql_path, 'create.sql']),
             display_comments=True,
             rgname=old_data['name'], conn=self.conn
         )
         sql += "\n"
         sql += render_template(
-            "/".join([self.template_path, 'update.sql']),
+            "/".join([self.sql_path, 'update.sql']),
             data=old_data, conn=self.conn
         )
 
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/create.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/create.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/create.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/create.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/delete.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/delete.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/delete.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/delete.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/getoid.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/getoid.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/getoid.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/getoid.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/nodes.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/nodes.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/nodes.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/properties.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/properties.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/properties.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/properties.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/update.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/update.sql
similarity index 97%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/update.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/update.sql
index 2b19e108..e5c0a234 100644
--- a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/update.sql
@@ -6,4 +6,4 @@ ALTER RESOURCE GROUP {{ conn|qtIdent(oldname) }} RENAME TO {{ conn|qtIdent(newna
 {% if data %}
 ALTER RESOURCE GROUP {{ conn|qtIdent(data.name) }}
     SET cpu_rate_limit = {{data.cpu_rate_limit|default(0)}}, dirty_rate_limit = {{data.dirty_rate_limit|default(0)}};
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_name.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_name.sql
new file mode 100644
index 00000000..c774cbf5
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_name.sql
@@ -0,0 +1,8 @@
+-- RESOURCE GROUP: new_test_resql_resource_group
+
+-- DROP RESOURCE GROUP new_test_resql_resource_group
+
+CREATE RESOURCE GROUP new_test_resql_resource_group;
+
+ALTER RESOURCE GROUP new_test_resql_resource_group
+    SET cpu_rate_limit = 0, dirty_rate_limit = 0;
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_options.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_options.sql
new file mode 100644
index 00000000..fb21309d
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_options.sql
@@ -0,0 +1,8 @@
+-- RESOURCE GROUP: new_test_resql_resource_group
+
+-- DROP RESOURCE GROUP new_test_resql_resource_group
+
+CREATE RESOURCE GROUP new_test_resql_resource_group;
+
+ALTER RESOURCE GROUP new_test_resql_resource_group
+    SET cpu_rate_limit = 1, dirty_rate_limit = 5;
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/create_resource_group.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/create_resource_group.sql
new file mode 100644
index 00000000..3eb35a6a
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/create_resource_group.sql
@@ -0,0 +1,8 @@
+-- RESOURCE GROUP: test_resql_resource_group
+
+-- DROP RESOURCE GROUP test_resql_resource_group
+
+CREATE RESOURCE GROUP test_resql_resource_group;
+
+ALTER RESOURCE GROUP test_resql_resource_group
+    SET cpu_rate_limit = 0, dirty_rate_limit = 0;
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/test.json b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/test.json
new file mode 100644
index 00000000..03065361
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/test.json
@@ -0,0 +1,48 @@
+{
+  "prerequisite": {
+    "minVer": 90400,
+    "maxVer": null,
+    "type": "ppas"
+  },
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Resource groups",
+      "endpoint": "NODE-resource_group.obj",
+      "sql_endpoint": "NODE-resource_group.sql_id",
+      "data": {
+          "name": "test_resql_resource_group",
+          "cpu_rate_limit": 0,
+          "dirty_rate_limit": 0
+      },
+      "expected_sql_file": "create_resource_group.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Resource groups name",
+      "endpoint": "NODE-resource_group.obj_id",
+      "sql_endpoint": "NODE-resource_group.sql_id",
+      "data": {
+        "name": "new_test_resql_resource_group"
+      },
+      "expected_sql_file": "alter_resource_group_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Resource groups options",
+      "endpoint": "NODE-resource_group.obj_id",
+      "sql_endpoint": "NODE-resource_group.sql_id",
+      "data": {
+        "cpu_rate_limit": 1,
+        "dirty_rate_limit": 5
+      },
+      "expected_sql_file": "alter_resource_group_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop Resource groups",
+      "endpoint": "NODE-resource_group.obj_id",
+      "data": {}
+    }
+  ]
+}
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_description.sql
new file mode 100644
index 00000000..7879f300
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_description.sql
@@ -0,0 +1,12 @@
+-- Role: test_resql_role_pg91
+-- DROP ROLE test_resql_role_pg91;
+
+CREATE ROLE test_resql_role_pg91 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE test_resql_role_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_name.sql
new file mode 100644
index 00000000..3122bd02
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_name.sql
@@ -0,0 +1,12 @@
+-- Role: new_test_resql_role_pg91
+-- DROP ROLE new_test_resql_role_pg91;
+
+CREATE ROLE new_test_resql_role_pg91 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE new_test_resql_role_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_options.sql
new file mode 100644
index 00000000..8d205ec6
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_options.sql
@@ -0,0 +1,15 @@
+-- Role: new_test_resql_role_pg91
+-- DROP ROLE new_test_resql_role_pg91;
+
+CREATE ROLE new_test_resql_role_pg91 WITH
+  NOLOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = new_test_resql_role_pg91;
+
+COMMENT ON ROLE new_test_resql_role_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_description.sql
new file mode 100644
index 00000000..e34aa437
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_description.sql
@@ -0,0 +1,15 @@
+-- User: test_resql_user_pg91
+-- DROP USER test_resql_user_pg91;
+
+CREATE USER test_resql_user_pg91 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = test_resql_user_pg91;
+
+COMMENT ON ROLE test_resql_user_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_name.sql
new file mode 100644
index 00000000..0f1078d4
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_name.sql
@@ -0,0 +1,15 @@
+-- User: new_test_resql_user_pg91
+-- DROP USER new_test_resql_user_pg91;
+
+CREATE USER new_test_resql_user_pg91 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = new_test_resql_user_pg91;
+
+COMMENT ON ROLE new_test_resql_user_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_options.sql
new file mode 100644
index 00000000..8e6e636a
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_options.sql
@@ -0,0 +1,12 @@
+-- User: new_test_resql_user_pg91
+-- DROP USER new_test_resql_user_pg91;
+
+CREATE USER new_test_resql_user_pg91 WITH
+  LOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE new_test_resql_user_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_role.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_role.sql
new file mode 100644
index 00000000..7f9bf63d
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_role.sql
@@ -0,0 +1,10 @@
+-- Role: test_resql_role_pg91
+-- DROP ROLE test_resql_role_pg91;
+
+CREATE ROLE test_resql_role_pg91 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_user.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_user.sql
new file mode 100644
index 00000000..12da84a1
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_user.sql
@@ -0,0 +1,13 @@
+-- User: test_resql_user_pg91
+-- DROP USER test_resql_user_pg91;
+
+CREATE USER test_resql_user_pg91 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = test_resql_user_pg91;
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/test.json b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/test.json
new file mode 100644
index 00000000..0e8c6994
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/test.json
@@ -0,0 +1,124 @@
+{
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Role",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_role_pg91",
+          "rolcanlogin": false,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": false,
+          "rolcreaterole": false,
+          "rolcreatedb": false,
+          "rolinherit": true,
+          "rolcatupdate": false,
+          "rolreplication": false,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_role.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_role_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_role_pg91"
+      },
+      "expected_sql_file": "alter_role_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": true,
+        "rolcreatedb": true
+      },
+      "expected_sql_file": "alter_role_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop Role",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    },
+    {
+      "type": "create",
+      "name": "Create User",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_user_pg91",
+          "rolcanlogin": true,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": true,
+          "rolcreaterole": true,
+          "rolcreatedb": true,
+          "rolinherit": true,
+          "rolcatupdate": true,
+          "rolreplication": true,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_user.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_user_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_user_pg91"
+      },
+      "expected_sql_file": "alter_user_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": false,
+        "rolcreatedb": false
+      },
+      "expected_sql_file": "alter_user_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop User",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    }
+  ]
+}
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_description.sql
new file mode 100644
index 00000000..7be33986
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_description.sql
@@ -0,0 +1,12 @@
+-- Role: test_resql_role_pg95
+-- DROP ROLE test_resql_role_pg95;
+
+CREATE ROLE test_resql_role_pg95 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE test_resql_role_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_name.sql
new file mode 100644
index 00000000..563404c7
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_name.sql
@@ -0,0 +1,12 @@
+-- Role: new_test_resql_role_pg95
+-- DROP ROLE new_test_resql_role_pg95;
+
+CREATE ROLE new_test_resql_role_pg95 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE new_test_resql_role_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options.sql
new file mode 100644
index 00000000..980bad23
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options.sql
@@ -0,0 +1,12 @@
+-- Role: new_test_resql_role_pg95
+-- DROP ROLE new_test_resql_role_pg95;
+
+CREATE ROLE new_test_resql_role_pg95 WITH
+  NOLOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE new_test_resql_role_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_description.sql
new file mode 100644
index 00000000..2eed6025
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_description.sql
@@ -0,0 +1,12 @@
+-- User: test_resql_user_pg95
+-- DROP USER test_resql_user_pg95;
+
+CREATE USER test_resql_user_pg95 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE test_resql_user_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_name.sql
new file mode 100644
index 00000000..07454a79
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_name.sql
@@ -0,0 +1,12 @@
+-- User: new_test_resql_user_pg95
+-- DROP USER new_test_resql_user_pg95;
+
+CREATE USER new_test_resql_user_pg95 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE new_test_resql_user_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_options.sql
new file mode 100644
index 00000000..5035fbb9
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_options.sql
@@ -0,0 +1,12 @@
+-- User: new_test_resql_user_pg95
+-- DROP USER new_test_resql_user_pg95;
+
+CREATE USER new_test_resql_user_pg95 WITH
+  LOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE new_test_resql_user_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_role.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_role.sql
new file mode 100644
index 00000000..51216477
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_role.sql
@@ -0,0 +1,10 @@
+-- Role: test_resql_role_pg95
+-- DROP ROLE test_resql_role_pg95;
+
+CREATE ROLE test_resql_role_pg95 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_user.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_user.sql
new file mode 100644
index 00000000..476384fb
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_user.sql
@@ -0,0 +1,10 @@
+-- User: test_resql_user_pg95
+-- DROP USER test_resql_user_pg95;
+
+CREATE USER test_resql_user_pg95 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
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
new file mode 100644
index 00000000..e902b3ee
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/test.json
@@ -0,0 +1,124 @@
+{
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Role",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_role_pg95",
+          "rolcanlogin": false,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": false,
+          "rolcreaterole": false,
+          "rolcreatedb": false,
+          "rolinherit": true,
+          "rolcatupdate": false,
+          "rolreplication": false,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_role.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_role_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_role_pg95"
+      },
+      "expected_sql_file": "alter_role_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": true,
+        "rolcreatedb": true
+      },
+      "expected_sql_file": "alter_role_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop Role",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    },
+    {
+      "type": "create",
+      "name": "Create User",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_user_pg95",
+          "rolcanlogin": true,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": true,
+          "rolcreaterole": true,
+          "rolcreatedb": true,
+          "rolinherit": true,
+          "rolcatupdate": true,
+          "rolreplication": true,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_user.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_user_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_user_pg95"
+      },
+      "expected_sql_file": "alter_user_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": false,
+        "rolcreatedb": false
+      },
+      "expected_sql_file": "alter_user_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop User",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    }
+  ]
+}
diff --git a/web/regression/python_test_utils/test_utils.py b/web/regression/python_test_utils/test_utils.py
index 96a009bd..74afc10b 100644
--- a/web/regression/python_test_utils/test_utils.py
+++ b/web/regression/python_test_utils/test_utils.py
@@ -991,6 +991,8 @@ def get_server_type(server):
         pg_cursor.execute("SELECT version()")
         version_string = pg_cursor.fetchone()
         connection.close()
+        if type(version_string) == tuple:
+            version_string = version_string[0]
 
         if "Greenplum Database" in version_string:
             return 'gpdb'
diff --git a/web/regression/re_sql/tests/test_resql.py b/web/regression/re_sql/tests/test_resql.py
index 369c8ddf..36b242fd 100644
--- a/web/regression/re_sql/tests/test_resql.py
+++ b/web/regression/re_sql/tests/test_resql.py
@@ -6,10 +6,10 @@
 # This software is released under the PostgreSQL Licence
 #
 ##########################################################################
-
+from __future__ import print_function
 import json
 import os
-
+import sys
 from flask import url_for
 from pgadmin.utils.route import BaseTestGenerator
 from regression.python_test_utils import test_utils as utils
@@ -64,6 +64,7 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
     def runTest(self):
         # Create the module list on which reverse engineering sql test
         # cases will be executed.
+        server_info = self.server_information
         resql_module_list = create_resql_module_list(
             BaseTestGenerator.re_sql_module_list,
             BaseTestGenerator.exclude_pkgs)
@@ -84,8 +85,61 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
                                                       filename)
                     with open(complete_file_name) as jsonfp:
                         data = json.load(jsonfp)
-                        for key, scenarios in data.items():
-                            self.execute_test_case(scenarios)
+                        # CHECK SERVER VERSION & TYPE PRECONDITION
+                        skip_test = False
+                        if 'prerequisite' in data and \
+                                data['prerequisite'] is not None:
+                            prerequisite_data = data['prerequisite']
+                            if 'type' in prerequisite_data and \
+                                    prerequisite_data['type']:
+                                if server_info['type'] != \
+                                        prerequisite_data['type']:
+                                    skip_test = True
+                                    print(
+                                        "\n\n"
+                                        "Server(Type: #{0}) is not supported"
+                                        " for the {1} module - Skipped".format(
+                                            prerequisite_data['type'],
+                                            module.replace('_', ' ').title()
+                                        ),
+                                        file=sys.stderr
+                                    )
+
+                            if 'minVer' in prerequisite_data and \
+                                    prerequisite_data['minVer']:
+                                if server_info['server_version'] < \
+                                        prerequisite_data['minVer']:
+                                    skip_test = True
+                                    print(
+                                        "\n\n"
+                                        "Server version({0}) is not supported"
+                                        " for the {1} module - Skipped".format(
+                                            server_info['server_version'],
+                                            module.replace('_', ' ').title()
+                                        ),
+                                        file=sys.stderr
+                                    )
+
+                            if 'maxVer' in prerequisite_data and \
+                                    prerequisite_data['maxVer']:
+                                if server_info['server_version'] > \
+                                        prerequisite_data['maxVer']:
+                                    skip_test = True
+                                    print(
+                                        "\n\n"
+                                        "Server version({0}) is not supported"
+                                        " for the {1} module - Skipped".format(
+                                            server_info['server_version'],
+                                            module.replace('_', ' ').title()
+                                        ),
+                                        file=sys.stderr
+                                    )
+
+                        if not skip_test:
+                            tests_scenarios = {}
+                            tests_scenarios['scenarios'] = data['scenarios']
+                            for key, scenarios in tests_scenarios.items():
+                                self.execute_test_case(scenarios)
 
     def tearDown(self):
         database_utils.disconnect_database(
@@ -207,6 +261,7 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
         # Remove first and last double quotes
         if resp_sql.startswith('"') and resp_sql.endswith('"'):
             resp_sql = resp_sql[1:-1]
+            resp_sql = resp_sql.rstrip()
 
         # Check if expected sql is given in JSON file or path of the output
         # file is given
diff --git a/web/regression/runtests.py b/web/regression/runtests.py
index 1d4fa54b..cf9ab19c 100644
--- a/web/regression/runtests.py
+++ b/web/regression/runtests.py
@@ -444,6 +444,7 @@ if __name__ == '__main__':
 
             # Add the server version in server information
             server_information['server_version'] = connection.server_version
+            server_information['type'] = server['type']
 
             # Drop the database if already exists.
             test_utils.drop_database(connection, test_db_name)


^ permalink  raw  reply  [nested|flat] 11+ messages in thread

* Re: RE-SQL tests for Roles & Resource Group nodes
  2019-07-01 05:31 RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-01 14:25 ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  2019-07-02 07:16   ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-02 07:17     ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-02 12:22       ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  2019-07-03 03:53         ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
@ 2019-07-03 07:34           ` Akshay Joshi <[email protected]>
  2019-07-03 12:06             ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  0 siblings, 1 reply; 11+ messages in thread

From: Akshay Joshi @ 2019-07-03 07:34 UTC (permalink / raw)
  To: Murtuza Zabuawala <[email protected]>; +Cc: Dave Page <[email protected]>; pgadmin-hackers

Hi Murtuza

I have tested the patch and I think below string should be modified:
Server(Type: #ppas) is not supported for the Resource Groups module -
Skipped
Server version(120000) is not supported for the Resource Groups module -
Skipped

It misleads, that server type 'ppas' is not supported for the Resource
Group, it should be changed to "Resource groups are not supported by PG -
Skipped". Similarly for version string should be ''Resource groups are not
supported by PPAS server less/greater than <server version>"

Apart from the above code looks good to me.

On Wed, Jul 3, 2019 at 9:23 AM Murtuza Zabuawala <
[email protected]> wrote:

> Hi Dave,
>
> PFA updated patch.
>
> Please note that our framework considers test cases from all the modules
> as one single test case, If we need module wise detailed summary report for
> the reverse engineered SQL tests then we may have to change the framework.
>
>
> Regards,
> Murtuza
>
>
> On Tue, Jul 2, 2019 at 5:52 PM Dave Page <[email protected]> wrote:
>
>> Hi
>>
>> On Tue, Jul 2, 2019 at 8:17 AM Murtuza Zabuawala <
>> [email protected]> wrote:
>>
>>> ++ Attaching patch
>>>
>>> On Tue, Jul 2, 2019 at 12:46 PM Murtuza Zabuawala <
>>> [email protected]> wrote:
>>>
>>>> Hi Dave,
>>>>
>>>> Please find the updated patch,
>>>>
>>>> - Added a mechanism to check for supported minimum/maximum version and
>>>> a server type in the framework.
>>>>
>>>
>> There's still a problem with this I'm afraid - it says in the summary
>> that the re_sql test cases were all skipped, which is not the case. I think
>> we should just skip the irrelevant tests in the re_sql module, but not mark
>> the entire module as being skipped:
>>
>
>> =============Running the test cases for 'Regression - PG 11'=============
>>
>> runTest (regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)
>>
>> Reverse Engineered SQL Test Cases
>>
>>
>> Create IMPLICIT Cast
>>
>> Alter IMPLICIT Cast
>>
>> Drop IMPLICIT Cast
>>
>> Create EXPLICIT Cast
>>
>> Alter EXPLICIT Cast
>>
>> Drop EXPLICIT Cast
>>
>>  ... skipped 'Server(Type: #ppas) is not supported for the Resource
>> Groups module'
>>
>>
>> ----------------------------------------------------------------------
>>
>> Ran 1 test in 0.480s
>>
>>
>> OK (skipped=1)
>>
>>
>> ======================================================================
>>
>> Test Result Summary
>>
>> ======================================================================
>>
>>
>> Regression - PG 11:
>>
>>
>> 0 tests passed
>>
>> 0 tests failed
>>
>> 1 test skipped:
>>
>> ReverseEngineeredSQLTestCases (Reverse Engineered SQL Test Cases)
>>
>>
>> ======================================================================
>>
>> --
>> Dave Page
>> Blog: http://pgsnake.blogspot.com
>> Twitter: @pgsnake
>>
>> EnterpriseDB UK: http://www.enterprisedb.com
>> The Enterprise PostgreSQL Company
>>
>

-- 
*Thanks & Regards*
*Akshay Joshi*

*Sr. Software Architect*
*EnterpriseDB Software India Private Limited*
*Mobile: +91 976-788-8246*


^ permalink  raw  reply  [nested|flat] 11+ messages in thread

* Re: RE-SQL tests for Roles & Resource Group nodes
  2019-07-01 05:31 RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-01 14:25 ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  2019-07-02 07:16   ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-02 07:17     ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-02 12:22       ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  2019-07-03 03:53         ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-03 07:34           ` Re: RE-SQL tests for Roles & Resource Group nodes Akshay Joshi <[email protected]>
@ 2019-07-03 12:06             ` Dave Page <[email protected]>
  2019-07-03 13:30               ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  0 siblings, 1 reply; 11+ messages in thread

From: Dave Page @ 2019-07-03 12:06 UTC (permalink / raw)
  To: Akshay Joshi <[email protected]>; +Cc: Murtuza Zabuawala <[email protected]>; pgadmin-hackers

Hi

On Wed, Jul 3, 2019 at 8:35 AM Akshay Joshi <[email protected]>
wrote:

> Hi Murtuza
>
> I have tested the patch and I think below string should be modified:
> Server(Type: #ppas) is not supported for the Resource Groups module -
> Skipped
> Server version(120000) is not supported for the Resource Groups module -
> Skipped
>
> It misleads, that server type 'ppas' is not supported for the Resource
> Group, it should be changed to "Resource groups are not supported by PG -
> Skipped". Similarly for version string should be ''Resource groups are not
> supported by PPAS server less/greater than <server version>"
>

Agreed.


>
>> Please note that our framework considers test cases from all the modules
>> as one single test case, If we need module wise detailed summary report for
>> the reverse engineered SQL tests then we may have to change the framework.
>>
>
We're just treating all the re-sql tests as one test in the higher-level
suite. Maybe we'd want to change that in the future, but I think it's fine
for now.


>
>>
>> Regards,
>> Murtuza
>>
>>
>> On Tue, Jul 2, 2019 at 5:52 PM Dave Page <[email protected]> wrote:
>>
>>> Hi
>>>
>>> On Tue, Jul 2, 2019 at 8:17 AM Murtuza Zabuawala <
>>> [email protected]> wrote:
>>>
>>>> ++ Attaching patch
>>>>
>>>> On Tue, Jul 2, 2019 at 12:46 PM Murtuza Zabuawala <
>>>> [email protected]> wrote:
>>>>
>>>>> Hi Dave,
>>>>>
>>>>> Please find the updated patch,
>>>>>
>>>>> - Added a mechanism to check for supported minimum/maximum version and
>>>>> a server type in the framework.
>>>>>
>>>>
>>> There's still a problem with this I'm afraid - it says in the summary
>>> that the re_sql test cases were all skipped, which is not the case. I think
>>> we should just skip the irrelevant tests in the re_sql module, but not mark
>>> the entire module as being skipped:
>>>
>>
>>> =============Running the test cases for 'Regression - PG 11'=============
>>>
>>> runTest
>>> (regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)
>>>
>>> Reverse Engineered SQL Test Cases
>>>
>>>
>>> Create IMPLICIT Cast
>>>
>>> Alter IMPLICIT Cast
>>>
>>> Drop IMPLICIT Cast
>>>
>>> Create EXPLICIT Cast
>>>
>>> Alter EXPLICIT Cast
>>>
>>> Drop EXPLICIT Cast
>>>
>>>  ... skipped 'Server(Type: #ppas) is not supported for the Resource
>>> Groups module'
>>>
>>>
>>> ----------------------------------------------------------------------
>>>
>>> Ran 1 test in 0.480s
>>>
>>>
>>> OK (skipped=1)
>>>
>>>
>>> ======================================================================
>>>
>>> Test Result Summary
>>>
>>> ======================================================================
>>>
>>>
>>> Regression - PG 11:
>>>
>>>
>>> 0 tests passed
>>>
>>> 0 tests failed
>>>
>>> 1 test skipped:
>>>
>>> ReverseEngineeredSQLTestCases (Reverse Engineered SQL Test Cases)
>>>
>>>
>>> ======================================================================
>>>
>>> --
>>> Dave Page
>>> Blog: http://pgsnake.blogspot.com
>>> Twitter: @pgsnake
>>>
>>> EnterpriseDB UK: http://www.enterprisedb.com
>>> The Enterprise PostgreSQL Company
>>>
>>
>
> --
> *Thanks & Regards*
> *Akshay Joshi*
>
> *Sr. Software Architect*
> *EnterpriseDB Software India Private Limited*
> *Mobile: +91 976-788-8246*
>


-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


^ permalink  raw  reply  [nested|flat] 11+ messages in thread

* Re: RE-SQL tests for Roles & Resource Group nodes
  2019-07-01 05:31 RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-01 14:25 ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  2019-07-02 07:16   ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-02 07:17     ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-02 12:22       ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  2019-07-03 03:53         ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-03 07:34           ` Re: RE-SQL tests for Roles & Resource Group nodes Akshay Joshi <[email protected]>
  2019-07-03 12:06             ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
@ 2019-07-03 13:30               ` Murtuza Zabuawala <[email protected]>
  2019-07-03 13:39                 ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  0 siblings, 1 reply; 11+ messages in thread

From: Murtuza Zabuawala @ 2019-07-03 13:30 UTC (permalink / raw)
  To: Dave Page <[email protected]>; +Cc: Akshay Joshi <[email protected]>; pgadmin-hackers

Hi,

PFA updated patch with corrections in the print messages.

--
Regards,
Murtuza Zabuawala
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



On Wed, Jul 3, 2019 at 5:36 PM Dave Page <[email protected]> wrote:

> Hi
>
> On Wed, Jul 3, 2019 at 8:35 AM Akshay Joshi <[email protected]>
> wrote:
>
>> Hi Murtuza
>>
>> I have tested the patch and I think below string should be modified:
>> Server(Type: #ppas) is not supported for the Resource Groups module -
>> Skipped
>> Server version(120000) is not supported for the Resource Groups module -
>> Skipped
>>
>> It misleads, that server type 'ppas' is not supported for the Resource
>> Group, it should be changed to "Resource groups are not supported by PG -
>> Skipped". Similarly for version string should be ''Resource groups are not
>> supported by PPAS server less/greater than <server version>"
>>
>
> Agreed.
>
>
>>
>>> Please note that our framework considers test cases from all the modules
>>> as one single test case, If we need module wise detailed summary report for
>>> the reverse engineered SQL tests then we may have to change the framework.
>>>
>>
> We're just treating all the re-sql tests as one test in the higher-level
> suite. Maybe we'd want to change that in the future, but I think it's fine
> for now.
>
>
>>
>>>
>>> Regards,
>>> Murtuza
>>>
>>>
>>> On Tue, Jul 2, 2019 at 5:52 PM Dave Page <[email protected]> wrote:
>>>
>>>> Hi
>>>>
>>>> On Tue, Jul 2, 2019 at 8:17 AM Murtuza Zabuawala <
>>>> [email protected]> wrote:
>>>>
>>>>> ++ Attaching patch
>>>>>
>>>>> On Tue, Jul 2, 2019 at 12:46 PM Murtuza Zabuawala <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hi Dave,
>>>>>>
>>>>>> Please find the updated patch,
>>>>>>
>>>>>> - Added a mechanism to check for supported minimum/maximum version
>>>>>> and a server type in the framework.
>>>>>>
>>>>>
>>>> There's still a problem with this I'm afraid - it says in the summary
>>>> that the re_sql test cases were all skipped, which is not the case. I think
>>>> we should just skip the irrelevant tests in the re_sql module, but not mark
>>>> the entire module as being skipped:
>>>>
>>>
>>>> =============Running the test cases for 'Regression - PG
>>>> 11'=============
>>>>
>>>> runTest
>>>> (regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)
>>>>
>>>> Reverse Engineered SQL Test Cases
>>>>
>>>>
>>>> Create IMPLICIT Cast
>>>>
>>>> Alter IMPLICIT Cast
>>>>
>>>> Drop IMPLICIT Cast
>>>>
>>>> Create EXPLICIT Cast
>>>>
>>>> Alter EXPLICIT Cast
>>>>
>>>> Drop EXPLICIT Cast
>>>>
>>>>  ... skipped 'Server(Type: #ppas) is not supported for the Resource
>>>> Groups module'
>>>>
>>>>
>>>> ----------------------------------------------------------------------
>>>>
>>>> Ran 1 test in 0.480s
>>>>
>>>>
>>>> OK (skipped=1)
>>>>
>>>>
>>>> ======================================================================
>>>>
>>>> Test Result Summary
>>>>
>>>> ======================================================================
>>>>
>>>>
>>>> Regression - PG 11:
>>>>
>>>>
>>>> 0 tests passed
>>>>
>>>> 0 tests failed
>>>>
>>>> 1 test skipped:
>>>>
>>>> ReverseEngineeredSQLTestCases (Reverse Engineered SQL Test Cases)
>>>>
>>>>
>>>> ======================================================================
>>>>
>>>> --
>>>> Dave Page
>>>> Blog: http://pgsnake.blogspot.com
>>>> Twitter: @pgsnake
>>>>
>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>> The Enterprise PostgreSQL Company
>>>>
>>>
>>
>> --
>> *Thanks & Regards*
>> *Akshay Joshi*
>>
>> *Sr. Software Architect*
>> *EnterpriseDB Software India Private Limited*
>> *Mobile: +91 976-788-8246*
>>
>
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>


Attachments:

  [application/octet-stream] RM_4415_v3.diff (38.6K, 3-RM_4415_v3.diff)
  download | inline diff:
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py b/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py
index 9047b7f7..05763e14 100644
--- a/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/__init__.py
@@ -226,8 +226,9 @@ class ResourceGroupView(NodeView):
                         "Connection to the server has been lost."
                     )
                 )
-
-            self.template_path = 'resource_groups/sql'
+            self.sql_path = 'resource_groups/sql/#{0}#'.format(
+                self.manager.version
+            )
             return f(*args, **kwargs)
 
         return wrap
@@ -242,7 +243,7 @@ class ResourceGroupView(NodeView):
             gid: Server Group ID
             sid: Server ID
         """
-        sql = render_template("/".join([self.template_path, 'properties.sql']))
+        sql = render_template("/".join([self.sql_path, 'properties.sql']))
         status, res = self.conn.execute_dict(sql)
 
         if not status:
@@ -263,7 +264,7 @@ class ResourceGroupView(NodeView):
             sid: Server ID
         """
 
-        sql = render_template("/".join([self.template_path, 'nodes.sql']),
+        sql = render_template("/".join([self.sql_path, 'nodes.sql']),
                               rgid=rg_id)
         status, result = self.conn.execute_2darray(sql)
         if not status:
@@ -295,7 +296,7 @@ class ResourceGroupView(NodeView):
             sid: Server ID
         """
         res = []
-        sql = render_template("/".join([self.template_path, 'nodes.sql']))
+        sql = render_template("/".join([self.sql_path, 'nodes.sql']))
         status, result = self.conn.execute_2darray(sql)
         if not status:
             return internal_server_error(errormsg=result)
@@ -326,7 +327,7 @@ class ResourceGroupView(NodeView):
             rg_id: Resource Group ID
         """
         sql = render_template(
-            "/".join([self.template_path, 'properties.sql']), rgid=rg_id)
+            "/".join([self.sql_path, 'properties.sql']), rgid=rg_id)
         status, res = self.conn.execute_dict(sql)
 
         if not status:
@@ -368,7 +369,7 @@ class ResourceGroupView(NodeView):
         try:
             # Below logic will create new resource group
             sql = render_template(
-                "/".join([self.template_path, 'create.sql']),
+                "/".join([self.sql_path, 'create.sql']),
                 rgname=data['name'], conn=self.conn
             )
             if sql and sql.strip('\n') and sql.strip(' '):
@@ -380,7 +381,7 @@ class ResourceGroupView(NodeView):
             # resource group you can't run multiple commands in one
             # transaction.
             sql = render_template(
-                "/".join([self.template_path, 'update.sql']),
+                "/".join([self.sql_path, 'update.sql']),
                 data=data, conn=self.conn
             )
             # Checking if we are not executing empty query
@@ -391,7 +392,7 @@ class ResourceGroupView(NodeView):
             # Below logic is used to fetch the oid of the newly created
             # resource group
             sql = render_template(
-                "/".join([self.template_path, 'getoid.sql']),
+                "/".join([self.sql_path, 'getoid.sql']),
                 rgname=data['name']
             )
             # Checking if we are not executing empty query
@@ -431,7 +432,7 @@ class ResourceGroupView(NodeView):
 
         try:
             sql = render_template(
-                "/".join([self.template_path, 'properties.sql']), rgid=rg_id)
+                "/".join([self.sql_path, 'properties.sql']), rgid=rg_id)
             status, res = self.conn.execute_dict(sql)
             if not status:
                 return internal_server_error(errormsg=res)
@@ -442,7 +443,7 @@ class ResourceGroupView(NodeView):
 
             if data['name'] != old_data['name']:
                 sql = render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     oldname=old_data['name'], newname=data['name'],
                     conn=self.conn
                 )
@@ -458,7 +459,7 @@ class ResourceGroupView(NodeView):
             if data['cpu_rate_limit'] != old_data['cpu_rate_limit'] or \
                     data['dirty_rate_limit'] != old_data['dirty_rate_limit']:
                 sql = render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     data=data, conn=self.conn
                 )
                 if sql and sql.strip('\n') and sql.strip(' '):
@@ -499,7 +500,7 @@ class ResourceGroupView(NodeView):
             for rg_id in data['ids']:
                 # Get name for resource group from rg_id
                 sql = render_template(
-                    "/".join([self.template_path, 'delete.sql']),
+                    "/".join([self.sql_path, 'delete.sql']),
                     rgid=rg_id, conn=self.conn
                 )
                 status, rgname = self.conn.execute_scalar(sql)
@@ -520,7 +521,7 @@ class ResourceGroupView(NodeView):
 
                 # drop resource group
                 sql = render_template(
-                    "/".join([self.template_path, 'delete.sql']),
+                    "/".join([self.sql_path, 'delete.sql']),
                     rgname=rgname, conn=self.conn
                 )
                 status, res = self.conn.execute_scalar(sql)
@@ -580,7 +581,7 @@ class ResourceGroupView(NodeView):
         ]
         if rg_id is not None:
             sql = render_template(
-                "/".join([self.template_path, 'properties.sql']), rgid=rg_id)
+                "/".join([self.sql_path, 'properties.sql']), rgid=rg_id)
             status, res = self.conn.execute_dict(sql)
             if not status:
                 return internal_server_error(errormsg=res)
@@ -599,7 +600,7 @@ class ResourceGroupView(NodeView):
             if data['name'] != old_data['name']:
                 name_changed = True
                 sql = render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     oldname=old_data['name'], newname=data['name'],
                     conn=self.conn
                 )
@@ -609,12 +610,12 @@ class ResourceGroupView(NodeView):
                     sql += "\n-- Following query will be executed in a " \
                            "separate transaction\n"
                 sql += render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     data=data, conn=self.conn
                 )
         else:
             sql = render_template(
-                "/".join([self.template_path, 'create.sql']),
+                "/".join([self.sql_path, 'create.sql']),
                 rgname=data['name'], conn=self.conn
             )
 
@@ -630,7 +631,7 @@ class ResourceGroupView(NodeView):
                 sql += "\n-- Following query will be executed in a " \
                        "separate transaction\n"
                 sql += render_template(
-                    "/".join([self.template_path, 'update.sql']),
+                    "/".join([self.sql_path, 'update.sql']),
                     data=data, conn=self.conn
                 )
 
@@ -647,7 +648,7 @@ class ResourceGroupView(NodeView):
             rg_id: Resource Group ID
         """
         sql = render_template(
-            "/".join([self.template_path, 'properties.sql']), rgid=rg_id
+            "/".join([self.sql_path, 'properties.sql']), rgid=rg_id
         )
         status, res = self.conn.execute_dict(sql)
         if not status:
@@ -661,13 +662,13 @@ class ResourceGroupView(NodeView):
         old_data = dict(res['rows'][0])
 
         sql = render_template(
-            "/".join([self.template_path, 'create.sql']),
+            "/".join([self.sql_path, 'create.sql']),
             display_comments=True,
             rgname=old_data['name'], conn=self.conn
         )
         sql += "\n"
         sql += render_template(
-            "/".join([self.template_path, 'update.sql']),
+            "/".join([self.sql_path, 'update.sql']),
             data=old_data, conn=self.conn
         )
 
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/create.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/create.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/create.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/create.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/delete.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/delete.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/delete.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/delete.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/getoid.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/getoid.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/getoid.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/getoid.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/nodes.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/nodes.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/nodes.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/properties.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/properties.sql
similarity index 100%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/properties.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/properties.sql
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/update.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/update.sql
similarity index 97%
rename from web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/update.sql
rename to web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/update.sql
index 2b19e108..e5c0a234 100644
--- a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/update.sql
@@ -6,4 +6,4 @@ ALTER RESOURCE GROUP {{ conn|qtIdent(oldname) }} RENAME TO {{ conn|qtIdent(newna
 {% if data %}
 ALTER RESOURCE GROUP {{ conn|qtIdent(data.name) }}
     SET cpu_rate_limit = {{data.cpu_rate_limit|default(0)}}, dirty_rate_limit = {{data.dirty_rate_limit|default(0)}};
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_name.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_name.sql
new file mode 100644
index 00000000..c774cbf5
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_name.sql
@@ -0,0 +1,8 @@
+-- RESOURCE GROUP: new_test_resql_resource_group
+
+-- DROP RESOURCE GROUP new_test_resql_resource_group
+
+CREATE RESOURCE GROUP new_test_resql_resource_group;
+
+ALTER RESOURCE GROUP new_test_resql_resource_group
+    SET cpu_rate_limit = 0, dirty_rate_limit = 0;
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_options.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_options.sql
new file mode 100644
index 00000000..fb21309d
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/alter_resource_group_options.sql
@@ -0,0 +1,8 @@
+-- RESOURCE GROUP: new_test_resql_resource_group
+
+-- DROP RESOURCE GROUP new_test_resql_resource_group
+
+CREATE RESOURCE GROUP new_test_resql_resource_group;
+
+ALTER RESOURCE GROUP new_test_resql_resource_group
+    SET cpu_rate_limit = 1, dirty_rate_limit = 5;
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/create_resource_group.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/create_resource_group.sql
new file mode 100644
index 00000000..3eb35a6a
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/create_resource_group.sql
@@ -0,0 +1,8 @@
+-- RESOURCE GROUP: test_resql_resource_group
+
+-- DROP RESOURCE GROUP test_resql_resource_group
+
+CREATE RESOURCE GROUP test_resql_resource_group;
+
+ALTER RESOURCE GROUP test_resql_resource_group
+    SET cpu_rate_limit = 0, dirty_rate_limit = 0;
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/test.json b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/test.json
new file mode 100644
index 00000000..03065361
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/default/test.json
@@ -0,0 +1,48 @@
+{
+  "prerequisite": {
+    "minVer": 90400,
+    "maxVer": null,
+    "type": "ppas"
+  },
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Resource groups",
+      "endpoint": "NODE-resource_group.obj",
+      "sql_endpoint": "NODE-resource_group.sql_id",
+      "data": {
+          "name": "test_resql_resource_group",
+          "cpu_rate_limit": 0,
+          "dirty_rate_limit": 0
+      },
+      "expected_sql_file": "create_resource_group.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Resource groups name",
+      "endpoint": "NODE-resource_group.obj_id",
+      "sql_endpoint": "NODE-resource_group.sql_id",
+      "data": {
+        "name": "new_test_resql_resource_group"
+      },
+      "expected_sql_file": "alter_resource_group_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Resource groups options",
+      "endpoint": "NODE-resource_group.obj_id",
+      "sql_endpoint": "NODE-resource_group.sql_id",
+      "data": {
+        "cpu_rate_limit": 1,
+        "dirty_rate_limit": 5
+      },
+      "expected_sql_file": "alter_resource_group_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop Resource groups",
+      "endpoint": "NODE-resource_group.obj_id",
+      "data": {}
+    }
+  ]
+}
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_description.sql
new file mode 100644
index 00000000..7879f300
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_description.sql
@@ -0,0 +1,12 @@
+-- Role: test_resql_role_pg91
+-- DROP ROLE test_resql_role_pg91;
+
+CREATE ROLE test_resql_role_pg91 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE test_resql_role_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_name.sql
new file mode 100644
index 00000000..3122bd02
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_name.sql
@@ -0,0 +1,12 @@
+-- Role: new_test_resql_role_pg91
+-- DROP ROLE new_test_resql_role_pg91;
+
+CREATE ROLE new_test_resql_role_pg91 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE new_test_resql_role_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_options.sql
new file mode 100644
index 00000000..8d205ec6
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_role_options.sql
@@ -0,0 +1,15 @@
+-- Role: new_test_resql_role_pg91
+-- DROP ROLE new_test_resql_role_pg91;
+
+CREATE ROLE new_test_resql_role_pg91 WITH
+  NOLOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = new_test_resql_role_pg91;
+
+COMMENT ON ROLE new_test_resql_role_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_description.sql
new file mode 100644
index 00000000..e34aa437
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_description.sql
@@ -0,0 +1,15 @@
+-- User: test_resql_user_pg91
+-- DROP USER test_resql_user_pg91;
+
+CREATE USER test_resql_user_pg91 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = test_resql_user_pg91;
+
+COMMENT ON ROLE test_resql_user_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_name.sql
new file mode 100644
index 00000000..0f1078d4
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_name.sql
@@ -0,0 +1,15 @@
+-- User: new_test_resql_user_pg91
+-- DROP USER new_test_resql_user_pg91;
+
+CREATE USER new_test_resql_user_pg91 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = new_test_resql_user_pg91;
+
+COMMENT ON ROLE new_test_resql_user_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_options.sql
new file mode 100644
index 00000000..8e6e636a
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/alter_user_options.sql
@@ -0,0 +1,12 @@
+-- User: new_test_resql_user_pg91
+-- DROP USER new_test_resql_user_pg91;
+
+CREATE USER new_test_resql_user_pg91 WITH
+  LOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE new_test_resql_user_pg91 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_role.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_role.sql
new file mode 100644
index 00000000..7f9bf63d
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_role.sql
@@ -0,0 +1,10 @@
+-- Role: test_resql_role_pg91
+-- DROP ROLE test_resql_role_pg91;
+
+CREATE ROLE test_resql_role_pg91 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_user.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_user.sql
new file mode 100644
index 00000000..12da84a1
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/create_user.sql
@@ -0,0 +1,13 @@
+-- User: test_resql_user_pg91
+-- DROP USER test_resql_user_pg91;
+
+CREATE USER test_resql_user_pg91 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+
+UPDATE pg_authid SET rolcatupdate=false WHERE rolname = test_resql_user_pg91;
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/test.json b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/test.json
new file mode 100644
index 00000000..0e8c6994
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.1_plus/test.json
@@ -0,0 +1,124 @@
+{
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Role",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_role_pg91",
+          "rolcanlogin": false,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": false,
+          "rolcreaterole": false,
+          "rolcreatedb": false,
+          "rolinherit": true,
+          "rolcatupdate": false,
+          "rolreplication": false,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_role.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_role_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_role_pg91"
+      },
+      "expected_sql_file": "alter_role_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": true,
+        "rolcreatedb": true
+      },
+      "expected_sql_file": "alter_role_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop Role",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    },
+    {
+      "type": "create",
+      "name": "Create User",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_user_pg91",
+          "rolcanlogin": true,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": true,
+          "rolcreaterole": true,
+          "rolcreatedb": true,
+          "rolinherit": true,
+          "rolcatupdate": true,
+          "rolreplication": true,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_user.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_user_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_user_pg91"
+      },
+      "expected_sql_file": "alter_user_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": false,
+        "rolcreatedb": false
+      },
+      "expected_sql_file": "alter_user_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop User",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    }
+  ]
+}
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_description.sql
new file mode 100644
index 00000000..7be33986
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_description.sql
@@ -0,0 +1,12 @@
+-- Role: test_resql_role_pg95
+-- DROP ROLE test_resql_role_pg95;
+
+CREATE ROLE test_resql_role_pg95 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE test_resql_role_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_name.sql
new file mode 100644
index 00000000..563404c7
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_name.sql
@@ -0,0 +1,12 @@
+-- Role: new_test_resql_role_pg95
+-- DROP ROLE new_test_resql_role_pg95;
+
+CREATE ROLE new_test_resql_role_pg95 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE new_test_resql_role_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options.sql
new file mode 100644
index 00000000..980bad23
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_role_options.sql
@@ -0,0 +1,12 @@
+-- Role: new_test_resql_role_pg95
+-- DROP ROLE new_test_resql_role_pg95;
+
+CREATE ROLE new_test_resql_role_pg95 WITH
+  NOLOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
+
+COMMENT ON ROLE new_test_resql_role_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_description.sql
new file mode 100644
index 00000000..2eed6025
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_description.sql
@@ -0,0 +1,12 @@
+-- User: test_resql_user_pg95
+-- DROP USER test_resql_user_pg95;
+
+CREATE USER test_resql_user_pg95 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE test_resql_user_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_name.sql
new file mode 100644
index 00000000..07454a79
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_name.sql
@@ -0,0 +1,12 @@
+-- User: new_test_resql_user_pg95
+-- DROP USER new_test_resql_user_pg95;
+
+CREATE USER new_test_resql_user_pg95 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE new_test_resql_user_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_options.sql
new file mode 100644
index 00000000..5035fbb9
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/alter_user_options.sql
@@ -0,0 +1,12 @@
+-- User: new_test_resql_user_pg95
+-- DROP USER new_test_resql_user_pg95;
+
+CREATE USER new_test_resql_user_pg95 WITH
+  LOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  CREATEROLE
+  REPLICATION;
+
+COMMENT ON ROLE new_test_resql_user_pg95 IS 'This is detailed description';
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_role.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_role.sql
new file mode 100644
index 00000000..51216477
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_role.sql
@@ -0,0 +1,10 @@
+-- Role: test_resql_role_pg95
+-- DROP ROLE test_resql_role_pg95;
+
+CREATE ROLE test_resql_role_pg95 WITH
+  NOLOGIN
+  NOSUPERUSER
+  INHERIT
+  NOCREATEDB
+  NOCREATEROLE
+  NOREPLICATION;
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_user.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_user.sql
new file mode 100644
index 00000000..476384fb
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/create_user.sql
@@ -0,0 +1,10 @@
+-- User: test_resql_user_pg95
+-- DROP USER test_resql_user_pg95;
+
+CREATE USER test_resql_user_pg95 WITH
+  LOGIN
+  SUPERUSER
+  INHERIT
+  CREATEDB
+  CREATEROLE
+  REPLICATION;
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
new file mode 100644
index 00000000..e902b3ee
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/9.4_plus/test.json
@@ -0,0 +1,124 @@
+{
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create Role",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_role_pg95",
+          "rolcanlogin": false,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": false,
+          "rolcreaterole": false,
+          "rolcreatedb": false,
+          "rolinherit": true,
+          "rolcatupdate": false,
+          "rolreplication": false,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_role.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_role_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_role_pg95"
+      },
+      "expected_sql_file": "alter_role_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter Role superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": true,
+        "rolcreatedb": true
+      },
+      "expected_sql_file": "alter_role_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop Role",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    },
+    {
+      "type": "create",
+      "name": "Create User",
+      "endpoint": "NODE-role.obj",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+          "rolname": "test_resql_user_pg95",
+          "rolcanlogin": true,
+          "rolpassword": null,
+          "rolconnlimit": -1,
+          "rolsuper": true,
+          "rolcreaterole": true,
+          "rolcreatedb": true,
+          "rolinherit": true,
+          "rolcatupdate": true,
+          "rolreplication": true,
+          "rolmembership": [],
+          "rolvaliduntil": null,
+          "seclabels": [],
+          "variables": []
+      },
+      "expected_sql_file": "create_user.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User description",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "description": "This is detailed description"
+      },
+      "expected_sql_file": "alter_user_description.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User name",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolname": "new_test_resql_user_pg95"
+      },
+      "expected_sql_file": "alter_user_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter User superuser, createdb etc options",
+      "endpoint": "NODE-role.obj_id",
+      "sql_endpoint": "NODE-role.sql_id",
+      "data": {
+        "rolsuper": false,
+        "rolcreatedb": false
+      },
+      "expected_sql_file": "alter_user_options.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop User",
+      "endpoint": "NODE-role.obj_id",
+      "data": {}
+    }
+  ]
+}
diff --git a/web/regression/python_test_utils/test_utils.py b/web/regression/python_test_utils/test_utils.py
index 96a009bd..74afc10b 100644
--- a/web/regression/python_test_utils/test_utils.py
+++ b/web/regression/python_test_utils/test_utils.py
@@ -991,6 +991,8 @@ def get_server_type(server):
         pg_cursor.execute("SELECT version()")
         version_string = pg_cursor.fetchone()
         connection.close()
+        if type(version_string) == tuple:
+            version_string = version_string[0]
 
         if "Greenplum Database" in version_string:
             return 'gpdb'
diff --git a/web/regression/re_sql/tests/test_resql.py b/web/regression/re_sql/tests/test_resql.py
index 369c8ddf..9f4d0125 100644
--- a/web/regression/re_sql/tests/test_resql.py
+++ b/web/regression/re_sql/tests/test_resql.py
@@ -6,10 +6,10 @@
 # This software is released under the PostgreSQL Licence
 #
 ##########################################################################
-
+from __future__ import print_function
 import json
 import os
-
+import sys
 from flask import url_for
 from pgadmin.utils.route import BaseTestGenerator
 from regression.python_test_utils import test_utils as utils
@@ -64,6 +64,7 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
     def runTest(self):
         # Create the module list on which reverse engineering sql test
         # cases will be executed.
+        server_info = self.server_information
         resql_module_list = create_resql_module_list(
             BaseTestGenerator.re_sql_module_list,
             BaseTestGenerator.exclude_pkgs)
@@ -84,8 +85,69 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
                                                       filename)
                     with open(complete_file_name) as jsonfp:
                         data = json.load(jsonfp)
-                        for key, scenarios in data.items():
-                            self.execute_test_case(scenarios)
+                        # CHECK SERVER VERSION & TYPE PRECONDITION
+                        flag = False
+                        if 'prerequisite' in data and \
+                                data['prerequisite'] is not None:
+                            prerequisite_data = data['prerequisite']
+
+                            module_str = module.replace('_', ' ').capitalize()
+                            db_type = server_info['type'].upper()
+                            min_ver = prerequisite_data['minVer']
+                            max_ver = prerequisite_data['maxVer']
+
+                            if 'type' in prerequisite_data and \
+                                    prerequisite_data['type']:
+                                if server_info['type'] != \
+                                        prerequisite_data['type']:
+                                    flag = True
+                                    print(
+                                        "\n\n"
+                                        "{0} are not supported by {1} - "
+                                        "Skipped".format(
+                                            module_str,
+                                            db_type
+                                        ),
+                                        file=sys.stderr
+                                    )
+
+                            if 'minVer' in prerequisite_data and \
+                                    prerequisite_data['minVer']:
+                                if server_info['server_version'] < \
+                                        prerequisite_data['minVer']:
+                                    if not flag:
+                                        flag = True
+                                        print(
+                                            "\n\n"
+                                            "{0} are not supported by"
+                                            " {1} server less than"
+                                            " {2} - Skipped".format(
+                                                module_str, db_type, min_ver
+                                            ),
+                                            file=sys.stderr
+                                        )
+
+                            if 'maxVer' in prerequisite_data and \
+                                    prerequisite_data['maxVer']:
+                                if server_info['server_version'] > \
+                                        prerequisite_data['maxVer']:
+                                    if not flag:
+                                        flag = True
+                                        print(
+                                            "\n\n"
+                                            "{0} are not supported by"
+                                            " {1} server greater than"
+                                            " {2} - Skipped".format(
+                                                module_str, db_type, max_ver
+                                            ),
+                                            file=sys.stderr
+                                        )
+
+                        if not flag:
+                            tests_scenarios = {}
+                            tests_scenarios['scenarios'] = data['scenarios']
+                            for key, scenarios in tests_scenarios.items():
+                                self.execute_test_case(scenarios)
 
     def tearDown(self):
         database_utils.disconnect_database(
@@ -207,6 +269,7 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
         # Remove first and last double quotes
         if resp_sql.startswith('"') and resp_sql.endswith('"'):
             resp_sql = resp_sql[1:-1]
+            resp_sql = resp_sql.rstrip()
 
         # Check if expected sql is given in JSON file or path of the output
         # file is given
diff --git a/web/regression/runtests.py b/web/regression/runtests.py
index 1d4fa54b..cf9ab19c 100644
--- a/web/regression/runtests.py
+++ b/web/regression/runtests.py
@@ -444,6 +444,7 @@ if __name__ == '__main__':
 
             # Add the server version in server information
             server_information['server_version'] = connection.server_version
+            server_information['type'] = server['type']
 
             # Drop the database if already exists.
             test_utils.drop_database(connection, test_db_name)


^ permalink  raw  reply  [nested|flat] 11+ messages in thread

* Re: RE-SQL tests for Roles & Resource Group nodes
  2019-07-01 05:31 RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-01 14:25 ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  2019-07-02 07:16   ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-02 07:17     ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-02 12:22       ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  2019-07-03 03:53         ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-03 07:34           ` Re: RE-SQL tests for Roles & Resource Group nodes Akshay Joshi <[email protected]>
  2019-07-03 12:06             ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  2019-07-03 13:30               ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
@ 2019-07-03 13:39                 ` Dave Page <[email protected]>
  0 siblings, 0 replies; 11+ messages in thread

From: Dave Page @ 2019-07-03 13:39 UTC (permalink / raw)
  To: Murtuza Zabuawala <[email protected]>; +Cc: Akshay Joshi <[email protected]>; pgadmin-hackers

Thanks, applied.

On Wed, Jul 3, 2019 at 2:30 PM Murtuza Zabuawala <
[email protected]> wrote:

> Hi,
>
> PFA updated patch with corrections in the print messages.
>
> --
> Regards,
> Murtuza Zabuawala
> EnterpriseDB: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
>
>
> On Wed, Jul 3, 2019 at 5:36 PM Dave Page <[email protected]> wrote:
>
>> Hi
>>
>> On Wed, Jul 3, 2019 at 8:35 AM Akshay Joshi <
>> [email protected]> wrote:
>>
>>> Hi Murtuza
>>>
>>> I have tested the patch and I think below string should be modified:
>>> Server(Type: #ppas) is not supported for the Resource Groups module -
>>> Skipped
>>> Server version(120000) is not supported for the Resource Groups module -
>>> Skipped
>>>
>>> It misleads, that server type 'ppas' is not supported for the Resource
>>> Group, it should be changed to "Resource groups are not supported by PG -
>>> Skipped". Similarly for version string should be ''Resource groups are not
>>> supported by PPAS server less/greater than <server version>"
>>>
>>
>> Agreed.
>>
>>
>>>
>>>> Please note that our framework considers test cases from all the
>>>> modules as one single test case, If we need module wise detailed summary
>>>> report for the reverse engineered SQL tests then we may have to change the
>>>> framework.
>>>>
>>>
>> We're just treating all the re-sql tests as one test in the higher-level
>> suite. Maybe we'd want to change that in the future, but I think it's fine
>> for now.
>>
>>
>>>
>>>>
>>>> Regards,
>>>> Murtuza
>>>>
>>>>
>>>> On Tue, Jul 2, 2019 at 5:52 PM Dave Page <[email protected]> wrote:
>>>>
>>>>> Hi
>>>>>
>>>>> On Tue, Jul 2, 2019 at 8:17 AM Murtuza Zabuawala <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> ++ Attaching patch
>>>>>>
>>>>>> On Tue, Jul 2, 2019 at 12:46 PM Murtuza Zabuawala <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> Hi Dave,
>>>>>>>
>>>>>>> Please find the updated patch,
>>>>>>>
>>>>>>> - Added a mechanism to check for supported minimum/maximum version
>>>>>>> and a server type in the framework.
>>>>>>>
>>>>>>
>>>>> There's still a problem with this I'm afraid - it says in the summary
>>>>> that the re_sql test cases were all skipped, which is not the case. I think
>>>>> we should just skip the irrelevant tests in the re_sql module, but not mark
>>>>> the entire module as being skipped:
>>>>>
>>>>
>>>>> =============Running the test cases for 'Regression - PG
>>>>> 11'=============
>>>>>
>>>>> runTest
>>>>> (regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)
>>>>>
>>>>> Reverse Engineered SQL Test Cases
>>>>>
>>>>>
>>>>> Create IMPLICIT Cast
>>>>>
>>>>> Alter IMPLICIT Cast
>>>>>
>>>>> Drop IMPLICIT Cast
>>>>>
>>>>> Create EXPLICIT Cast
>>>>>
>>>>> Alter EXPLICIT Cast
>>>>>
>>>>> Drop EXPLICIT Cast
>>>>>
>>>>>  ... skipped 'Server(Type: #ppas) is not supported for the Resource
>>>>> Groups module'
>>>>>
>>>>>
>>>>> ----------------------------------------------------------------------
>>>>>
>>>>> Ran 1 test in 0.480s
>>>>>
>>>>>
>>>>> OK (skipped=1)
>>>>>
>>>>>
>>>>> ======================================================================
>>>>>
>>>>> Test Result Summary
>>>>>
>>>>> ======================================================================
>>>>>
>>>>>
>>>>> Regression - PG 11:
>>>>>
>>>>>
>>>>> 0 tests passed
>>>>>
>>>>> 0 tests failed
>>>>>
>>>>> 1 test skipped:
>>>>>
>>>>> ReverseEngineeredSQLTestCases (Reverse Engineered SQL Test Cases)
>>>>>
>>>>>
>>>>> ======================================================================
>>>>>
>>>>> --
>>>>> Dave Page
>>>>> Blog: http://pgsnake.blogspot.com
>>>>> Twitter: @pgsnake
>>>>>
>>>>> EnterpriseDB UK: http://www.enterprisedb.com
>>>>> The Enterprise PostgreSQL Company
>>>>>
>>>>
>>>
>>> --
>>> *Thanks & Regards*
>>> *Akshay Joshi*
>>>
>>> *Sr. Software Architect*
>>> *EnterpriseDB Software India Private Limited*
>>> *Mobile: +91 976-788-8246*
>>>
>>
>>
>> --
>> Dave Page
>> Blog: http://pgsnake.blogspot.com
>> Twitter: @pgsnake
>>
>> EnterpriseDB UK: http://www.enterprisedb.com
>> The Enterprise PostgreSQL Company
>>
>

-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


^ permalink  raw  reply  [nested|flat] 11+ messages in thread

* Re: RE-SQL tests for Roles & Resource Group nodes
  2019-07-01 05:31 RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
  2019-07-01 14:25 ` Re: RE-SQL tests for Roles & Resource Group nodes Dave Page <[email protected]>
  2019-07-02 07:16   ` Re: RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
@ 2019-07-02 09:20     ` Dave Page <[email protected]>
  1 sibling, 0 replies; 11+ messages in thread

From: Dave Page @ 2019-07-02 09:20 UTC (permalink / raw)
  To: Murtuza Zabuawala <[email protected]>; +Cc: pgadmin-hackers

I think you missed attaching the patch!

-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK:http://www.enterprisedb.com
The Enterprise PostgreSQL Company

> On 2 Jul 2019, at 08:16, Murtuza Zabuawala <[email protected]> wrote:
> 
> Hi Dave,
> 
> Please find the updated patch,
> 
> - Added a mechanism to check for supported minimum/maximum version and a server type in the framework.
> 
> Please review.
> 
> 
> Thanks,
> Murtuza
> 
>> On Mon, Jul 1, 2019 at 7:55 PM Dave Page <[email protected]> wrote:
>> Hi
>> 
>>> On Mon, Jul 1, 2019 at 6:31 AM Murtuza Zabuawala <[email protected]> wrote:
>>> Hi,
>>> 
>>> PFA patch to add RE-SQL tests for Roles & Resource Group nodes.
>> 
>> Resource Groups don't exist in PG....
>> 
>> =============Running the test cases for 'Regression - PG 11'=============
>> runTest (regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)
>> Reverse Engineered SQL Test Cases
>> 
>> Create IMPLICIT Cast
>> Alter IMPLICIT Cast
>> Drop IMPLICIT Cast
>> Create EXPLICIT Cast
>> Alter EXPLICIT Cast
>> Drop EXPLICIT Cast
>> 
>> 
>> Create Resource groups
>>  ... 2019-07-01 15:24:16,930: ERROR	flask.app:	Failed to execute query (execute_scalar) for the server #2 - DB:postgres (Query-id: 1562639):
>> Error Message:ERROR:  syntax error at or near "RESOURCE"
>> LINE 1: CREATE RESOURCE GROUP test_resql_resource_group;
>>                ^
>> 
>> FAIL
>> 
>> ======================================================================
>> FAIL: runTest (regression.re_sql.tests.test_resql.ReverseEngineeredSQLTestCases)
>> Reverse Engineered SQL Test Cases
>> ----------------------------------------------------------------------
>> Traceback (most recent call last):
>>   File "/Users/dpage/git/pgadmin4/web/regression/re_sql/tests/test_resql.py", line 88, in runTest
>>     self.execute_test_case(scenarios)
>>   File "/Users/dpage/git/pgadmin4/web/regression/re_sql/tests/test_resql.py", line 145, in execute_test_case
>>     self.assertEquals(response.status_code, 200)
>> AssertionError: 500 != 200
>> 
>> ----------------------------------------------------------------------
>> Ran 1 test in 0.767s
>> 
>> FAILED (failures=1)
>> 
>> ======================================================================
>> Test Result Summary
>> ======================================================================
>> 
>> Regression - PG 11:
>> 
>> 0 tests passed
>> 1 test failed:
>> ReverseEngineeredSQLTestCases (Reverse Engineered SQL Test Cases)
>> 0 tests skipped
>> 
>> ======================================================================
>>  
>> -- 
>> Dave Page
>> Blog: http://pgsnake.blogspot.com
>> Twitter: @pgsnake
>> 
>> EnterpriseDB UK: http://www.enterprisedb.com
>> The Enterprise PostgreSQL Company


^ permalink  raw  reply  [nested|flat] 11+ messages in thread


end of thread, other threads:[~2019-07-03 13:39 UTC | newest]

Thread overview: 11+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2019-07-01 05:31 RE-SQL tests for Roles & Resource Group nodes Murtuza Zabuawala <[email protected]>
2019-07-01 14:25 ` Dave Page <[email protected]>
2019-07-02 07:16   ` Murtuza Zabuawala <[email protected]>
2019-07-02 07:17     ` Murtuza Zabuawala <[email protected]>
2019-07-02 12:22       ` Dave Page <[email protected]>
2019-07-03 03:53         ` Murtuza Zabuawala <[email protected]>
2019-07-03 07:34           ` Akshay Joshi <[email protected]>
2019-07-03 12:06             ` Dave Page <[email protected]>
2019-07-03 13:30               ` Murtuza Zabuawala <[email protected]>
2019-07-03 13:39                 ` Dave Page <[email protected]>
2019-07-02 09:20     ` Dave Page <[email protected]>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox