You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kyuubi.apache.org by bo...@apache.org on 2023/05/30 05:55:34 UTC

[kyuubi] branch master updated: [KYUUBI #4892] [AUTHZ] Make identifier part name comparision case insenstive in tests of PrivilegeBuilder

This is an automated email from the ASF dual-hosted git repository.

bowenliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kyuubi.git


The following commit(s) were added to refs/heads/master by this push:
     new a1ce7fb68 [KYUUBI #4892] [AUTHZ] Make identifier part name comparision case insenstive in tests of PrivilegeBuilder
a1ce7fb68 is described below

commit a1ce7fb684f14c9a74d5cd8fddc20ffbfa9c3963
Author: liangbowen <li...@gf.com.cn>
AuthorDate: Tue May 30 13:55:18 2023 +0800

    [KYUUBI #4892] [AUTHZ] Make identifier part name comparision case insenstive in tests of PrivilegeBuilder
    
    ### _Why are the changes needed?_
    
    - the identifier parts are turned into lower case by default as `spark.sql.caseSensitive` config  (including catalog, database, table, function name), in [`SessionCatalog.qualifyIdentifier`](https://github.com/apache/spark/pull/37415/files#diff-9dd0899e5406230aeff96654432da54f35255f6dc60eecb87264a5c508a8c826R161) of <https://github.com/apache/spark/pull/37415>
    - fix failed ut in Authz pluin tested w/ Spark 3.4
      - AlterTableRenameCommand
      - AlterTableAddPartitionCommand
      - AlterViewAsCommand
      - AlterTableDropPartitionCommand
      - RefreshFunctionCommand
      - AlterTableRenamePartitionCommand
      - AlterTableSetLocationCommand
      - AlterTable(Un)SetPropertiesCommand
      - TruncateTableCommand
      - AlterTableAddColumnsCommand
      - AlterTableChangeColumnCommand
      - ShowCreateTableAsSerdeCommand
    
    ### _How was this patch tested?_
    - [ ] Add some test cases that check the changes thoroughly including negative and positive cases if possible
    
    - [ ] Add screenshots for manual tests if appropriate
    
    - [x] [Run test](https://kyuubi.readthedocs.io/en/master/develop_tools/testing.html#running-tests) locally before make a pull request
    
    Closes #4892 from bowenliang123/authz-assert-incase.
    
    Closes #4892
    
    8500dd8ed [liangbowen] case insenstive assertion to identifer part name
    
    Authored-by: liangbowen <li...@gf.com.cn>
    Signed-off-by: liangbowen <li...@gf.com.cn>
---
 .../IcebergCatalogPrivilegesBuilderSuite.scala     |  17 +-
 .../spark/authz/PrivilegesBuilderSuite.scala       | 257 +++++++++++----------
 .../spark/authz/V2CommandsPrivilegesSuite.scala    | 183 +++++++--------
 .../V2JdbcTableCatalogPrivilegesBuilderSuite.scala |  27 +--
 .../plugin/spark/authz/util/AssertionUtils.scala   |  54 +++++
 5 files changed, 298 insertions(+), 240 deletions(-)

diff --git a/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/IcebergCatalogPrivilegesBuilderSuite.scala b/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/IcebergCatalogPrivilegesBuilderSuite.scala
index a63174dc8..e68a8bfd0 100644
--- a/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/IcebergCatalogPrivilegesBuilderSuite.scala
+++ b/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/IcebergCatalogPrivilegesBuilderSuite.scala
@@ -22,6 +22,7 @@ import org.scalatest.Outcome
 import org.apache.kyuubi.Utils
 import org.apache.kyuubi.plugin.spark.authz.OperationType._
 import org.apache.kyuubi.plugin.spark.authz.ranger.AccessType
+import org.apache.kyuubi.plugin.spark.authz.util.AssertionUtils._
 import org.apache.kyuubi.plugin.spark.authz.util.AuthZUtils._
 import org.apache.kyuubi.tags.IcebergTest
 
@@ -67,8 +68,8 @@ class IcebergCatalogPrivilegesBuilderSuite extends V2CommandsPrivilegesSuite {
     val po = outputs.head
     assert(po.actionType === PrivilegeObjectActionType.UPDATE)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogTableShort)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = false)
@@ -84,8 +85,8 @@ class IcebergCatalogPrivilegesBuilderSuite extends V2CommandsPrivilegesSuite {
     val po = outputs.head
     assert(po.actionType === PrivilegeObjectActionType.UPDATE)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogTableShort)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = false)
@@ -107,8 +108,8 @@ class IcebergCatalogPrivilegesBuilderSuite extends V2CommandsPrivilegesSuite {
       val po0 = inputs.head
       assert(po0.actionType === PrivilegeObjectActionType.OTHER)
       assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po0.dbname === namespace)
-      assert(po0.objectName === catalogTableShort)
+      assertEqualsIgnoreCase(namespace)(po0.dbname)
+      assertEqualsIgnoreCase(catalogTableShort)(po0.objectName)
       assert(po0.columns === Seq("key", "value"))
       checkV2TableOwner(po0)
 
@@ -116,8 +117,8 @@ class IcebergCatalogPrivilegesBuilderSuite extends V2CommandsPrivilegesSuite {
       val po = outputs.head
       assert(po.actionType === PrivilegeObjectActionType.UPDATE)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po.dbname === namespace)
-      assert(po.objectName === table)
+      assertEqualsIgnoreCase(namespace)(po.dbname)
+      assertEqualsIgnoreCase(table)(po.objectName)
       assert(po.columns.isEmpty)
       checkV2TableOwner(po)
       val accessType = AccessType(po, operationType, isInput = false)
diff --git a/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/PrivilegesBuilderSuite.scala b/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/PrivilegesBuilderSuite.scala
index 5106a53f6..b5303aa81 100644
--- a/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/PrivilegesBuilderSuite.scala
+++ b/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/PrivilegesBuilderSuite.scala
@@ -33,6 +33,7 @@ import org.apache.kyuubi.plugin.spark.authz.OperationType._
 import org.apache.kyuubi.plugin.spark.authz.RangerTestNamespace._
 import org.apache.kyuubi.plugin.spark.authz.RangerTestUsers._
 import org.apache.kyuubi.plugin.spark.authz.ranger.AccessType
+import org.apache.kyuubi.plugin.spark.authz.util.AssertionUtils._
 import org.apache.kyuubi.plugin.spark.authz.util.AuthZUtils._
 
 abstract class PrivilegesBuilderSuite extends AnyFunSuite
@@ -123,8 +124,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.DATABASE)
     assert(po.catalog.isEmpty)
-    assert(po.dbname === defaultDb)
-    assert(po.objectName === defaultDb)
+    assertEqualsIgnoreCase(defaultDb)(po.dbname)
+    assertEqualsIgnoreCase(defaultDb)(po.objectName)
     assert(po.columns.isEmpty)
   }
 
@@ -148,8 +149,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
         out.foreach { po =>
           assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
           assert(po.catalog.isEmpty)
-          assert(po.dbname equalsIgnoreCase reusedDb)
-          assert(Set(oldTableShort, "efg").contains(po.objectName))
+          assertEqualsIgnoreCase(reusedDb)(po.dbname)
+          assertExistsIgnoreCase(po.objectName)(Set(oldTableShort, "efg"))
           assert(po.columns.isEmpty)
           val accessType = ranger.AccessType(po, operationType, isInput = false)
           assert(accessType == AccessType.ALTER)
@@ -172,8 +173,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.DATABASE)
       assert(po.catalog.isEmpty)
-      assert(po.dbname === "CreateDatabaseCommand")
-      assert(po.objectName === "CreateDatabaseCommand")
+      assertEqualsIgnoreCase(db)(po.dbname)
+      assertEqualsIgnoreCase(db)(po.objectName)
       assert(po.columns.isEmpty)
       val accessType = ranger.AccessType(po, operationType, isInput = false)
       assert(accessType === AccessType.CREATE)
@@ -195,8 +196,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.DATABASE)
       assert(po.catalog.isEmpty)
-      assert(po.dbname === "DropDatabaseCommand")
-      assert(po.objectName === "DropDatabaseCommand")
+      assertEqualsIgnoreCase(db)(po.dbname)
+      assertEqualsIgnoreCase(db)(po.objectName)
       assert(po.columns.isEmpty)
       val accessType = ranger.AccessType(po, operationType, isInput = false)
       assert(accessType === AccessType.DROP)
@@ -213,8 +214,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname equalsIgnoreCase reusedDb)
-    assert(po.objectName === reusedPartTableShort)
+    assertEqualsIgnoreCase(reusedDb)(po.dbname)
+    assertEqualsIgnoreCase(reusedPartTableShort)(po.objectName)
     assert(po.columns.head === "pid")
     checkTableOwner(po)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -231,8 +232,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname equalsIgnoreCase reusedDb)
-    assert(po.objectName === reusedPartTableShort)
+    assertEqualsIgnoreCase(reusedDb)(po.dbname)
+    assertEqualsIgnoreCase(reusedPartTableShort)(po.objectName)
     assert(po.columns.head === "pid")
     checkTableOwner(po)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -264,8 +265,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
         assert(po.actionType === PrivilegeObjectActionType.OTHER)
         assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
         assert(po.catalog.isEmpty)
-        assert(po.dbname equalsIgnoreCase reusedDb)
-        assert(po.objectName equalsIgnoreCase tableName.split("\\.").last)
+        assertEqualsIgnoreCase(reusedDb)(po.dbname)
+        assertEqualsIgnoreCase(tableName.split("\\.").last)(po.objectName)
         assert(po.columns.isEmpty)
         checkTableOwner(po)
         val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -287,8 +288,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname equalsIgnoreCase reusedDb)
-    assert(po.objectName === reusedPartTableShort)
+    assertEqualsIgnoreCase(reusedDb)(po.dbname)
+    assertEqualsIgnoreCase(reusedPartTableShort)(po.objectName)
     assert(po.columns.head === "pid")
     checkTableOwner(po)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -310,8 +311,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname === reusedDb)
-    assert(po.objectName === reusedPartTableShort)
+    assertEqualsIgnoreCase(reusedDb)(po.dbname)
+    assertEqualsIgnoreCase(reusedPartTableShort)(po.objectName)
     assert(po.columns.head === "pid")
     checkTableOwner(po)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -332,8 +333,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
       assert(po.catalog.isEmpty)
-      assert(po.dbname === reusedDb)
-      assert(po.objectName === reusedTable.split("\\.").last)
+      assertEqualsIgnoreCase(reusedDb)(po.dbname)
+      assertEqualsIgnoreCase(reusedTableShort)(po.objectName)
       assert(po.columns.isEmpty)
       checkTableOwner(po)
       val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -351,8 +352,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedPartTableShort)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedPartTableShort)(po0.objectName)
     if (isSparkV32OrGreater) {
       // Query in AlterViewAsCommand can not be resolved before SPARK-34698
       assert(po0.columns === Seq("key", "value", "pid"))
@@ -366,8 +367,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname === defaultDb)
-    assert(po.objectName === "AlterViewAsCommand")
+    assertEqualsIgnoreCase(defaultDb)(po.dbname)
+    assertEqualsIgnoreCase("AlterViewAsCommand")(po.objectName)
     checkTableOwner(po)
     assert(po.columns.isEmpty)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -383,8 +384,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedPartTableShort)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedPartTableShort)(po0.objectName)
     // ignore this check as it behaves differently across spark versions
     assert(po0.columns === Seq("key"))
     checkTableOwner(po0)
@@ -404,8 +405,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedPartTableShort)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedPartTableShort)(po0.objectName)
     // ignore this check as it behaves differently across spark versions
     assert(po0.columns === Seq("pid"))
     checkTableOwner(po0)
@@ -425,8 +426,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedPartTableShort)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedPartTableShort)(po0.objectName)
     // ignore this check as it behaves differently across spark versions
     assert(po0.columns.isEmpty)
     checkTableOwner(po0)
@@ -446,8 +447,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.DATABASE)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedDb)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedDb)(po0.objectName)
     // ignore this check as it behaves differently across spark versions
     assert(po0.columns.isEmpty)
     val accessType0 = ranger.AccessType(po0, operationType, isInput = true)
@@ -464,8 +465,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedDb)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedDb)(po0.objectName)
     assert(po0.columns.isEmpty)
     checkTableOwner(po0)
     val accessType0 = ranger.AccessType(po0, operationType, isInput = true)
@@ -483,8 +484,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedTableShort)(po0.objectName)
     if (isSparkV32OrGreater) {
       assert(po0.columns.head === "key")
       checkTableOwner(po0)
@@ -506,8 +507,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedTableShort)(po0.objectName)
     if (isSparkV32OrGreater) {
       assert(po0.columns === Seq("key", "value"))
       checkTableOwner(po0)
@@ -522,8 +523,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname === defaultDb)
-    assert(po.objectName === "CreateViewCommand")
+    assertEqualsIgnoreCase(defaultDb)(po.dbname)
+    assertEqualsIgnoreCase("CreateViewCommand")(po.objectName)
     assert(po.columns.isEmpty)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
     assert(accessType === AccessType.CREATE)
@@ -542,8 +543,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
       assert(po.catalog.isEmpty)
-      assert(po.dbname === defaultDb)
-      assert(po.objectName === tableName)
+      assertEqualsIgnoreCase(defaultDb)(po.dbname)
+      assertEqualsIgnoreCase(tableName)(po.objectName)
       assert(po.columns.isEmpty)
       val accessType = ranger.AccessType(po, operationType, isInput = false)
       assert(accessType === AccessType.CREATE)
@@ -590,8 +591,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.privilegeObjectType === PrivilegeObjectType.FUNCTION)
     assert(po.catalog.isEmpty)
     val db = if (isSparkV33OrGreater) defaultDb else null
-    assert(po.dbname === db)
-    assert(po.objectName === "CreateFunctionCommand")
+    assertEqualsIgnoreCase(db)(po.dbname)
+    assertEqualsIgnoreCase("CreateFunctionCommand")(po.objectName)
     assert(po.columns.isEmpty)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
     assert(accessType === AccessType.CREATE)
@@ -622,8 +623,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.privilegeObjectType === PrivilegeObjectType.FUNCTION)
     assert(po.catalog.isEmpty)
     val db = if (isSparkV33OrGreater) defaultDb else null
-    assert(po.dbname === db)
-    assert(po.objectName === "DropFunctionCommand")
+    assertEqualsIgnoreCase(db)(po.dbname)
+    assertEqualsIgnoreCase("DropFunctionCommand")(po.objectName)
     assert(po.columns.isEmpty)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
     assert(accessType === AccessType.DROP)
@@ -643,8 +644,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.privilegeObjectType === PrivilegeObjectType.FUNCTION)
     assert(po.catalog.isEmpty)
     val db = if (isSparkV33OrGreater) defaultDb else null
-    assert(po.dbname === db)
-    assert(po.objectName === "RefreshFunctionCommand")
+    assertEqualsIgnoreCase(db)(po.dbname)
+    assertEqualsIgnoreCase("RefreshFunctionCommand")(po.objectName)
     assert(po.columns.isEmpty)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
     assert(accessType === AccessType.NONE)
@@ -659,8 +660,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       val po0 = in.head
       assert(po0.actionType === PrivilegeObjectActionType.OTHER)
       assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po0.dbname equalsIgnoreCase reusedDb)
-      assert(po0.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+      assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+      assertEqualsIgnoreCase(reusedTableShort)(po0.objectName)
       assert(po0.columns.isEmpty)
       checkTableOwner(po0)
       val accessType0 = ranger.AccessType(po0, operationType, isInput = true)
@@ -671,8 +672,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
       assert(po.catalog.isEmpty)
-      assert(po.dbname equalsIgnoreCase reusedDb)
-      assert(po.objectName === "CreateTableLikeCommand")
+      assertEqualsIgnoreCase(reusedDb)(po.dbname)
+      assertEqualsIgnoreCase("CreateTableLikeCommand")(po.objectName)
       assert(po.columns.isEmpty)
       val accessType = ranger.AccessType(po, operationType, isInput = false)
       assert(accessType === AccessType.CREATE)
@@ -690,8 +691,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       val po0 = in.head
       assert(po0.actionType === PrivilegeObjectActionType.OTHER)
       assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po0.dbname equalsIgnoreCase reusedDb)
-      assert(po0.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+      assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+      assertEqualsIgnoreCase(reusedTableShort)(po0.objectName)
       assert(po0.columns.isEmpty)
       checkTableOwner(po0)
       val accessType0 = ranger.AccessType(po0, operationType, isInput = true)
@@ -702,8 +703,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
       assert(po.catalog.isEmpty)
-      assert(po.dbname equalsIgnoreCase reusedDb)
-      assert(po.objectName === "CreateTableLikeCommandWithoutDatabase")
+      assertEqualsIgnoreCase(reusedDb)(po.dbname)
+      assertEqualsIgnoreCase("CreateTableLikeCommandWithoutDatabase")(po.objectName)
       assert(po.columns.isEmpty)
       val accessType = ranger.AccessType(po, operationType, isInput = false)
       assert(accessType === AccessType.CREATE)
@@ -728,8 +729,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname equalsIgnoreCase reusedDb)
-    assert(po.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+    assertEqualsIgnoreCase(reusedDb)(po.dbname)
+    assertEqualsIgnoreCase(reusedTableShort)(po.objectName)
     assert(po.columns === Seq("key"))
     checkTableOwner(po)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -747,8 +748,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname equalsIgnoreCase reusedDb)
-    assert(po.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+    assertEqualsIgnoreCase(reusedDb)(po.dbname)
+    assertEqualsIgnoreCase(reusedTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkTableOwner(po)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -767,8 +768,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.DATABASE)
     assert(po.catalog.isEmpty)
-    assert(po.dbname equalsIgnoreCase reusedDb)
-    assert(po.objectName equalsIgnoreCase reusedDb)
+    assertEqualsIgnoreCase(reusedDb)(po.dbname)
+    assertEqualsIgnoreCase(reusedDb)(po.objectName)
     assert(po.columns.isEmpty)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
     assert(accessType === AccessType.USE)
@@ -786,8 +787,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       val po0 = in.head
       assert(po0.actionType === PrivilegeObjectActionType.OTHER)
       assert(po0.privilegeObjectType === PrivilegeObjectType.DATABASE)
-      assert(po0.dbname equalsIgnoreCase reusedDb)
-      assert(po0.objectName equalsIgnoreCase reusedDb)
+      assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+      assertEqualsIgnoreCase(reusedDb)(po0.objectName)
       assert(po0.columns.isEmpty)
       val accessType0 = ranger.AccessType(po0, operationType, isInput = false)
       assert(accessType0 === AccessType.USE)
@@ -809,8 +810,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname equalsIgnoreCase reusedDb)
-    assert(po.objectName === reusedPartTableShort)
+    assertEqualsIgnoreCase(reusedDb)(po.dbname)
+    assertEqualsIgnoreCase(reusedPartTableShort)(po.objectName)
     assert(po.columns.head === "pid")
     checkTableOwner(po)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -825,8 +826,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedTableShort)(po0.objectName)
     assert(po0.columns.isEmpty)
     checkTableOwner(po0)
     val accessType0 = ranger.AccessType(po0, operationType, isInput = true)
@@ -843,8 +844,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedTableShort)(po0.objectName)
     assert(po0.columns.isEmpty)
     checkTableOwner(po0)
     val accessType0 = ranger.AccessType(po0, operationType, isInput = true)
@@ -861,8 +862,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedTableShort)(po0.objectName)
     assert(po0.columns.isEmpty)
     checkTableOwner(po0)
     val accessType0 = ranger.AccessType(po0, operationType, isInput = true)
@@ -880,8 +881,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedPartTableShort)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedPartTableShort)(po0.objectName)
     assert(po0.columns === Seq("pid"))
     checkTableOwner(po0)
     val accessType0 = ranger.AccessType(po0, operationType, isInput = true)
@@ -916,8 +917,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
         assert(po.actionType === PrivilegeObjectActionType.OTHER)
         assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
         assert(po.catalog.isEmpty)
-        assert(po.dbname equalsIgnoreCase reusedDb)
-        assert(po.objectName equalsIgnoreCase tableName.split("\\.").last)
+        assertEqualsIgnoreCase(reusedDb)(po.dbname)
+        assertEqualsIgnoreCase(tableName.split("\\.").last)(po.objectName)
         assert(po.columns.isEmpty)
         checkTableOwner(po)
         val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -932,8 +933,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname equalsIgnoreCase reusedDb)
-    assert(po.objectName equalsIgnoreCase reusedTableShort)
+    assertEqualsIgnoreCase(reusedDb)(po.dbname)
+    assertEqualsIgnoreCase(reusedTableShort)(po.objectName)
     assert(po.columns.take(2) === Seq("key", "value"))
     checkTableOwner(po)
   }
@@ -1007,8 +1008,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
       assert(po.catalog.isEmpty)
-      assert(po.dbname equalsIgnoreCase reusedDb)
-      assert(po.objectName startsWith reusedTableShort.toLowerCase)
+      assertEqualsIgnoreCase(reusedDb)(po.dbname)
+      assertStartsWithIgnoreCase(reusedTableShort)(po.objectName)
       assert(
         po.columns === Seq("value", "pid", "key"),
         s"$reusedPartTable both 'key', 'value' and 'pid' should be authenticated")
@@ -1034,8 +1035,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
       assert(po.catalog.isEmpty)
-      assert(po.dbname equalsIgnoreCase reusedDb)
-      assert(po.objectName startsWith reusedTableShort.toLowerCase)
+      assertEqualsIgnoreCase(reusedDb)(po.dbname)
+      assertStartsWithIgnoreCase(reusedTableShort)(po.objectName)
       assert(
         po.columns === Seq("value", "key", "pid"),
         s"$reusedPartTable both 'key', 'value' and 'pid' should be authenticated")
@@ -1064,8 +1065,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
       assert(po.catalog.isEmpty)
-      assert(po.dbname equalsIgnoreCase reusedDb)
-      assert(po.objectName startsWith reusedTableShort.toLowerCase)
+      assertEqualsIgnoreCase(reusedDb)(po.dbname)
+      assertStartsWithIgnoreCase(reusedTableShort)(po.objectName)
       assert(
         po.columns === Seq("key", "value"),
         s"$reusedPartTable 'key' is the join key and 'pid' is omitted")
@@ -1093,8 +1094,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
       assert(po.catalog.isEmpty)
-      assert(po.dbname equalsIgnoreCase reusedDb)
-      assert(po.objectName startsWith reusedTableShort.toLowerCase)
+      assertEqualsIgnoreCase(reusedDb)(po.dbname)
+      assertStartsWithIgnoreCase(reusedTableShort)(po.objectName)
       assert(
         po.columns === Seq("key", "value"),
         s"$reusedPartTable both 'key' and 'value' should be authenticated")
@@ -1123,8 +1124,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
       assert(po.catalog.isEmpty)
-      assert(po.dbname equalsIgnoreCase reusedDb)
-      assert(po.objectName startsWith reusedTableShort.toLowerCase)
+      assertEqualsIgnoreCase(reusedDb)(po.dbname)
+      assertStartsWithIgnoreCase(reusedTableShort)(po.objectName)
       assert(
         po.columns === Seq("key", "value"),
         s"$reusedPartTable both 'key' and 'value' should be authenticated")
@@ -1149,8 +1150,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
       assert(po.catalog.isEmpty)
-      assert(po.dbname equalsIgnoreCase reusedDb)
-      assert(po.objectName startsWith reusedTableShort.toLowerCase)
+      assertEqualsIgnoreCase(reusedDb)(po.dbname)
+      assertStartsWithIgnoreCase(reusedTableShort)(po.objectName)
       assert(
         po.columns === Seq("key", "value"),
         s"$reusedPartTable both 'key' and 'value' should be authenticated")
@@ -1175,8 +1176,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
       assert(po.catalog.isEmpty)
-      assert(po.dbname equalsIgnoreCase reusedDb)
-      assert(po.objectName startsWith reusedTableShort.toLowerCase)
+      assertEqualsIgnoreCase(reusedDb)(po.dbname)
+      assertStartsWithIgnoreCase(reusedTableShort)(po.objectName)
       assert(
         po.columns === Seq("key", "value", "pid"),
         s"$reusedPartTable both 'key', 'value' and 'pid' should be authenticated")
@@ -1219,8 +1220,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname equalsIgnoreCase reusedDb)
-    assert(po.objectName === getClass.getSimpleName)
+    assertEqualsIgnoreCase(reusedDb)(po.dbname)
+    assertEqualsIgnoreCase(reusedTableShort)(po.objectName)
     assert(po.columns.head === "a")
     checkTableOwner(po)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -1238,8 +1239,8 @@ abstract class PrivilegesBuilderSuite extends AnyFunSuite
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname equalsIgnoreCase reusedDb)
-    assert(po.objectName === getClass.getSimpleName)
+    assertEqualsIgnoreCase(reusedDb)(po.dbname)
+    assertEqualsIgnoreCase(reusedTableShort)(po.objectName)
     assert(po.columns.head === "value")
     checkTableOwner(po)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -1266,8 +1267,8 @@ class InMemoryPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.DATABASE)
     assert(po.catalog.isEmpty)
-    assert(po.dbname === defaultDb)
-    assert(po.objectName === defaultDb)
+    assertEqualsIgnoreCase(defaultDb)(po.dbname)
+    assertEqualsIgnoreCase(defaultDb)(po.objectName)
     assert(po.columns.isEmpty)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
     assert(accessType === AccessType.ALTER)
@@ -1283,8 +1284,8 @@ class InMemoryPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedTableShort)(po0.objectName)
     assert(po0.columns === Seq("key", "value"))
     checkTableOwner(po0)
     val accessType0 = ranger.AccessType(po0, operationType, isInput = true)
@@ -1295,8 +1296,8 @@ class InMemoryPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname === defaultDb)
-    assert(po.objectName === "CreateDataSourceTableAsSelectCommand")
+    assertEqualsIgnoreCase(defaultDb)(po.dbname)
+    assertEqualsIgnoreCase("CreateDataSourceTableAsSelectCommand")(po.objectName)
     if (catalogImpl == "hive") {
       assert(po.columns === Seq("key", "value"))
     } else {
@@ -1326,8 +1327,8 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
       assert(po.catalog.isEmpty)
-      assert(po.dbname === defaultDb)
-      assert(po.objectName === t)
+      assertEqualsIgnoreCase(defaultDb)(po.dbname)
+      assertEqualsIgnoreCase(t)(po.objectName)
       assert(po.columns.head === "pid")
       checkTableOwner(po)
       val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -1347,8 +1348,8 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
       assert(po.catalog.isEmpty)
-      assert(po.dbname === defaultDb)
-      assert(po.objectName === "CreateTableCommand")
+      assertEqualsIgnoreCase(defaultDb)(po.dbname)
+      assertEqualsIgnoreCase("CreateTableCommand")(po.objectName)
       assert(po.columns.isEmpty)
       val accessType = ranger.AccessType(po, operationType, isInput = false)
       assert(accessType === AccessType.CREATE)
@@ -1366,8 +1367,8 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
-    assert(po0.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+    assertEqualsIgnoreCase(reusedTableShort)(po0.objectName)
     assert(po0.columns === Seq("key", "value"))
     checkTableOwner(po0)
     val accessType0 = ranger.AccessType(po0, operationType, isInput = true)
@@ -1378,8 +1379,8 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname === defaultDb)
-    assert(po.objectName === "CreateHiveTableAsSelectCommand")
+    assertEqualsIgnoreCase(defaultDb)(po.dbname)
+    assertEqualsIgnoreCase("CreateHiveTableAsSelectCommand")(po.objectName)
     assert(po.columns === Seq("key", "value"))
     val accessType = ranger.AccessType(po, operationType, isInput = false)
     assert(accessType === AccessType.CREATE)
@@ -1405,7 +1406,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
       val po0 = out.head
       assert(po0.actionType === PrivilegeObjectActionType.INSERT_OVERWRITE)
       assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po0.dbname equalsIgnoreCase reusedDb)
+      assertEqualsIgnoreCase(reusedDb)(po0.dbname)
       assert(po0.objectName equalsIgnoreCase tableName.split("\\.").last)
       assert(po0.columns.isEmpty)
       checkTableOwner(po0)
@@ -1429,7 +1430,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
     assert(po0.objectName equalsIgnoreCase reusedPartTable.split("\\.").last)
     assert(po0.columns === Seq("key", "value", "pid"))
     checkTableOwner(po0)
@@ -1473,8 +1474,8 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
         assert(po.actionType === PrivilegeObjectActionType.OTHER)
         assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
         assert(po.catalog.isEmpty)
-        assert(po.dbname equalsIgnoreCase reusedDb)
-        assert(po.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+        assertEqualsIgnoreCase(reusedDb)(po.dbname)
+        assertEqualsIgnoreCase(reusedTableShort)(po.objectName)
         assert(po.columns === Seq("key", "value"))
         checkTableOwner(po)
         val accessType = ranger.AccessType(po, operationType, isInput = true)
@@ -1486,8 +1487,8 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
         assert(po.actionType === PrivilegeObjectActionType.INSERT)
         assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
         assert(po.catalog.isEmpty)
-        assert(po.dbname equalsIgnoreCase defaultDb)
-        assert(po.objectName equalsIgnoreCase tableName)
+        assertEqualsIgnoreCase(defaultDb)(po.dbname)
+        assertEqualsIgnoreCase(tableName)(po.objectName)
         assert(po.columns.isEmpty)
         checkTableOwner(po)
         val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -1515,8 +1516,8 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
         assert(po.actionType === PrivilegeObjectActionType.OTHER)
         assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
         assert(po.catalog.isEmpty)
-        assert(po.dbname equalsIgnoreCase reusedDb)
-        assert(po.objectName equalsIgnoreCase reusedTable.split("\\.").last)
+        assertEqualsIgnoreCase(reusedDb)(po.dbname)
+        assertEqualsIgnoreCase(reusedTableShort)(po.objectName)
         assert(po.columns === Seq("key", "value"))
         checkTableOwner(po)
         val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -1528,8 +1529,8 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
         assert(po.actionType === PrivilegeObjectActionType.INSERT)
         assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
         assert(po.catalog.isEmpty)
-        assert(po.dbname equalsIgnoreCase defaultDb)
-        assert(po.objectName equalsIgnoreCase tableName)
+        assertEqualsIgnoreCase(defaultDb)(po.dbname)
+        assertEqualsIgnoreCase(tableName)(po.objectName)
         assert(po.columns === Seq("a", "b"))
         checkTableOwner(po)
         val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -1553,7 +1554,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
     assert(po0.objectName equalsIgnoreCase reusedPartTable.split("\\.").last)
     assert(po0.columns === Seq("key", "value", "pid"))
     checkTableOwner(po0)
@@ -1578,7 +1579,7 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
     val po0 = in.head
     assert(po0.actionType === PrivilegeObjectActionType.OTHER)
     assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po0.dbname equalsIgnoreCase reusedDb)
+    assertEqualsIgnoreCase(reusedDb)(po0.dbname)
     assert(po0.objectName equalsIgnoreCase reusedPartTable.split("\\.").last)
     assert(po0.columns === Seq("key", "value", "pid"))
     checkTableOwner(po0)
@@ -1607,8 +1608,8 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
         assert(po.actionType === PrivilegeObjectActionType.INSERT)
         assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
         assert(po.catalog.isEmpty)
-        assert(po.dbname equalsIgnoreCase defaultDb)
-        assert(po.objectName equalsIgnoreCase tableName)
+        assertEqualsIgnoreCase(defaultDb)(po.dbname)
+        assertEqualsIgnoreCase(tableName)(po.objectName)
         assert(po.columns === Seq("a", "b"))
         checkTableOwner(po)
         val accessType = ranger.AccessType(po, operationType, isInput = false)
@@ -1627,8 +1628,8 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
       val po0 = in.head
       assert(po0.actionType === PrivilegeObjectActionType.OTHER)
       assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po0.dbname === defaultDb)
-      assert(po0.objectName === t)
+      assertEqualsIgnoreCase(defaultDb)(po0.dbname)
+      assertEqualsIgnoreCase(t)(po0.objectName)
       assert(po0.columns.isEmpty)
       checkTableOwner(po0)
       val accessType0 = ranger.AccessType(po0, operationType, isInput = true)
@@ -1652,8 +1653,8 @@ class HiveCatalogPrivilegeBuilderSuite extends PrivilegesBuilderSuite {
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
     assert(po.catalog.isEmpty)
-    assert(po.dbname === defaultDb)
-    assert(po.objectName === "OptimizedCreateHiveTableAsSelectCommand")
+    assertEqualsIgnoreCase(defaultDb)(po.dbname)
+    assertEqualsIgnoreCase("OptimizedCreateHiveTableAsSelectCommand")(po.objectName)
     assert(po.columns === Seq("a"))
     val accessType = ranger.AccessType(po, operationType, isInput = false)
     assert(accessType === AccessType.CREATE)
diff --git a/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/V2CommandsPrivilegesSuite.scala b/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/V2CommandsPrivilegesSuite.scala
index c97dd9e26..907b0018b 100644
--- a/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/V2CommandsPrivilegesSuite.scala
+++ b/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/V2CommandsPrivilegesSuite.scala
@@ -26,6 +26,7 @@ import org.apache.kyuubi.plugin.spark.authz.OperationType._
 import org.apache.kyuubi.plugin.spark.authz.RangerTestNamespace._
 import org.apache.kyuubi.plugin.spark.authz.ranger.AccessType
 import org.apache.kyuubi.plugin.spark.authz.serde.{Database, DB_COMMAND_SPECS}
+import org.apache.kyuubi.plugin.spark.authz.util.AssertionUtils._
 import org.apache.kyuubi.plugin.spark.authz.util.AuthZUtils._
 
 abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
@@ -101,9 +102,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po = outputs.head
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po.catalog === Some(catalogV2))
-      assert(po.dbname === namespace)
-      assert(po.objectName === table)
+      assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+      assertEqualsIgnoreCase(namespace)(po.dbname)
+      assertEqualsIgnoreCase(table)(po.objectName)
       assert(po.columns.isEmpty)
       assert(po.owner.isEmpty)
       val accessType = AccessType(po, operationType, isInput = false)
@@ -123,9 +124,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po0 = inputs.head
       assert(po0.actionType === PrivilegeObjectActionType.OTHER)
       assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po0.catalog === None)
-      assert(po0.dbname equalsIgnoreCase reusedDb)
-      assert(po0.objectName equalsIgnoreCase reusedTableShort)
+      assert(po0.catalog.isEmpty)
+      assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+      assertEqualsIgnoreCase(reusedTableShort)(po0.objectName)
       assert(po0.columns.take(2) === Seq("key", "value"))
       checkTableOwner(po0)
 
@@ -133,9 +134,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po = outputs.head
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po.catalog === Some(catalogV2))
-      assert(po.dbname === namespace)
-      assert(po.objectName === table)
+      assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+      assertEqualsIgnoreCase(namespace)(po.dbname)
+      assertEqualsIgnoreCase(table)(po.objectName)
       assert(po.columns.isEmpty)
       assert(po.owner.isEmpty)
       val accessType = AccessType(po, operationType, isInput = false)
@@ -156,9 +157,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po = outputs.head
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po.catalog === Some(catalogV2))
-      assert(po.dbname === namespace)
-      assert(po.objectName === table)
+      assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+      assertEqualsIgnoreCase(namespace)(po.dbname)
+      assertEqualsIgnoreCase(table)(po.objectName)
       assert(po.columns.isEmpty)
       assert(po.owner.isEmpty)
       val accessType = AccessType(po, operationType, isInput = false)
@@ -178,9 +179,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po0 = inputs.head
       assert(po0.actionType === PrivilegeObjectActionType.OTHER)
       assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po0.catalog === None)
-      assert(po0.dbname equalsIgnoreCase reusedDb)
-      assert(po0.objectName equalsIgnoreCase reusedTableShort)
+      assert(po0.catalog.isEmpty)
+      assertEqualsIgnoreCase(reusedDb)(po0.dbname)
+      assertEqualsIgnoreCase(reusedTableShort)(po0.objectName)
       assert(po0.columns.take(2) === Seq("key", "value"))
       checkTableOwner(po0)
 
@@ -188,9 +189,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po = outputs.head
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po.catalog === Some(catalogV2))
-      assert(po.dbname === namespace)
-      assert(po.objectName === table)
+      assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+      assertEqualsIgnoreCase(namespace)(po.dbname)
+      assertEqualsIgnoreCase(table)(po.objectName)
       assert(po.columns.isEmpty)
       assert(po.owner.isEmpty)
       val accessType = AccessType(po, operationType, isInput = false)
@@ -209,9 +210,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     val po = outputs.head
     assert(po.actionType === PrivilegeObjectActionType.INSERT)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.catalog === Some(catalogV2))
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogTableShort)
+    assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = false)
@@ -231,9 +232,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     val po = outputs.head
     assert(po.actionType === PrivilegeObjectActionType.UPDATE)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.catalog === Some(catalogV2))
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogTableShort)
+    assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = false)
@@ -251,9 +252,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     val po = outputs.head
     assert(po.actionType === PrivilegeObjectActionType.UPDATE)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.catalog === Some(catalogV2))
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogTableShort)
+    assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = false)
@@ -269,9 +270,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     val po = outputs.head
     assert(po.actionType === PrivilegeObjectActionType.INSERT_OVERWRITE)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.catalog === Some(catalogV2))
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogTableShort)
+    assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = false)
@@ -292,9 +293,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po = outputs.head
       assert(po.actionType === PrivilegeObjectActionType.INSERT_OVERWRITE)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po.catalog === Some(catalogV2))
-      assert(po.dbname === namespace)
-      assert(po.objectName === catalogPartTableShort)
+      assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+      assertEqualsIgnoreCase(namespace)(po.dbname)
+      assertEqualsIgnoreCase(catalogPartTableShort)(po.objectName)
       assert(po.columns.isEmpty)
       checkV2TableOwner(po)
       val accessType = AccessType(po, operationType, isInput = false)
@@ -317,9 +318,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     val po = outputs.head
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.catalog === Some(catalogV2))
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogPartTableShort)
+    assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogPartTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = false)
@@ -339,9 +340,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     val po = outputs.head
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.catalog === Some(catalogV2))
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogPartTableShort)
+    assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogPartTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = false)
@@ -361,9 +362,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     val po = outputs.head
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.catalog === Some(catalogV2))
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogPartTableShort)
+    assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogPartTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = false)
@@ -384,9 +385,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     val po = outputs.head
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.catalog === Some(catalogV2))
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogPartTableShort)
+    assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogPartTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = false)
@@ -405,9 +406,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     val po = outputs.head
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.catalog === Some(catalogV2))
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogTableShort)
+    assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = false)
@@ -427,9 +428,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po = outputs.head
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po.catalog === Some(catalogV2))
-      assert(po.dbname === namespace)
-      assert(po.objectName === table)
+      assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+      assertEqualsIgnoreCase(namespace)(po.dbname)
+      assertEqualsIgnoreCase(table)(po.objectName)
       assert(po.columns.isEmpty)
       checkV2TableOwner(po)
       val accessType = AccessType(po, operationType, isInput = false)
@@ -454,9 +455,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po0 = inputs.head
       assert(po0.actionType === PrivilegeObjectActionType.OTHER)
       assert(po0.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po0.catalog === Some(catalogV2))
-      assert(po0.dbname === namespace)
-      assert(po0.objectName === catalogTableShort)
+      assertEqualsIgnoreCase(Some(catalogV2))(po0.catalog)
+      assertEqualsIgnoreCase(namespace)(po0.dbname)
+      assertEqualsIgnoreCase(catalogTableShort)(po0.objectName)
       assert(po0.columns === Seq("key", "value"))
       checkV2TableOwner(po0)
 
@@ -464,9 +465,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po = outputs.head
       assert(po.actionType === PrivilegeObjectActionType.UPDATE)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po.catalog === Some(catalogV2))
-      assert(po.dbname === namespace)
-      assert(po.objectName === table)
+      assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+      assertEqualsIgnoreCase(namespace)(po.dbname)
+      assertEqualsIgnoreCase(table)(po.objectName)
       assert(po.columns.isEmpty)
       checkV2TableOwner(po)
       val accessType = AccessType(po, operationType, isInput = false)
@@ -487,9 +488,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     val po = outputs.head
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.catalog === Some(catalogV2))
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogPartTableShort)
+    assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogPartTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = false)
@@ -508,9 +509,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     val po = outputs.head
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.catalog === Some(catalogV2))
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogTableShort)
+    assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = false)
@@ -525,9 +526,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     val po = inputs.head
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-    assert(po.catalog === Some(catalogV2))
-    assert(po.dbname === namespace)
-    assert(po.objectName === catalogTableShort)
+    assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+    assertEqualsIgnoreCase(namespace)(po.dbname)
+    assertEqualsIgnoreCase(catalogTableShort)(po.objectName)
     assert(po.columns.isEmpty)
     checkV2TableOwner(po)
     val accessType = AccessType(po, operationType, isInput = true)
@@ -552,9 +553,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po = outputs.head
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po.catalog === Some(catalogV2))
-      assert(po.dbname === namespace)
-      assert(po.objectName === table)
+      assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+      assertEqualsIgnoreCase(namespace)(po.dbname)
+      assertEqualsIgnoreCase(table)(po.objectName)
       assert(po.columns.isEmpty)
       checkV2TableOwner(po)
       val accessType = AccessType(po, operationType, isInput = false)
@@ -577,9 +578,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po = outputs.head
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po.catalog === Some(catalogV2))
-      assert(po.dbname === namespace)
-      assert(po.objectName === table)
+      assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+      assertEqualsIgnoreCase(namespace)(po.dbname)
+      assertEqualsIgnoreCase(table)(po.objectName)
       assert(po.columns.isEmpty)
       checkV2TableOwner(po)
       val accessType = AccessType(po, operationType, isInput = false)
@@ -602,9 +603,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po = outputs.head
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po.catalog === Some(catalogV2))
-      assert(po.dbname === namespace)
-      assert(po.objectName === table)
+      assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+      assertEqualsIgnoreCase(namespace)(po.dbname)
+      assertEqualsIgnoreCase(table)(po.objectName)
       assert(po.columns.isEmpty)
       checkV2TableOwner(po)
       val accessType = AccessType(po, operationType, isInput = false)
@@ -627,9 +628,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po = outputs.head
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po.catalog === Some(catalogV2))
-      assert(po.dbname === namespace)
-      assert(po.objectName === table)
+      assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+      assertEqualsIgnoreCase(namespace)(po.dbname)
+      assertEqualsIgnoreCase(table)(po.objectName)
       assert(po.columns.isEmpty)
       checkV2TableOwner(po)
       val accessType = AccessType(po, operationType, isInput = false)
@@ -652,9 +653,9 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       val po = outputs.head
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.TABLE_OR_VIEW)
-      assert(po.catalog === Some(catalogV2))
-      assert(po.dbname === namespace)
-      assert(po.objectName === table)
+      assertEqualsIgnoreCase(Some(catalogV2))(po.catalog)
+      assertEqualsIgnoreCase(namespace)(po.dbname)
+      assertEqualsIgnoreCase(table)(po.objectName)
       assert(po.columns.isEmpty)
       checkV2TableOwner(po)
       val accessType = AccessType(po, operationType, isInput = false)
@@ -690,8 +691,8 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.DATABASE)
     assert(po.catalog.get === sparkSessionCatalogName)
-    assert(po.dbname === defaultDb)
-    assert(po.objectName === defaultDb)
+    assertEqualsIgnoreCase(defaultDb)(po.dbname)
+    assertEqualsIgnoreCase(defaultDb)(po.objectName)
     assert(po.columns.isEmpty)
   }
 
@@ -709,8 +710,8 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.DATABASE)
       assert(po.catalog.get === sparkSessionCatalogName)
-      assert(po.dbname === "CreateNamespace")
-      assert(po.objectName === "CreateNamespace")
+      assertEqualsIgnoreCase("CreateNamespace")(po.dbname)
+      assertEqualsIgnoreCase("CreateNamespace")(po.objectName)
       assert(po.columns.isEmpty)
       val accessType = ranger.AccessType(po, operationType, isInput = false)
       assert(accessType === AccessType.CREATE)
@@ -734,8 +735,8 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.DATABASE)
     assert(po.catalog.get === sparkSessionCatalogName)
-    assert(po.dbname === defaultDb)
-    assert(po.objectName === defaultDb)
+    assertEqualsIgnoreCase(defaultDb)(po.dbname)
+    assertEqualsIgnoreCase(defaultDb)(po.objectName)
     assert(po.columns.isEmpty)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
     assert(accessType === AccessType.ALTER)
@@ -753,8 +754,8 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
     assert(po.actionType === PrivilegeObjectActionType.OTHER)
     assert(po.privilegeObjectType === PrivilegeObjectType.DATABASE)
     assert(po.catalog.get === sparkSessionCatalogName)
-    assert(po.dbname equalsIgnoreCase reusedDb)
-    assert(po.objectName equalsIgnoreCase reusedDb)
+    assertEqualsIgnoreCase(reusedDb)(po.dbname)
+    assertEqualsIgnoreCase(reusedDb)(po.objectName)
     assert(po.columns.isEmpty)
     val accessType = ranger.AccessType(po, operationType, isInput = false)
     assert(accessType === AccessType.USE)
@@ -777,8 +778,8 @@ abstract class V2CommandsPrivilegesSuite extends PrivilegesBuilderSuite {
       assert(po.actionType === PrivilegeObjectActionType.OTHER)
       assert(po.privilegeObjectType === PrivilegeObjectType.DATABASE)
       assert(po.catalog.get === sparkSessionCatalogName)
-      assert(po.dbname === "DropNameSpace")
-      assert(po.objectName === "DropNameSpace")
+      assertEqualsIgnoreCase(db)(po.dbname)
+      assertEqualsIgnoreCase(db)(po.objectName)
       assert(po.columns.isEmpty)
       val accessType = ranger.AccessType(po, operationType, isInput = false)
       assert(accessType === AccessType.DROP)
diff --git a/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/V2JdbcTableCatalogPrivilegesBuilderSuite.scala b/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/V2JdbcTableCatalogPrivilegesBuilderSuite.scala
index 63367c91c..c7ad1356e 100644
--- a/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/V2JdbcTableCatalogPrivilegesBuilderSuite.scala
+++ b/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/V2JdbcTableCatalogPrivilegesBuilderSuite.scala
@@ -23,6 +23,7 @@ import scala.util.Try
 import org.scalatest.Outcome
 
 import org.apache.kyuubi.plugin.spark.authz.serde._
+import org.apache.kyuubi.plugin.spark.authz.util.AssertionUtils._
 import org.apache.kyuubi.plugin.spark.authz.util.AuthZUtils._
 
 class V2JdbcTableCatalogPrivilegesBuilderSuite extends V2CommandsPrivilegesSuite {
@@ -81,9 +82,9 @@ class V2JdbcTableCatalogPrivilegesBuilderSuite extends V2CommandsPrivilegesSuite
             Try(table = d.extract(plan, spark).get).isSuccess
           }
           withClue(str) {
-            assert(table.catalog === Some(catalogV2))
-            assert(table.database === Some(ns1))
-            assert(table.table === tbl)
+            assertEqualsIgnoreCase(Some(catalogV2))(table.catalog)
+            assertEqualsIgnoreCase(Some(ns1))(table.database)
+            assertEqualsIgnoreCase(tbl)(table.table)
             assert(table.owner.isEmpty)
           }
         }
@@ -106,9 +107,9 @@ class V2JdbcTableCatalogPrivilegesBuilderSuite extends V2CommandsPrivilegesSuite
           Try(table = d.extract(plan, spark).get).isSuccess
         }
         withClue(sql1) {
-          assert(table.catalog === Some(catalogV2))
-          assert(table.database === Some(ns1))
-          assert(table.table === tbl)
+          assertEqualsIgnoreCase(Some(catalogV2))(table.catalog)
+          assertEqualsIgnoreCase(Some(ns1))(table.database)
+          assertEqualsIgnoreCase(tbl)(table.table)
           assert(table.owner.isEmpty)
         }
       }
@@ -128,9 +129,9 @@ class V2JdbcTableCatalogPrivilegesBuilderSuite extends V2CommandsPrivilegesSuite
         var table: Table = null
         spec.tableDescs.find { d => Try(table = d.extract(plan, spark).get).isSuccess }
         withClue(sql1) {
-          assert(table.catalog === Some(catalogV2))
-          assert(table.database === Some(ns1))
-          assert(table.table === tbl)
+          assertEqualsIgnoreCase(Some(catalogV2))(table.catalog)
+          assertEqualsIgnoreCase(Some(ns1))(table.database)
+          assertEqualsIgnoreCase(tbl)(table.table)
           assert(table.owner.isEmpty)
         }
       }
@@ -148,8 +149,8 @@ class V2JdbcTableCatalogPrivilegesBuilderSuite extends V2CommandsPrivilegesSuite
         Try(db = d.extract(plan)).isSuccess
       }
       withClue(sql) {
-        assert(db.catalog === Some(catalogV2))
-        assert(db.database === ns1)
+        assertEqualsIgnoreCase(Some(catalogV2))(db.catalog)
+        assertEqualsIgnoreCase(ns1)(db.database)
       }
     }
 
@@ -167,8 +168,8 @@ class V2JdbcTableCatalogPrivilegesBuilderSuite extends V2CommandsPrivilegesSuite
         Try(db = d.extract(plan)).isSuccess
       }
       withClue(sql1) {
-        assert(db.catalog === Some(catalogV2))
-        assert(db.database === ns1)
+        assertEqualsIgnoreCase(Some(catalogV2))(db.catalog)
+        assertEqualsIgnoreCase(ns1)(db.database)
       }
     }
   }
diff --git a/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/util/AssertionUtils.scala b/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/util/AssertionUtils.scala
new file mode 100644
index 000000000..00ecc28a0
--- /dev/null
+++ b/extensions/spark/kyuubi-spark-authz/src/test/scala/org/apache/kyuubi/plugin/spark/authz/util/AssertionUtils.scala
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.kyuubi.plugin.spark.authz.util
+
+import java.util.Locale
+
+import org.scalactic.source
+import org.scalatest.Assertions.fail
+
+object AssertionUtils {
+
+  def assertEqualsIgnoreCase(expected: AnyRef)(actual: AnyRef)(
+      implicit pos: source.Position): Unit = {
+    val isEqualsIgnoreCase = (Option(expected), Option(actual)) match {
+      case (Some(expectedStr: String), Some(actualStr: String)) =>
+        expectedStr.equalsIgnoreCase(actualStr)
+      case (Some(Some(expectedStr: String)), Some(Some(actualStr: String))) =>
+        expectedStr.equalsIgnoreCase(actualStr)
+      case (None, None) => true
+      case _ => false
+    }
+    if (!isEqualsIgnoreCase) {
+      fail(s"Expected equaling to '$expected' ignoring case, but got '$actual'")(pos)
+    }
+  }
+
+  def assertStartsWithIgnoreCase(expectedPrefix: String)(actual: String)(
+      implicit pos: source.Position): Unit = {
+    if (!actual.toLowerCase(Locale.ROOT).startsWith(expectedPrefix.toLowerCase(Locale.ROOT))) {
+      fail(s"Expected starting with '$expectedPrefix' ignoring case, but got [$actual]")(pos)
+    }
+  }
+
+  def assertExistsIgnoreCase(expected: String)(actual: Iterable[String])(
+      implicit pos: source.Position): Unit = {
+    if (!actual.exists(_.equalsIgnoreCase(expected))) {
+      fail(s"Expected containing '$expected' ignoring case, but got [$actual]")(pos)
+    }
+  }
+}