Skip to content

Commit 3bb0ca2

Browse files
committed
Test Update
1 parent 40b927f commit 3bb0ca2

File tree

1 file changed

+83
-1
lines changed

1 file changed

+83
-1
lines changed

runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandlerAuthzTest.java

Lines changed: 83 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@
5959
import org.apache.polaris.core.admin.model.StorageConfigInfo;
6060
import org.apache.polaris.core.auth.PolarisPrincipal;
6161
import org.apache.polaris.core.catalog.ExternalCatalogFactory;
62+
import org.apache.polaris.core.config.FeatureConfiguration;
63+
import org.apache.polaris.core.config.PolarisConfiguration;
64+
import org.apache.polaris.core.config.RealmConfig;
6265
import org.apache.polaris.core.context.CallContext;
6366
import org.apache.polaris.core.entity.CatalogEntity;
6467
import org.apache.polaris.core.entity.CatalogRoleEntity;
@@ -1106,10 +1109,89 @@ public void testUpdateTableFallbackToCoarseGrainedWhenFeatureDisabled() {
11061109
PolarisPrivilege.TABLE_WRITE_DATA,
11071110
PolarisPrivilege.TABLE_FULL_METADATA,
11081111
PolarisPrivilege.CATALOG_MANAGE_CONTENT),
1109-
() -> newWrapper().updateTable(TABLE_NS1A_2, request),
1112+
() -> newWrapperWithFineGrainedAuthzDisabled().updateTable(TABLE_NS1A_2, request),
11101113
null /* cleanupAction */);
11111114
}
11121115

1116+
/**
1117+
* Creates a wrapper with fine-grained authorization explicitly disabled for testing the fallback
1118+
* behavior to coarse-grained authorization.
1119+
*/
1120+
private IcebergCatalogHandler newWrapperWithFineGrainedAuthzDisabled() {
1121+
// Create a custom CallContextCatalogFactory that mocks the configuration
1122+
CallContextCatalogFactory mockFactory = Mockito.mock(CallContextCatalogFactory.class);
1123+
1124+
// Mock the catalog factory to return our regular catalog but with mocked config
1125+
Mockito.when(
1126+
mockFactory.createCallContextCatalog(
1127+
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
1128+
.thenReturn(baseCatalog);
1129+
1130+
return newWrapperWithFineLevelAuthDisabled(Set.of(), CATALOG_NAME, mockFactory, false);
1131+
}
1132+
1133+
private IcebergCatalogHandler newWrapperWithFineLevelAuthDisabled(
1134+
Set<String> activatedPrincipalRoles,
1135+
String catalogName,
1136+
CallContextCatalogFactory factory,
1137+
boolean fineGrainedAuthzEnabled) {
1138+
1139+
PolarisPrincipal authenticatedPrincipal =
1140+
PolarisPrincipal.of(principalEntity, activatedPrincipalRoles);
1141+
1142+
// Create a custom CallContext that returns a custom RealmConfig
1143+
CallContext mockCallContext = Mockito.mock(CallContext.class);
1144+
1145+
// Create a simple RealmConfig implementation that overrides just what we need
1146+
RealmConfig customRealmConfig =
1147+
new RealmConfig() {
1148+
@Override
1149+
public <T> T getConfig(String configName) {
1150+
return realmConfig.getConfig(configName);
1151+
}
1152+
1153+
@Override
1154+
public <T> T getConfig(String configName, T defaultValue) {
1155+
return realmConfig.getConfig(configName, defaultValue);
1156+
}
1157+
1158+
@Override
1159+
public <T> T getConfig(PolarisConfiguration<T> config) {
1160+
return realmConfig.getConfig(config);
1161+
}
1162+
1163+
@Override
1164+
@SuppressWarnings("unchecked")
1165+
public <T> T getConfig(PolarisConfiguration<T> config, CatalogEntity catalogEntity) {
1166+
// Override the specific configuration we want to test
1167+
if (config.equals(FeatureConfiguration.ENABLE_FINE_GRAINED_UPDATE_TABLE_PRIVILEGES)) {
1168+
return (T) Boolean.valueOf(fineGrainedAuthzEnabled);
1169+
}
1170+
return realmConfig.getConfig(config, catalogEntity);
1171+
}
1172+
};
1173+
1174+
// Mock the regular CallContext calls
1175+
Mockito.when(mockCallContext.getRealmConfig()).thenReturn(customRealmConfig);
1176+
Mockito.when(mockCallContext.getPolarisCallContext())
1177+
.thenReturn(callContext.getPolarisCallContext());
1178+
1179+
return new IcebergCatalogHandler(
1180+
diagServices,
1181+
mockCallContext,
1182+
resolutionManifestFactory,
1183+
metaStoreManager,
1184+
userSecretsManager,
1185+
securityContext(authenticatedPrincipal),
1186+
factory,
1187+
catalogName,
1188+
polarisAuthorizer,
1189+
reservedProperties,
1190+
catalogHandlerUtils,
1191+
emptyExternalCatalogFactory(),
1192+
polarisEventListener);
1193+
}
1194+
11131195
@Test
11141196
public void testDropTableWithoutPurgeAllSufficientPrivileges() {
11151197
assertSuccess(

0 commit comments

Comments
 (0)