jjiang037 commented on code in PR #5819:
URL: https://github.com/apache/hive/pull/5819#discussion_r2153189866


##########
ql/src/test/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/TestHiveMetaStoreAuthorizer.java:
##########
@@ -547,76 +642,29 @@ public void testUnAuthorizedCause() {
           .build(conf);
       hmsHandler.create_database(db);
     } catch (Exception e) {
-      String[] rootCauseStackTrace = ExceptionUtils.getRootCauseStackTrace(e);
-      assertTrue(Arrays.stream(rootCauseStackTrace)
-          .anyMatch(stack -> 
stack.contains(DummyHiveAuthorizer.class.getName())));
-    }
-  }
-
-  @Test
-  public void testTableFilterContextWithOwnership() throws Exception {
-    List<TableMeta> tableMetas = new ArrayList<>();
-    TableMeta ownerTableMeta = new TableMeta();
-    ownerTableMeta.setCatName("hive");
-    ownerTableMeta.setDbName(default_db);
-    ownerTableMeta.setTableName("owner_table");
-    ownerTableMeta.setOwnerName(authorizedUser);
-    
ownerTableMeta.setOwnerType(org.apache.hadoop.hive.metastore.api.PrincipalType.USER);
-    tableMetas.add(ownerTableMeta);
-
-    TableMeta otherTableMeta = new TableMeta();
-    otherTableMeta.setCatName("hive");
-    otherTableMeta.setDbName(default_db);
-    otherTableMeta.setTableName("other_table");
-    otherTableMeta.setOwnerName(unAuthorizedUser);
-    
otherTableMeta.setOwnerType(org.apache.hadoop.hive.metastore.api.PrincipalType.USER);
-    tableMetas.add(otherTableMeta);
-
-    TableFilterContext filterContext = 
TableFilterContext.createFromTableMetas(default_db, tableMetas);
-    List<Table> tables = filterContext.getTables();
-    assertEquals("Should have two tables in context", 2, tables.size());
-
-    boolean foundOwnerTable = false;
-    boolean foundOtherTable = false;
-
-    for (Table table : tables) {
-      if (table.getTableName().equals("owner_table")) {
-        foundOwnerTable = true;
-        assertEquals("owner_table should have authorized user as owner", 
authorizedUser, table.getOwner());
-        assertEquals("owner_table should have correct owner type",
-            org.apache.hadoop.hive.metastore.api.PrincipalType.USER, 
table.getOwnerType());
-      } else if (table.getTableName().equals("other_table")) {
-        foundOtherTable = true;
-        assertEquals("other_table should have unauthorized user as owner", 
unAuthorizedUser, table.getOwner());
-        assertEquals("other_table should have correct owner type",
-            org.apache.hadoop.hive.metastore.api.PrincipalType.USER, 
table.getOwnerType());
+      // Check if the exception chain contains HiveAuthzPluginException
+      Throwable current = e;
+      boolean foundAuthzException = false;
+      while (current != null) {
+        if (current instanceof HiveAuthzPluginException) {
+          foundAuthzException = true;
+          String expectedErrMsg = "Operation type " + 
HiveOperationType.CREATEDATABASE + " not allowed for user:" + unAuthorizedUser;
+          assertTrue("Expected error message mismatch. Actual: '" + 
current.getMessage() + "'", current.getMessage().contains(expectedErrMsg));
+          break;
+        }
+        current = current.getCause();
       }
-    }
-
-    assertTrue("owner_table not found in tables", foundOwnerTable);
-    assertTrue("other_table not found in tables", foundOtherTable);
-
-    HiveMetaStoreAuthzInfo authzInfo = filterContext.getAuthzContext();
-    List<HivePrivilegeObject> privObjects = authzInfo.getInputHObjs();
 
-    assertEquals("Should have two privilege objects", 2, privObjects.size());
-
-    foundOwnerTable = false;
-    foundOtherTable = false;
-
-    for (HivePrivilegeObject obj : privObjects) {
-      if (obj.getObjectName().equals("owner_table")) {
-        foundOwnerTable = true;
-        assertEquals("owner_table privilege object should have authorized user 
as owner",
-            authorizedUser, obj.getOwnerName());
-      } else if (obj.getObjectName().equals("other_table")) {
-        foundOtherTable = true;
-        assertEquals("other_table privilege object should have unauthorized 
user as owner",
-            unAuthorizedUser, obj.getOwnerName());
+      if (!foundAuthzException) {
+        Throwable rootCause = ExceptionUtils.getRootCause(e);
+        if (rootCause instanceof HiveAuthzPluginException) {

Review Comment:
   I initially removed this test believing MockMetaStoreFilterHook provided 
equivalent coverage since both handle ownership-based filtering. I am restoring 
this test because it validates the data transformation layer that 
MockMetaStoreFilterHook cannot cover. Specifically, it ensures that when 
converting TableMeta objects to HivePrivilegeObjects, ownership information is 
correctly preserved during transformation. This complements 
MockMetaStoreFilterHook, which tests the actual filtering decisions.



##########
ql/src/test/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/TestHiveMetaStoreAuthorizer.java:
##########
@@ -547,76 +642,29 @@ public void testUnAuthorizedCause() {
           .build(conf);
       hmsHandler.create_database(db);
     } catch (Exception e) {
-      String[] rootCauseStackTrace = ExceptionUtils.getRootCauseStackTrace(e);
-      assertTrue(Arrays.stream(rootCauseStackTrace)
-          .anyMatch(stack -> 
stack.contains(DummyHiveAuthorizer.class.getName())));
-    }
-  }
-
-  @Test
-  public void testTableFilterContextWithOwnership() throws Exception {
-    List<TableMeta> tableMetas = new ArrayList<>();
-    TableMeta ownerTableMeta = new TableMeta();
-    ownerTableMeta.setCatName("hive");
-    ownerTableMeta.setDbName(default_db);
-    ownerTableMeta.setTableName("owner_table");
-    ownerTableMeta.setOwnerName(authorizedUser);
-    
ownerTableMeta.setOwnerType(org.apache.hadoop.hive.metastore.api.PrincipalType.USER);
-    tableMetas.add(ownerTableMeta);
-
-    TableMeta otherTableMeta = new TableMeta();
-    otherTableMeta.setCatName("hive");
-    otherTableMeta.setDbName(default_db);
-    otherTableMeta.setTableName("other_table");
-    otherTableMeta.setOwnerName(unAuthorizedUser);
-    
otherTableMeta.setOwnerType(org.apache.hadoop.hive.metastore.api.PrincipalType.USER);
-    tableMetas.add(otherTableMeta);
-
-    TableFilterContext filterContext = 
TableFilterContext.createFromTableMetas(default_db, tableMetas);
-    List<Table> tables = filterContext.getTables();
-    assertEquals("Should have two tables in context", 2, tables.size());
-
-    boolean foundOwnerTable = false;
-    boolean foundOtherTable = false;
-
-    for (Table table : tables) {
-      if (table.getTableName().equals("owner_table")) {
-        foundOwnerTable = true;
-        assertEquals("owner_table should have authorized user as owner", 
authorizedUser, table.getOwner());
-        assertEquals("owner_table should have correct owner type",
-            org.apache.hadoop.hive.metastore.api.PrincipalType.USER, 
table.getOwnerType());
-      } else if (table.getTableName().equals("other_table")) {
-        foundOtherTable = true;
-        assertEquals("other_table should have unauthorized user as owner", 
unAuthorizedUser, table.getOwner());
-        assertEquals("other_table should have correct owner type",
-            org.apache.hadoop.hive.metastore.api.PrincipalType.USER, 
table.getOwnerType());
+      // Check if the exception chain contains HiveAuthzPluginException
+      Throwable current = e;
+      boolean foundAuthzException = false;
+      while (current != null) {
+        if (current instanceof HiveAuthzPluginException) {
+          foundAuthzException = true;
+          String expectedErrMsg = "Operation type " + 
HiveOperationType.CREATEDATABASE + " not allowed for user:" + unAuthorizedUser;
+          assertTrue("Expected error message mismatch. Actual: '" + 
current.getMessage() + "'", current.getMessage().contains(expectedErrMsg));
+          break;
+        }
+        current = current.getCause();
       }
-    }
-
-    assertTrue("owner_table not found in tables", foundOwnerTable);
-    assertTrue("other_table not found in tables", foundOtherTable);
-
-    HiveMetaStoreAuthzInfo authzInfo = filterContext.getAuthzContext();
-    List<HivePrivilegeObject> privObjects = authzInfo.getInputHObjs();
 
-    assertEquals("Should have two privilege objects", 2, privObjects.size());
-
-    foundOwnerTable = false;
-    foundOtherTable = false;
-
-    for (HivePrivilegeObject obj : privObjects) {
-      if (obj.getObjectName().equals("owner_table")) {
-        foundOwnerTable = true;
-        assertEquals("owner_table privilege object should have authorized user 
as owner",
-            authorizedUser, obj.getOwnerName());
-      } else if (obj.getObjectName().equals("other_table")) {
-        foundOtherTable = true;
-        assertEquals("other_table privilege object should have unauthorized 
user as owner",
-            unAuthorizedUser, obj.getOwnerName());
+      if (!foundAuthzException) {
+        Throwable rootCause = ExceptionUtils.getRootCause(e);
+        if (rootCause instanceof HiveAuthzPluginException) {

Review Comment:
   I initially removed this test believing MockMetaStoreFilterHook provided 
equivalent coverage since both handle ownership-based filtering. I am restoring 
this test because it validates the data transformation layer that 
MockMetaStoreFilterHook cannot cover. Specifically, it ensures that when 
converting TableMeta objects to HivePrivilegeObjects, ownership information is 
correctly preserved during transformation. This complements 
MockMetaStoreFilterHook, which tests the actual filtering decisions.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org
For additional commands, e-mail: gitbox-h...@hive.apache.org

Reply via email to