Changeset: 4993f89c003c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4993f89c003c
Modified Files:
        sql/test/Users/Tests/All
        sql/test/Users/Tests/columnRights.SQL.py
Branch: default
Log Message:

Clean up and extended tests

The last two UPDATE queries currently fail, for more information see
https://github.com/MonetDB/MonetDB/issues/7035


diffs (83 lines):

diff --git a/sql/test/Users/Tests/All b/sql/test/Users/Tests/All
--- a/sql/test/Users/Tests/All
+++ b/sql/test/Users/Tests/All
@@ -5,8 +5,8 @@ table_privs
 unknown_user
 withGrantOption
 grantMonetdb
+columnRights
 createSetUp
-columnRights
 changePasswordUser
 renameUser
 changeSchemaUser
diff --git a/sql/test/Users/Tests/columnRights.SQL.py 
b/sql/test/Users/Tests/columnRights.SQL.py
--- a/sql/test/Users/Tests/columnRights.SQL.py
+++ b/sql/test/Users/Tests/columnRights.SQL.py
@@ -1,6 +1,6 @@
 ###
 # Grant SELECT and UPDATE to a user on two different columns.
-# Verify the user can SELECT and UPDATE on the column he has permissions for.
+# Verify the user can SELECT and UPDATE on the column it has permissions for.
 # Verify that the user cannot SELECT nor UPDATE on the column it did not get 
permissions for.
 ###
 
@@ -8,39 +8,28 @@ from MonetDBtesting.sqltest import SQLTe
 
 with SQLTestCase() as tc:
     tc.connect(username="monetdb", password="monetdb")
+
+    tc.execute("CREATE SCHEMA library;").assertSucceeded()
+    tc.execute("CREATE TABLE library.orders(price int, name 
VARCHAR(100));").assertSucceeded()
+    tc.execute("INSERT INTO library.orders VALUES (12, 'abc'), (42, 
'def');").assertRowCount(2)
+
+    tc.execute("CREATE USER alice WITH PASSWORD 'alice' name 'alice' schema 
library;").assertSucceeded()
     tc.execute("GRANT SELECT (price) ON library.orders TO 
alice;").assertSucceeded()
     tc.execute("GRANT UPDATE (name)  ON library.orders TO 
alice;").assertSucceeded()
 
     tc.connect(username="alice", password="alice")
-    tc.execute("SELECT price FROM 
library.orders;").assertSucceeded().assertRowCount(0).assertDataResultMatch([])
-    tc.execute("UPDATE library.orders SET name = 'book title goes 
here';").assertSucceeded().assertRowCount(0)
-    tc.execute("SELECT name FROM library.orders; --insufficient 
rights").assertFailed(err_message="SELECT: identifier 'name' unknown")
-    tc.execute("UPDATE orders SET price = 0; --insufficient 
rights").assertFailed(err_message="UPDATE: insufficient privileges for user 
'alice' to update table 'orders' on column 'price'")
-
-# import os, sys
-# try:
-#     from MonetDBtesting import process
-# except ImportError:
-#     import process
+    # alice can select price but no name, and it cannot update it
+    tc.execute("SELECT price FROM orders;").assertSucceeded().assertRowCount(2)
+    tc.execute("SELECT name FROM orders;").assertFailed(err_code='42000', 
err_message="SELECT: identifier 'name' unknown")
+    tc.execute("SELECT * FROM 
orders;").assertSucceeded().assertDataResultMatch([(12,), (42,)])
+    tc.execute("UPDATE orders SET price = 0;").assertFailed(err_code='42000', 
err_message="UPDATE: insufficient privileges for user 'alice' to update table 
'orders' on column 'price'")
 
-# def sql_test_client(user, passwd, input):
-#     with process.client(lang="sql", user=user, passwd=passwd, 
communicate=True,
-#                         stdin=process.PIPE, stdout=process.PIPE, 
stderr=process.PIPE,
-#                         input=input, port=int(os.getenv("MAPIPORT"))) as c:
-#         c.communicate()
-
-# sql_test_client('monetdb', 'monetdb', input="""\
-# GRANT SELECT (price) ON library.orders TO alice;
-# GRANT UPDATE (name)  ON library.orders TO alice;
-# """)
+    # alice can update name
+    tc.execute("UPDATE orders SET name = 'book title goes 
here';").assertSucceeded().assertRowCount(2)
+    # FIXME: the following two queries currently fail due to the problems
+    #   discussed in issue #7035.  May need to fix the expected error once that
+    #   issue is fixed
+    tc.execute("UPDATE orders SET name = name || 'book title goes 
here';").assertFailed(err_code='42000', err_message="UPDATE: inufficient 
privileges for user 'alice' to update table 'orders'")
+    # but not this update involving the 'price' column
+    tc.execute("UPDATE orders SET name = 'new book title' where price = 
12;").assertSucceeded().assertRowCount(2)
 
-
-
-# sql_test_client('alice', 'alice', input="""\
-# SELECT price FROM orders;
-# UPDATE orders SET name = 'book title goes here';
-# SELECT name FROM orders; --insufficient rights
-# UPDATE orders SET price = 0; --insufficient rights
-# """)
-
-
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to