Changeset: cfeca9262b44 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cfeca9262b44 Removed Files: sql/test/Users/Tests/role.stable.err sql/test/Users/Tests/role.stable.out sql/test/Users/Tests/role1.SQL.py Modified Files: sql/test/Users/Tests/All sql/test/Users/Tests/role.SQL.py Branch: default Log Message:
Clean up, merge and extend all ROLE tests into "role" diffs (243 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 @@ -1,4 +1,4 @@ -role1 +role schema table unknown_user @@ -14,7 +14,6 @@ columnRights changePasswordUser renameUser changeSchemaUser -role grantMonetdb copyinto schemaRights diff --git a/sql/test/Users/Tests/role.SQL.py b/sql/test/Users/Tests/role.SQL.py --- a/sql/test/Users/Tests/role.SQL.py +++ b/sql/test/Users/Tests/role.SQL.py @@ -1,46 +1,44 @@ ### -# Revoke role and confirm user can no longer assume it. -# Assess there is an error message if dropping unexisting role. -# Assess it is not possible to recreate an existing role. +# Tests for roles and users +# +# 1. check that we cannot DROP an unexisting ROLE. +# 2. check that it is not possible to reCREATE an existing ROLE. +# 3. check that we cannot DROP a ROLE GRANTed TO a USER +# 4. check that a USER can SET a GRANTed ROLE but cannot SET a non-GRANTed ROLE +# 5. check that we can DROP a ROLE after REVOKE +# 6. check that we cannot REVOKE a non-GRANTed ROLE +# 7. check that afer a ROLE is REVOKEd the USER can no longer assume it. ### from MonetDBtesting.sqltest import SQLTestCase with SQLTestCase() as tc: tc.connect(username="monetdb", password="monetdb") - tc.execute(""" - REVOKE bankAdmin from april; - CREATE ROLE bankAdmin2; - GRANT bankAdmin2 to april; - DROP ROLE bankAdmin2; - """).assertSucceeded() - tc.execute("DROP ROLE bankAdmin3; -- role doesn't exist").assertFailed() + + tc.execute("DROP ROLE non_existing_role;").assertFailed(err_code="0P000", err_message="DROP ROLE: no such role 'non_existing_role'") - tc.connect(username="april", password="april") - tc.execute("SET ROLE bankAdmin; -- role revoked").assertFailed() - tc.execute("SET ROLE bankAdmin2; -- role no longer exists").assertFailed() + tc.execute("CREATE ROLE role1;").assertSucceeded() + tc.execute("CREATE ROLE role2;").assertSucceeded() + tc.execute("CREATE ROLE role3;").assertSucceeded() + tc.execute("CREATE ROLE role1;").assertFailed(err_code="0P000", err_message="Role 'role1' already exists") -# import os, sys -# try: -# from MonetDBtesting import process -# except ImportError: -# import process + tc.execute("CREATE USER alice with password 'alice' name 'alice' schema sys;") + tc.execute("GRANT role1 to alice;").assertSucceeded() + tc.execute("GRANT role2 to alice;").assertSucceeded() + #tc.execute("DROP ROLE role1;").assertFailed() -# 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() + tc.connect(username="alice", password="alice") + tc.execute("SET ROLE role1;").assertSucceeded() + tc.execute("SET ROLE role3;").assertFailed(err_code="42000", err_message="Role (role3) missing") -# sql_test_client('monetdb', 'monetdb', input="""\ -# REVOKE bankAdmin from april; -# CREATE ROLE bankAdmin2; -# GRANT bankAdmin2 to april; -# DROP ROLE bankAdmin2; -# DROP ROLE bankAdmin3; -- role doesn't exist -# """) + tc.connect(username="monetdb", password="monetdb") + tc.execute("REVOKE role1 from alice;").assertSucceeded() + tc.execute("REVOKE role2 from alice;").assertSucceeded() + tc.execute("DROP ROLE role2;").assertSucceeded() -# sql_test_client('april', 'april', input="""\ -# SET ROLE bankAdmin; -- role revoked -# SET ROLE bankAdmin2; -- role no longer exists -# """) + tc.execute("REVOKE role3 from alice;").assertFailed(err_code="01006", err_message="REVOKE: User 'alice' does not have ROLE 'role3'") + + tc.connect(username="alice", password="alice") + tc.execute("SET ROLE role1;").assertFailed(err_code="42000", err_message="Role (role1) missing") + tc.execute("SET ROLE role2;").assertFailed(err_code="42000", err_message="Role (role2) missing") + diff --git a/sql/test/Users/Tests/role.stable.err b/sql/test/Users/Tests/role.stable.err deleted file mode 100644 --- a/sql/test/Users/Tests/role.stable.err +++ /dev/null @@ -1,49 +0,0 @@ -stderr of test 'role` in directory 'sql/test/Users` itself: - - -# 23:01:33 > -# 23:01:33 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=36242" "--set" "mapi_usock=/var/tmp/mtest-7070/.s.monetdb.36242" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/vera/Desktop/MonetDB/BUILD/var/MonetDB/mTests_sql_test_Users" "--set" "mal_listing=0" "--set" "embedded_r=yes" -# 23:01:33 > - -# builtin opt gdk_dbpath = /home/vera/Desktop/MonetDB/BUILD/var/monetdb5/dbfarm/demo -# builtin opt gdk_debug = 0 -# builtin opt gdk_vmtrim = no -# builtin opt monet_prompt = > -# builtin opt monet_daemon = no -# builtin opt mapi_port = 50000 -# builtin opt mapi_open = false -# builtin opt mapi_autosense = false -# builtin opt sql_optimizer = default_pipe -# builtin opt sql_debug = 0 -# cmdline opt gdk_nr_threads = 0 -# cmdline opt mapi_open = true -# cmdline opt mapi_port = 36242 -# cmdline opt mapi_usock = /var/tmp/mtest-7070/.s.monetdb.36242 -# cmdline opt monet_prompt = -# cmdline opt mal_listing = 2 -# cmdline opt gdk_dbpath = /home/vera/Desktop/MonetDB/BUILD/var/MonetDB/mTests_sql_test_Users -# cmdline opt mal_listing = 0 -# cmdline opt embedded_r = yes -# cmdline opt gdk_debug = 536870922 - -# 23:01:34 > -# 23:01:34 > "/usr/bin/python2" "role.SQL.py" "role" -# 23:01:34 > - -MAPI = (monetdb) /var/tmp/mtest-7070/.s.monetdb.36242 -QUERY = DROP ROLE bankAdmin3; -- role doesn't exist -ERROR = !DROP ROLE: no such role 'bankadmin3' -CODE = 0P000 -MAPI = (april) /var/tmp/mtest-30274/.s.monetdb.37685 -QUERY = SET ROLE bankAdmin; -- role revoked -ERROR = !Role (bankadmin) missing -CODE = 42000 -MAPI = (april) /var/tmp/mtest-12671/.s.monetdb.35429 -QUERY = SET ROLE bankAdmin2; -- role no longer exists -ERROR = !Role (bankadmin2) missing -CODE = 42000 - -# 23:01:34 > -# 23:01:34 > "Done." -# 23:01:34 > - diff --git a/sql/test/Users/Tests/role.stable.out b/sql/test/Users/Tests/role.stable.out deleted file mode 100644 --- a/sql/test/Users/Tests/role.stable.out +++ /dev/null @@ -1,38 +0,0 @@ -stdout of test 'role` in directory 'sql/test/Users` itself: - - -# 23:01:33 > -# 23:01:33 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=36242" "--set" "mapi_usock=/var/tmp/mtest-7070/.s.monetdb.36242" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/vera/Desktop/MonetDB/BUILD/var/MonetDB/mTests_sql_test_Users" "--set" "mal_listing=0" "--set" "embedded_r=yes" -# 23:01:33 > - -# MonetDB 5 server v11.22.0 -# This is an unreleased version -# Serving database 'mTests_sql_test_Users', using 8 threads -# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs and 128bit integers dynamically linked -# Found 3.746 GiB available main-memory. -# Copyright (c) 1993-July 2008 CWI. -# Copyright (c) August 2008-2015 MonetDB B.V., all rights reserved -# Visit http://www.monetdb.org/ for further information -# Listening for connection requests on mapi:monetdb://buzu:36242/ -# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-7070/.s.monetdb.36242 -# Start processing logs sql/sql_logs version 52200 -# Start reading the write-ahead log 'sql_logs/sql/log.11' -# Finished reading the write-ahead log 'sql_logs/sql/log.11' -# Finished processing logs sql/sql_logs -# MonetDB/SQL module loaded -# MonetDB/R module loaded - - -# 23:01:34 > -# 23:01:34 > "/usr/bin/python2" "role.SQL.py" "role" -# 23:01:34 > - -#REVOKE bankAdmin from april; -#CREATE ROLE bankAdmin2; -#GRANT bankAdmin2 to april; -#DROP ROLE bankAdmin2; - -# 23:01:34 > -# 23:01:34 > "Done." -# 23:01:34 > - diff --git a/sql/test/Users/Tests/role1.SQL.py b/sql/test/Users/Tests/role1.SQL.py deleted file mode 100644 --- a/sql/test/Users/Tests/role1.SQL.py +++ /dev/null @@ -1,42 +0,0 @@ -### -# SET a GRANTed ROLE for a USER (possible). -# SET a non-GRANTed ROLE for a USER (not possible). -### - -import os, sys -import pymonetdb - - -db=os.getenv("TSTDB") -port=int(os.getenv("MAPIPORT")) -mdbconn = pymonetdb.connect(database=db, port=port, autocommit=True, user='monetdb', password='monetdb') -mdb = mdbconn.cursor() -mdb.execute("CREATE ROLE my_role") -mdb.execute("CREATE SCHEMA my_schema AUTHORIZATION my_role") -mdb.execute("CREATE USER my_user with password 'p1' name 'User with role' schema my_schema") -mdb.execute("GRANT my_role to my_user") -mdb.execute("CREATE USER my_user2 with password 'p2' name 'User without role' schema my_schema") - -client = pymonetdb.connect(database=db, port=port, autocommit=True, user='my_user', password='p1') -cursor = client.cursor() -# exceptions will output -cursor.execute("SET ROLE my_role") -cursor.close() -client.close() - -client = pymonetdb.connect(database=db, port=port, autocommit=True, user='my_user2', password='p2') -cursor = client.cursor() -# exception "!Role (my_role) missing" is expected -try: - cursor.execute("SET ROLE my_role") -except: - pass -cursor.close() -client.close() - -mdb.execute("DROP USER my_user") -mdb.execute("DROP USER my_user2") -mdb.execute("DROP ROLE my_role") -mdb.execute("DROP SCHEMA my_schema") -mdb.close() -mdbconn.close() _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list