Repository: sentry Updated Branches: refs/heads/master 915b80248 -> 09a8dcb01
SENTRY-1391: Add more test cases for perm and temp UDF (Hao Hao, Reviewed by: Anne Yu) Change-Id: I872d4f929822769d86107e411ce170e39b40eac5 Project: http://git-wip-us.apache.org/repos/asf/sentry/repo Commit: http://git-wip-us.apache.org/repos/asf/sentry/commit/09a8dcb0 Tree: http://git-wip-us.apache.org/repos/asf/sentry/tree/09a8dcb0 Diff: http://git-wip-us.apache.org/repos/asf/sentry/diff/09a8dcb0 Branch: refs/heads/master Commit: 09a8dcb0127c38b0c53bb8874bfa00aece9ce7da Parents: 915b802 Author: hahao <[email protected]> Authored: Mon Jul 11 00:09:40 2016 -0700 Committer: hahao <[email protected]> Committed: Mon Jul 11 00:09:40 2016 -0700 ---------------------------------------------------------------------- .../e2e/hive/TestPrivilegesAtFunctionScope.java | 87 ++++++++++++++++++-- 1 file changed, 82 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sentry/blob/09a8dcb0/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/hive/TestPrivilegesAtFunctionScope.java ---------------------------------------------------------------------- diff --git a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/hive/TestPrivilegesAtFunctionScope.java b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/hive/TestPrivilegesAtFunctionScope.java index 61fecc7..0dbd5cc 100644 --- a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/hive/TestPrivilegesAtFunctionScope.java +++ b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/hive/TestPrivilegesAtFunctionScope.java @@ -90,6 +90,7 @@ public class TestPrivilegesAtFunctionScope extends AbstractTestWithStaticConfigu Statement statement = context.createStatement(connection); statement.execute("DROP DATABASE IF EXISTS " + DB1 + " CASCADE"); statement.execute("CREATE DATABASE " + DB1); + statement.execute("CREATE DATABASE " + DB2); statement.execute("USE " + DB1); statement.execute("create table " + DB1 + "." + tableName1 + " (number INT comment 'column as a number', value STRING comment 'column as a string')"); @@ -110,8 +111,36 @@ public class TestPrivilegesAtFunctionScope extends AbstractTestWithStaticConfigu writePolicyFile(policyFile); } + /** + * Test the required permission to create/drop permanent function. + * @throws Exception + */ + @Test + public void testCreateDropPermUdf() throws Exception { + setUpContext(); + // user1 has URI privilege for the Jar and should be able create the perm function. + Connection connection = context.createConnection(USER1_1); + Statement statement = context.createStatement(connection); + + statement.execute("CREATE FUNCTION db_2.test_1 AS 'org.apache.sentry.tests.e2e.hive.TestUDF'"); + statement.close(); + connection.close(); + + connection = context.createConnection(USER3_1); + statement = context.createStatement(connection); + + // user3 does not have URI privilege but still should be able drop the perm function. + statement.execute("DROP FUNCTION IF EXISTS db_2.test_1"); + statement.close(); + connection.close(); + } + + /** + * Test the required permission to create/drop temporary function. + * @throws Exception + */ @Test - public void testCreateUdf() throws Exception { + public void testCreateDropTempUdf() throws Exception { setUpContext(); // user1 should be able create/drop temp functions Connection connection = context.createConnection(USER1_1); @@ -134,6 +163,12 @@ public class TestPrivilegesAtFunctionScope extends AbstractTestWithStaticConfigu } statement.close(); connection.close(); + + connection = context.createConnection(USER3_1); + statement = context.createStatement(connection); + + // user3 does not have URI privilege but still should be able drop the temp function. + statement.execute("DROP FUNCTION IF EXISTS test_2"); } @Test @@ -151,10 +186,31 @@ public class TestPrivilegesAtFunctionScope extends AbstractTestWithStaticConfigu } catch (Exception ex) { LOGGER.error("test temp func printf_test failed with reason: " + ex.getStackTrace() + " " + ex.getMessage()); fail("fail to test temp func printf_test"); - } finally { - statement.execute("DROP TEMPORARY FUNCTION IF EXISTS printf_test"); } + statement.close(); + connection.close(); + + connection = context.createConnection(USER3_1); + statement = context.createStatement(connection); + statement.execute("USE " + DB1); + + // user3 only has db1_tab1 privilege but still should be able execute the temp function. + try { + verifyPrintFuncValues(statement, "SELECT printf_test('%s', value) FROM " + tableName1); + } catch (Exception ex) { + LOGGER.error("test temp func printf_test failed with reason: " + ex.getStackTrace() + " " + ex.getMessage()); + fail("fail to test temp func printf_test"); + } + + statement.close(); + connection.close(); + + connection = context.createConnection(USER1_1); + statement = context.createStatement(connection); + statement.execute("USE " + DB1); + statement.execute("DROP TEMPORARY FUNCTION IF EXISTS printf_test"); + LOGGER.info("Testing select from perm func printf_test_perm"); try { statement.execute( @@ -163,10 +219,31 @@ public class TestPrivilegesAtFunctionScope extends AbstractTestWithStaticConfigu } catch (Exception ex) { LOGGER.error("test perm func printf_test_perm failed with reason: " + ex.getStackTrace() + " " + ex.getMessage()); fail("Fail to test perm func printf_test_perm"); - } finally { - statement.execute("DROP FUNCTION IF EXISTS printf_test_perm"); } + statement.close(); + connection.close(); + + connection = context.createConnection(USER3_1); + statement = context.createStatement(connection); + statement.execute("USE " + DB1); + + // user3 only has db1_tab1 privilege but still should be able execute the perm function. + try { + verifyPrintFuncValues(statement, "SELECT printf_test_perm('%s', value) FROM " + tableName1); + } catch (Exception ex) { + LOGGER.error("test perm func printf_test_perm failed with reason: " + ex.getStackTrace() + " " + ex.getMessage()); + fail("Fail to test perm func printf_test_perm"); + } + + statement.close(); + connection.close(); + + connection = context.createConnection(USER1_1); + statement = context.createStatement(connection); + statement.execute("USE " + DB1); + statement.execute("DROP FUNCTION IF EXISTS printf_test_perm"); + // test perm UDF with 'using file' syntax LOGGER.info("Testing select from perm func printf_test_perm_use_file"); try {
