use of org.apache.kafka.common.acl.AclBinding in project kafka by apache.
the class AclControlManagerTest method testCreateAclDeleteAcl.
@Test
public void testCreateAclDeleteAcl() {
SnapshotRegistry snapshotRegistry = new SnapshotRegistry(new LogContext());
AclControlManager manager = new AclControlManager(snapshotRegistry, Optional.empty());
MockClusterMetadataAuthorizer authorizer = new MockClusterMetadataAuthorizer();
authorizer.loadSnapshot(manager.idToAcl());
List<AclBinding> toCreate = new ArrayList<>();
for (int i = 0; i < 3; i++) {
toCreate.add(TEST_ACLS.get(i).toBinding());
}
toCreate.add(new AclBinding(new ResourcePattern(TOPIC, "*", PatternType.UNKNOWN), new AccessControlEntry("User:*", "*", ALTER, ALLOW)));
ControllerResult<List<AclCreateResult>> createResult = manager.createAcls(toCreate);
List<AclCreateResult> expectedResults = new ArrayList<>();
for (int i = 0; i < 3; i++) {
expectedResults.add(AclCreateResult.SUCCESS);
}
expectedResults.add(new AclCreateResult(new InvalidRequestException("Invalid patternType UNKNOWN")));
for (int i = 0; i < expectedResults.size(); i++) {
AclCreateResult expectedResult = expectedResults.get(i);
if (expectedResult.exception().isPresent()) {
assertEquals(expectedResult.exception().get().getMessage(), createResult.response().get(i).exception().get().getMessage());
} else {
assertFalse(createResult.response().get(i).exception().isPresent());
}
}
RecordTestUtils.replayAll(manager, createResult.records());
assertTrue(manager.iterator(Long.MAX_VALUE).hasNext());
ControllerResult<List<AclDeleteResult>> deleteResult = manager.deleteAcls(Arrays.asList(new AclBindingFilter(new ResourcePatternFilter(ResourceType.ANY, null, LITERAL), AccessControlEntryFilter.ANY), new AclBindingFilter(new ResourcePatternFilter(ResourceType.UNKNOWN, null, LITERAL), AccessControlEntryFilter.ANY)));
assertEquals(2, deleteResult.response().size());
Set<AclBinding> deleted = new HashSet<>();
for (AclDeleteResult.AclBindingDeleteResult result : deleteResult.response().get(0).aclBindingDeleteResults()) {
assertEquals(Optional.empty(), result.exception());
deleted.add(result.aclBinding());
}
assertEquals(new HashSet<>(Arrays.asList(TEST_ACLS.get(0).toBinding(), TEST_ACLS.get(2).toBinding())), deleted);
assertEquals(InvalidRequestException.class, deleteResult.response().get(1).exception().get().getClass());
RecordTestUtils.replayAll(manager, deleteResult.records());
Iterator<List<ApiMessageAndVersion>> iterator = manager.iterator(Long.MAX_VALUE);
assertTrue(iterator.hasNext());
List<ApiMessageAndVersion> list = iterator.next();
assertEquals(1, list.size());
assertEquals(TEST_ACLS.get(1).toBinding(), StandardAcl.fromRecord((AccessControlEntryRecord) list.get(0).message()).toBinding());
assertFalse(iterator.hasNext());
}
use of org.apache.kafka.common.acl.AclBinding in project kafka by apache.
the class AclControlManagerTest method testValidateNewAcl.
/**
* Verify that validateNewAcl catches invalid ACLs.
*/
@Test
public void testValidateNewAcl() {
AclControlManager.validateNewAcl(new AclBinding(new ResourcePattern(TOPIC, "*", LITERAL), new AccessControlEntry("User:*", "*", ALTER, ALLOW)));
assertEquals("Invalid patternType UNKNOWN", assertThrows(InvalidRequestException.class, () -> AclControlManager.validateNewAcl(new AclBinding(new ResourcePattern(TOPIC, "*", PatternType.UNKNOWN), new AccessControlEntry("User:*", "*", ALTER, ALLOW)))).getMessage());
assertEquals("Invalid resourceType UNKNOWN", assertThrows(InvalidRequestException.class, () -> AclControlManager.validateNewAcl(new AclBinding(new ResourcePattern(ResourceType.UNKNOWN, "*", LITERAL), new AccessControlEntry("User:*", "*", ALTER, ALLOW)))).getMessage());
assertEquals("Invalid operation UNKNOWN", assertThrows(InvalidRequestException.class, () -> AclControlManager.validateNewAcl(new AclBinding(new ResourcePattern(TOPIC, "*", LITERAL), new AccessControlEntry("User:*", "*", AclOperation.UNKNOWN, ALLOW)))).getMessage());
assertEquals("Invalid permissionType UNKNOWN", assertThrows(InvalidRequestException.class, () -> AclControlManager.validateNewAcl(new AclBinding(new ResourcePattern(TOPIC, "*", LITERAL), new AccessControlEntry("User:*", "*", ALTER, AclPermissionType.UNKNOWN)))).getMessage());
}
use of org.apache.kafka.common.acl.AclBinding in project kafka by apache.
the class StandardAclTest method testToBindingRoundTrips.
@Test
public void testToBindingRoundTrips() {
for (StandardAcl acl : TEST_ACLS) {
AclBinding binding = acl.toBinding();
StandardAcl acl2 = StandardAcl.fromAclBinding(binding);
assertEquals(acl2, acl);
}
}
use of org.apache.kafka.common.acl.AclBinding in project kafka by apache.
the class StandardAuthorizerTest method assertContains.
private static void assertContains(Iterable<AclBinding> iterable, StandardAcl... acls) {
Iterator<AclBinding> iterator = iterable.iterator();
for (int i = 0; iterator.hasNext(); i++) {
AclBinding acl = iterator.next();
assertTrue(i < acls.length, "Only expected " + i + " element(s)");
assertEquals(acls[i].toBinding(), acl, "Unexpected element " + i);
}
assertFalse(iterator.hasNext(), "Expected only " + acls.length + " element(s)");
}
use of org.apache.kafka.common.acl.AclBinding in project kafka by apache.
the class CreateAclsRequest method aclBinding.
public static AclBinding aclBinding(AclCreation acl) {
ResourcePattern pattern = new ResourcePattern(ResourceType.fromCode(acl.resourceType()), acl.resourceName(), PatternType.fromCode(acl.resourcePatternType()));
AccessControlEntry entry = new AccessControlEntry(acl.principal(), acl.host(), AclOperation.fromCode(acl.operation()), AclPermissionType.fromCode(acl.permissionType()));
return new AclBinding(pattern, entry);
}
Aggregations