Changeset: bf642a3063f1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bf642a3063f1
Modified Files:
sql/test/Users/Tests/userCallFunction.SQL.py
Branch: default
Log Message:
converted and minor extension
diffs (114 lines):
diff --git a/sql/test/Users/Tests/userCallFunction.SQL.py
b/sql/test/Users/Tests/userCallFunction.SQL.py
--- a/sql/test/Users/Tests/userCallFunction.SQL.py
+++ b/sql/test/Users/Tests/userCallFunction.SQL.py
@@ -1,72 +1,43 @@
-import os, sys, pymonetdb
-
+###
+# Check that a user can only execute a function after the user has been granted
+# the EXECUTE rights.
+# Also check that function signature matters.
+###
-port = int(os.environ['MAPIPORT'])
-db = os.environ['TSTDB']
+from MonetDBtesting.sqltest import SQLTestCase
-conn1 =
pymonetdb.connect(port=port,database=db,autocommit=True,username='monetdb',password='monetdb')
-cur1 = conn1.cursor()
-cur1.execute("""
-start transaction;
-create schema s1;
-CREATE USER u1 WITH PASSWORD '1' NAME 'u1' SCHEMA s1;
-CREATE FUNCTION s1.f1() RETURNS INT BEGIN RETURN 10; END;
-CREATE FUNCTION s1.f1(a int) RETURNS INT BEGIN RETURN 10 + a; END;
-commit;
-""")
-cur1.close()
-conn1.close()
+with SQLTestCase() as mdb:
+ mdb.connect(username="monetdb", password="monetdb")
+ mdb.execute("""
+ start transaction;
+ create schema s1;
+ CREATE USER u1 WITH PASSWORD '1' NAME 'u1' SCHEMA s1;
+ CREATE FUNCTION s1.f1(a int) RETURNS INT BEGIN RETURN 10 + a; END;
+ CREATE FUNCTION s1.f1() RETURNS INT BEGIN RETURN 10; END;
+ commit;
+ """).assertSucceeded()
-conn1 =
pymonetdb.connect(port=port,database=db,autocommit=True,username='u1',password='1')
-cur1 = conn1.cursor()
-try:
- cur1.execute('SELECT s1.f1();') # error, not allowed
- sys.stderr.write("Exception expected")
-except pymonetdb.DatabaseError as e:
- if "SELECT: no such operator 'f1'" not in str(e):
- sys.stderr.write('Wrong error %s, expected SELECT: no such operator
\'f1\'' % (str(e)))
-try:
- cur1.execute('SELECT s1.f1(1);') # error, not allowed
- sys.stderr.write("Exception expected")
-except pymonetdb.DatabaseError as e:
- if "SELECT: no such unary operator 'f1(tinyint)'" not in str(e):
- sys.stderr.write('Wrong error %s, expected SELECT: no such unary
operator \'f1(tinyint)\'' % (str(e)))
-try:
- cur1.execute('CALL sys.flush_log();') # error, not allowed
- sys.stderr.write("Exception expected")
-except pymonetdb.DatabaseError as e:
- if "SELECT: no such operator 'flush_log'" not in str(e):
- sys.stderr.write('Wrong error %s, expected SELECT: no such operator
\'flush_log\'' % (str(e)))
-cur1.close()
-conn1.close()
+ with SQLTestCase() as tc:
+ tc.connect(username="u1", password="1")
+ tc.execute('SELECT s1.f1();').assertFailed(err_code="42000",
err_message="SELECT: no such operator 'f1'")
+ tc.execute('SELECT s1.f1(1);').assertFailed(err_code="42000",
err_message="SELECT: no such unary operator 'f1(tinyint)'")
+ tc.execute('SELECT s1.f1(cast(1 as
int));').assertFailed(err_code="42000", err_message="SELECT: no such unary
operator 'f1(int)'")
+ tc.execute('CALL sys.flush_log();').assertFailed(err_code="42000",
err_message="SELECT: no such operator 'flush_log'")
+
+ mdb.execute('GRANT EXECUTE ON FUNCTION s1.f1() TO
u1;').assertSucceeded()
+ tc.execute('SELECT s1.f1();').assertDataResultMatch([(10,)])
+ tc.execute('SELECT s1.f1(1);').assertFailed(err_code="42000",
err_message="SELECT: no such unary operator 'f1(tinyint)'")
+ tc.execute('SELECT s1.f1(cast(1 as
int));').assertFailed(err_code="42000", err_message="SELECT: no such unary
operator 'f1(int)'")
-conn1 =
pymonetdb.connect(port=port,database=db,autocommit=True,username='monetdb',password='monetdb')
-cur1 = conn1.cursor()
-cur1.execute('GRANT EXECUTE ON FUNCTION s1.f1() TO u1;')
-cur1.close()
-conn1.close()
+ mdb.execute('REVOKE EXECUTE ON FUNCTION s1.f1() FROM
u1;').assertSucceeded()
+ tc.execute('SELECT s1.f1();').assertFailed(err_code="42000",
err_message="SELECT: no such operator 'f1'")
+ mdb.execute('GRANT EXECUTE ON FUNCTION s1.f1(int) TO
u1;').assertSucceeded()
+ tc.execute('SELECT s1.f1(1);').assertDataResultMatch([(11,)])
+ tc.execute('SELECT s1.f1(cast(1 as
int));').assertDataResultMatch([(11,)])
-conn1 =
pymonetdb.connect(port=port,database=db,autocommit=True,username='u1',password='1')
-cur1 = conn1.cursor()
-cur1.execute('SELECT s1.f1();')
-if cur1.fetchall() != [(10,)]:
- sys.stderr.write("[(10,)] expected")
-try:
- cur1.execute('SELECT s1.f1(1);') # error, not allowed
- sys.stderr.write("Exception expected")
-except pymonetdb.DatabaseError as e:
- if "SELECT: no such unary operator 'f1(tinyint)'" not in str(e):
- sys.stderr.write('Wrong error %s, expected SELECT: no such unary
operator \'f1(tinyint)\'' % (str(e)))
-cur1.close()
-conn1.close()
-
-conn1 =
pymonetdb.connect(port=port,database=db,autocommit=True,username='monetdb',password='monetdb')
-cur1 = conn1.cursor()
-cur1.execute("""
-start transaction;
-drop user u1;
-drop schema s1 cascade;
-commit;
-""")
-cur1.close()
-conn1.close()
+ mdb.execute("""
+ start transaction;
+ drop user u1;
+ drop schema s1 cascade;
+ commit;
+ """)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list