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