@@ -284,6 +284,31 @@ void testGetClusterConfigs() throws Exception {
284284 assertThat (row .getField (2 )).isNotNull (); // config_source
285285 }
286286
287+ // Get multiple config
288+ try (CloseableIterator <Row > resultIterator =
289+ tEnv .executeSql (
290+ String .format (
291+ "Call %s.sys.get_cluster_configs('%s', '%s')" ,
292+ CATALOG_NAME ,
293+ ConfigOptions .KV_SHARED_RATE_LIMITER_BYTES_PER_SEC .key (),
294+ ConfigOptions .DATALAKE_FORMAT .key ()))
295+ .collect ()) {
296+ List <Row > results = CollectionUtil .iteratorToList (resultIterator );
297+ assertThat (results ).hasSize (2 );
298+ // the first row
299+ Row row0 = results .get (0 );
300+ assertThat (row0 .getField (0 ))
301+ .isEqualTo (ConfigOptions .KV_SHARED_RATE_LIMITER_BYTES_PER_SEC .key ());
302+ assertThat (row0 .getField (1 )).isEqualTo ("100 mb" );
303+ assertThat (row0 .getField (2 )).isNotNull (); // config_source
304+
305+ // the second row
306+ Row row1 = results .get (1 );
307+ assertThat (row1 .getField (0 )).isEqualTo (ConfigOptions .DATALAKE_FORMAT .key ());
308+ assertThat (row1 .getField (1 )).isEqualTo ("paimon" );
309+ assertThat (row1 .getField (2 )).isNotNull (); // config_source
310+ }
311+
287312 // Get all configs
288313 try (CloseableIterator <Row > resultIterator =
289314 tEnv .executeSql (String .format ("Call %s.sys.get_cluster_configs()" , CATALOG_NAME ))
@@ -340,11 +365,14 @@ void testSetClusterConfigs() throws Exception {
340365 ConfigOptions .DATALAKE_FORMAT .key ()))
341366 .collect ()) {
342367 List <Row > results = CollectionUtil .iteratorToList (resultIterator );
343- assertThat (results ).hasSize (1 );
368+ assertThat (results ).hasSize (2 );
344369 assertThat (results .get (0 ).getField (0 ))
345370 .asString ()
346371 .contains ("Successfully set to '300MB'" )
347- .contains (ConfigOptions .KV_SHARED_RATE_LIMITER_BYTES_PER_SEC .key ())
372+ .contains (ConfigOptions .KV_SHARED_RATE_LIMITER_BYTES_PER_SEC .key ());
373+
374+ assertThat (results .get (1 ).getField (0 ))
375+ .asString ()
348376 .contains ("Successfully set to 'paimon'" )
349377 .contains (ConfigOptions .DATALAKE_FORMAT .key ());
350378 }
@@ -365,9 +393,10 @@ void testSetClusterConfigs() throws Exception {
365393 // reset cluster configs.
366394 tEnv .executeSql (
367395 String .format (
368- "Call %s.sys.reset_cluster_configs('%s')" ,
396+ "Call %s.sys.reset_cluster_configs('%s', '%s' )" ,
369397 CATALOG_NAME ,
370- ConfigOptions .KV_SHARED_RATE_LIMITER_BYTES_PER_SEC .key ()))
398+ ConfigOptions .KV_SHARED_RATE_LIMITER_BYTES_PER_SEC .key (),
399+ ConfigOptions .DATALAKE_FORMAT .key ()))
371400 .await ();
372401 }
373402
@@ -392,11 +421,15 @@ void testResetClusterConfigs() throws Exception {
392421 ConfigOptions .KV_SHARED_RATE_LIMITER_BYTES_PER_SEC .key ()))
393422 .collect ()) {
394423 List <Row > results = CollectionUtil .iteratorToList (resultIterator );
395- assertThat (results ).hasSize (1 );
424+ assertThat (results ).hasSize (2 );
396425 assertThat (results .get (0 ).getField (0 ))
397426 .asString ()
398427 .contains ("Successfully deleted" )
399- .contains (ConfigOptions .DATALAKE_FORMAT .key ())
428+ .contains (ConfigOptions .DATALAKE_FORMAT .key ());
429+
430+ assertThat (results .get (1 ).getField (0 ))
431+ .asString ()
432+ .contains ("Successfully deleted" )
400433 .contains (ConfigOptions .KV_SHARED_RATE_LIMITER_BYTES_PER_SEC .key ());
401434 }
402435 }
@@ -428,7 +461,61 @@ void testSetClusterConfigValidation() throws Exception {
428461 .await ())
429462 .rootCause ()
430463 .hasMessageContaining (
431- "config_pairs must be set in pairs. Please specify a valid configuration pairs." );
464+ "config_pairs must be set in pairs. Please specify a valid configuration pairs" );
465+
466+ // Try to no parameters passed
467+ assertThatThrownBy (
468+ () ->
469+ tEnv .executeSql (
470+ String .format (
471+ "Call %s.sys.set_cluster_configs()" ,
472+ CATALOG_NAME ))
473+ .await ())
474+ .rootCause ()
475+ .hasMessageContaining (
476+ "config_pairs cannot be null or empty. Please specify a valid configuration pairs" );
477+
478+ // Try to mismatched key-value pairs in the input parameters.
479+ assertThatThrownBy (
480+ () ->
481+ tEnv .executeSql (
482+ String .format (
483+ "Call %s.sys.set_cluster_configs('%s', 'paimon')" ,
484+ CATALOG_NAME ,
485+ ConfigOptions
486+ .KV_SHARED_RATE_LIMITER_BYTES_PER_SEC
487+ .key ()))
488+ .await ())
489+ .rootCause ()
490+ .hasMessageContaining (
491+ "Could not parse value 'paimon' for key 'kv.rocksdb.shared-rate-limiter.bytes-per-sec'" );
492+ }
493+
494+ @ Test
495+ void testResetClusterConfigValidation () throws Exception {
496+ // Try to reset an invalid config
497+ assertThatThrownBy (
498+ () ->
499+ tEnv .executeSql (
500+ String .format (
501+ "Call %s.sys.reset_cluster_configs('invalid.config.key')" ,
502+ CATALOG_NAME ))
503+ .await ())
504+ .rootCause ()
505+ .hasMessageContaining (
506+ "The config key invalid.config.key is not allowed to be changed dynamically" );
507+
508+ // Try to no parameters passed
509+ assertThatThrownBy (
510+ () ->
511+ tEnv .executeSql (
512+ String .format (
513+ "Call %s.sys.reset_cluster_configs()" ,
514+ CATALOG_NAME ))
515+ .await ())
516+ .rootCause ()
517+ .hasMessageContaining (
518+ "config_keys cannot be null or empty. Please specify valid configuration keys" );
432519 }
433520
434521 @ ParameterizedTest
0 commit comments