public inbox for [email protected]  
help / color / mirror / Atom feed
From: Murtuza Zabuawala <[email protected]>
To: Dave Page <[email protected]>
Cc: Akshay Joshi <[email protected]>
Cc: pgadmin-hackers <[email protected]>
Subject: Re: RE-SQL tests for Roles & Resource Group nodes
Date: Wed, 3 Jul 2019 19:00:12 +0530
Message-ID: <CAKKotZR9_Z-VwvuJs+1EXrWGDV-6sZDA6_81d3gTdRSb9i1ORg@mail.gmail.com> (raw)
In-Reply-To: <CA+OCxozKnmF8mg4xXyrymrPNRZTPmacjMfvkvDTvzHGS=0pKqg@mail.gmail.com>
References: <CAKKotZTXDruJsXhnNCR=uCeWKPkg6DKk1EAEXrUcMFFpaf0CAg@mail.gmail.com>
	<CA+OCxoyk3RfY=mDZ_ebb4stY6SgjzHsG5dimY0D=CuvwOtsoLQ@mail.gmail.com>
	<CAKKotZQiNF7QhQ+GiHHuqLyHLZkF99JS718xiSb9cNooPcwC6Q@mail.gmail.com>
	<CAKKotZRJ+cSMwZQPSRmjocxx-VKcmS7aFUTo18i=ZbGYkCuw=A@mail.gmail.com>
	<CA+OCxoyEVimkOdA4rsFzjagsCseZMbpHCk3Uub_MEuhk4+mM8A@mail.gmail.com>
	<CAKKotZRTCiUD0Y1+Zomiun2-fvEpQKJkkDvcwvhbFNpwV6CSHg@mail.gmail.com>
	<CANxoLDegd4LLkNqBRjkqFEw1EbEMTCYh7MsPvMdAigRy0kL+QA@mail.gmail.com>
	<CA+OCxozKnmF8mg4xXyrymrPNRZTPmacjMfvkvDTvzHGS=0pKqg@mail.gmail.com>

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)


view thread (11+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected]
  Subject: Re: RE-SQL tests for Roles & Resource Group nodes
  In-Reply-To: <CAKKotZR9_Z-VwvuJs+1EXrWGDV-6sZDA6_81d3gTdRSb9i1ORg@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

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