Skip to content

Commit 250ab88

Browse files
liyang1206李阳
andauthored
[FLINK-38255][table] Add ITCase to verify sensitive table option redaction
Co-authored-by: 李阳 <[email protected]>
1 parent 469644d commit 250ab88

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/catalog/CatalogTableITCase.scala

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1375,6 +1375,67 @@ class CatalogTableITCase(isStreamingMode: Boolean) extends TableITCaseBase {
13751375
"+I[bob]",
13761376
tableEnv.executeSql("select lowerUdf(a) from t1").collect().next().toString)
13771377
}
1378+
1379+
@TestTemplate
1380+
def testSensitiveInfoMasking(): Unit = {
1381+
// Create a table with sensitive information
1382+
val tableDDL =
1383+
"""
1384+
|create table t1(
1385+
| a bigint,
1386+
| b varchar,
1387+
| c int
1388+
|) with (
1389+
| 'connector' = 'values',
1390+
| 'password' = 'Secret1',
1391+
| 'secret' = 'Secret2',
1392+
| 'fs.azure.account.key' = 'Secret3',
1393+
| 'apikey' = 'Secret4',
1394+
| 'api-key' = 'Secret5',
1395+
| 'auth-params' = 'Secret6',
1396+
| 'service-key' = 'Secret7',
1397+
| 'token' = 'Secret8',
1398+
| 'basic-auth' = 'Secret9',
1399+
| 'jaas.config' = 'Secret10',
1400+
| 'http-headers' = '{"Authorization": "Secret11"}'
1401+
|)
1402+
""".stripMargin
1403+
1404+
tableEnv.executeSql(tableDDL)
1405+
1406+
// Extract a generic validation function
1407+
def validateSensitiveInfoMasking(sql: String, tableType: String): Unit = {
1408+
try {
1409+
tableEnv.executeSql(sql)
1410+
fail(s"Expected ValidationException for $tableType table")
1411+
} catch {
1412+
case e: ValidationException =>
1413+
val errorMsg = e.getMessage
1414+
// Verify sensitive information is masked
1415+
assert(!errorMsg.contains("Secret"))
1416+
1417+
// Verify all sensitive fields are replaced with '******'
1418+
assert(errorMsg.contains("'password'='******'"))
1419+
assert(errorMsg.contains("'secret'='******'"))
1420+
assert(errorMsg.contains("'fs.azure.account.key'='******'"))
1421+
assert(errorMsg.contains("'apikey'='******'"))
1422+
assert(errorMsg.contains("'api-key'='******'"))
1423+
assert(errorMsg.contains("'auth-params'='******'"))
1424+
assert(errorMsg.contains("'service-key'='******'"))
1425+
assert(errorMsg.contains("'token'='******'"))
1426+
assert(errorMsg.contains("'basic-auth'='******'"))
1427+
assert(errorMsg.contains("'jaas.config'='******'"))
1428+
assert(errorMsg.contains("'http-headers'='******'"))
1429+
}
1430+
}
1431+
1432+
// Test source table (SELECT)
1433+
validateSensitiveInfoMasking("select * from t1", "source")
1434+
1435+
// Test sink table (INSERT)
1436+
validateSensitiveInfoMasking("insert into t1 select 1, 'test', 1", "sink")
1437+
}
1438+
13781439
}
13791440

13801441
object CatalogTableITCase {

0 commit comments

Comments
 (0)