use of eu.bcvsolutions.idm.acc.dto.SysSystemEntityDto in project CzechIdMng by bcvsolutions.
the class DefaultAccAccountService method toDto.
@Override
protected AccAccountDto toDto(AccAccount entity, AccAccountDto dto) {
AccAccountDto newDto = super.toDto(entity, dto);
// if dto exists add real uid
if (newDto != null) {
if (newDto.getSystemEntity() != null) {
SysSystemEntityDto systemEntity = DtoUtils.getEmbedded(newDto, AccAccount_.systemEntity);
newDto.setRealUid(systemEntity.getUid());
} else {
// If system entity do not exist, then return uid from account.
newDto.setRealUid(newDto.getUid());
}
// Load and set target entity. For loading a target entity is using sync
// executor.
SystemEntityType entityType = newDto.getEntityType();
if (entityType != null && entityType.isSupportsSync()) {
SynchronizationEntityExecutor executor = this.getSyncExecutor(entityType);
UUID targetEntity = executor.getEntityByAccount(newDto.getId());
newDto.setTargetEntityType(entityType.getEntityType().getName());
newDto.setTargetEntityId(targetEntity);
}
}
return newDto;
}
use of eu.bcvsolutions.idm.acc.dto.SysSystemEntityDto in project CzechIdMng by bcvsolutions.
the class DefaultProvisioningExecutorIntegrationTest method testRetryProvisioningAfterPrepareConnectorObjectFailed.
@Test
public void testRetryProvisioningAfterPrepareConnectorObjectFailed() {
SysSystemDto system = getHelper().createTestResourceSystem(true);
// set the wrong password
IdmFormDefinitionDto savedFormDefinition = systemService.getConnectorFormDefinition(system);
List<IdmFormValueDto> values = new ArrayList<>();
IdmFormValueDto password = new IdmFormValueDto(savedFormDefinition.getMappedAttributeByCode("password"));
password.setValue("wrong");
values.add(password);
formService.saveValues(system, savedFormDefinition, values);
//
SysProvisioningOperationDto provisioningOperation = createProvisioningOperation(system, "firstname");
Map<ProvisioningAttributeDto, Object> accoutObject = provisioningOperation.getProvisioningContext().getAccountObject();
String uid = (String) accoutObject.get(getProvisioningAttribute(TestHelper.ATTRIBUTE_MAPPING_NAME));
ZonedDateTime now = ZonedDateTime.now();
//
// publish event
// publish event
// 1 - create
provisioningExecutor.execute(provisioningOperation);
// is necessary to get again operation from service
SysProvisioningOperationFilter filter = new SysProvisioningOperationFilter();
filter.setSystemEntity(provisioningOperation.getSystemEntity());
filter.setSystemId(system.getId());
SysProvisioningOperationDto operation = provisioningOperationService.find(filter, null).getContent().get(0);
SysProvisioningBatchDto batch = provisioningBatchService.findBatch(operation.getSystemEntity());
Assert.assertEquals(OperationState.EXCEPTION, operation.getResultState());
Assert.assertEquals(AccResultCode.PROVISIONING_FAILED.name(), operation.getResult().getModel().getStatusEnum());
Assert.assertEquals(1, operation.getCurrentAttempt());
Assert.assertTrue(operation.getMaxAttempts() > 1);
Assert.assertTrue(batch.getNextAttempt().isAfter(now));
SysSystemEntityDto systemEntity = systemEntityService.getBySystemAndEntityTypeAndUid(system, SystemEntityType.IDENTITY, uid);
Assert.assertTrue(systemEntity.isWish());
Assert.assertNull(getHelper().findResource(uid));
//
batch.setNextAttempt(ZonedDateTime.now());
provisioningBatchService.save(batch);
//
// retry - the same exception expected
RetryProvisioningTaskExecutor retryProvisioningTaskExecutor = new RetryProvisioningTaskExecutor();
Boolean result = longRunningTaskManager.executeSync(retryProvisioningTaskExecutor);
Assert.assertTrue(result);
operation = provisioningOperationService.get(operation.getId());
batch = provisioningBatchService.findBatch(systemEntity.getId());
Assert.assertEquals(2, operation.getCurrentAttempt());
Assert.assertNotNull(batch.getNextAttempt());
Assert.assertTrue(batch.getNextAttempt().isAfter(now));
//
batch.setNextAttempt(ZonedDateTime.now());
provisioningBatchService.save(batch);
//
// retry - expected success now - set the good password
password.setValue(((HikariDataSource) dataSource).getPassword());
formService.saveValues(system, savedFormDefinition, values);
//
retryProvisioningTaskExecutor = new RetryProvisioningTaskExecutor();
result = longRunningTaskManager.executeSync(retryProvisioningTaskExecutor);
Assert.assertTrue(result);
//
systemEntity = systemEntityService.getBySystemAndEntityTypeAndUid(system, SystemEntityType.IDENTITY, uid);
Assert.assertFalse(systemEntity.isWish());
Assert.assertNotNull(getHelper().findResource(uid));
batch = provisioningBatchService.get(batch.getId());
Assert.assertNull(batch.getNextAttempt());
}
use of eu.bcvsolutions.idm.acc.dto.SysSystemEntityDto in project CzechIdMng by bcvsolutions.
the class DefaultProvisioningExecutorIntegrationTest method testRetryProvisioning.
@Test
public void testRetryProvisioning() {
testProvisioningExceptionProcessor.setDisabled(false);
try {
SysSystemDto system = getHelper().createTestResourceSystem(true);
SysProvisioningOperationDto provisioningOperation = createProvisioningOperation(system, "firstname");
Map<ProvisioningAttributeDto, Object> accoutObject = provisioningOperation.getProvisioningContext().getAccountObject();
String uid = (String) accoutObject.get(getProvisioningAttribute(TestHelper.ATTRIBUTE_MAPPING_NAME));
ZonedDateTime now = ZonedDateTime.now();
//
// publish event
// 1 - create
provisioningExecutor.execute(provisioningOperation);
// is necessary to get again operation from service
SysProvisioningOperationFilter filter = new SysProvisioningOperationFilter();
filter.setSystemEntityUid(provisioningOperation.getSystemEntityUid());
filter.setSystemId(system.getId());
SysProvisioningOperationDto operation = provisioningOperationService.find(filter, null).getContent().get(0);
SysProvisioningBatchDto batch = provisioningBatchService.findBatch(operation.getSystemEntity());
Assert.assertEquals(OperationState.EXCEPTION, operation.getResultState());
Assert.assertEquals(AccResultCode.PROVISIONING_FAILED.name(), operation.getResult().getModel().getStatusEnum());
Assert.assertEquals(1, operation.getCurrentAttempt());
Assert.assertTrue(operation.getMaxAttempts() > 1);
Assert.assertTrue(batch.getNextAttempt().isAfter(now));
SysSystemEntityDto systemEntity = systemEntityService.getBySystemAndEntityTypeAndUid(system, SystemEntityType.IDENTITY, uid);
Assert.assertTrue(systemEntity.isWish());
Assert.assertNull(getHelper().findResource(uid));
// check failed operation is in archive too
List<SysProvisioningArchiveDto> archived = provisioningArchiveService.find(filter, PageRequest.of(0, 10, new Sort(Direction.DESC, SysProvisioningArchive_.created.getName()))).getContent();
Assert.assertEquals(1, archived.size());
Assert.assertEquals(OperationState.EXCEPTION, archived.get(0).getResultState());
Assert.assertEquals(AccResultCode.PROVISIONING_FAILED.name(), archived.get(0).getResult().getModel().getStatusEnum());
//
batch.setNextAttempt(ZonedDateTime.now());
provisioningBatchService.save(batch);
//
// retry - the same exception expected
RetryProvisioningTaskExecutor retryProvisioningTaskExecutor = new RetryProvisioningTaskExecutor();
Boolean result = longRunningTaskManager.executeSync(retryProvisioningTaskExecutor);
Assert.assertTrue(result);
operation = provisioningOperationService.get(operation.getId());
batch = provisioningBatchService.findBatch(systemEntity.getId());
Assert.assertEquals(2, operation.getCurrentAttempt());
Assert.assertNotNull(batch.getNextAttempt());
Assert.assertTrue(batch.getNextAttempt().isAfter(now));
archived = provisioningArchiveService.find(filter, PageRequest.of(0, 10, new Sort(Direction.DESC, SysProvisioningArchive_.created.getName()))).getContent();
Assert.assertEquals(2, archived.size());
Assert.assertEquals(OperationState.EXCEPTION, archived.get(0).getResultState());
Assert.assertEquals(AccResultCode.PROVISIONING_FAILED.name(), archived.get(0).getResult().getModel().getStatusEnum());
//
batch.setNextAttempt(ZonedDateTime.now());
provisioningBatchService.save(batch);
//
// retry - expected success now
testProvisioningExceptionProcessor.setDisabled(true);
retryProvisioningTaskExecutor = new RetryProvisioningTaskExecutor();
longRunningTaskManager.executeSync(retryProvisioningTaskExecutor);
//
systemEntity = systemEntityService.getBySystemAndEntityTypeAndUid(system, SystemEntityType.IDENTITY, uid);
Assert.assertFalse(systemEntity.isWish());
Assert.assertNotNull(getHelper().findResource(uid));
batch = provisioningBatchService.get(batch.getId());
Assert.assertNull(batch.getNextAttempt());
archived = provisioningArchiveService.find(filter, PageRequest.of(0, 10, new Sort(Direction.DESC, SysProvisioningArchive_.created.getName()))).getContent();
Assert.assertEquals(3, archived.size());
Assert.assertTrue(archived.stream().anyMatch(a -> a.getResultState() == OperationState.EXECUTED));
} finally {
testProvisioningExceptionProcessor.setDisabled(true);
}
}
use of eu.bcvsolutions.idm.acc.dto.SysSystemEntityDto in project CzechIdMng by bcvsolutions.
the class DefaultProvisioningExecutorIntegrationTest method testCreateAccountWithoutUid.
@Test
public void testCreateAccountWithoutUid() {
SysSystemDto system = getHelper().createTestResourceSystem(true);
ProvisioningContext context = new ProvisioningContext();
SysSystemEntityDto systemEntity = getHelper().createSystemEntity(system);
ProvisioningAttributeDto lastNameAttribute = getProvisioningAttribute(TestHelper.ATTRIBUTE_MAPPING_LASTNAME);
//
Map<ProvisioningAttributeDto, Object> accoutObject = new HashMap<>();
accoutObject.put(lastNameAttribute, "lastOne");
context.setAccountObject(accoutObject);
//
// prepare provisioning operation
SysSystemMappingDto systemMapping = getHelper().getDefaultMapping(system);
attributeMappingService.getAllPasswordAttributes(system.getId(), systemMapping.getId()).forEach(attributeMappingService::delete);
IcObjectClass objectClass = new IcObjectClassImpl(schemaObjectClassService.get(systemMapping.getObjectClass()).getObjectClassName());
IcConnectorObject connectorObject = new IcConnectorObjectImpl(null, objectClass, null);
SysProvisioningOperationDto.Builder operationBuilder = new SysProvisioningOperationDto.Builder().setSystem(system.getId()).setOperationType(ProvisioningOperationType.CREATE).setSystemEntity(systemEntity).setProvisioningContext(new ProvisioningContext(accoutObject, connectorObject));
SysProvisioningOperationDto provisioningOperation = operationBuilder.build();
// set default result state
provisioningOperation.setResult(new OperationResult(OperationState.CREATED));
//
// publish event
provisioningExecutor.execute(provisioningOperation);
//
SysProvisioningOperationFilter filter = new SysProvisioningOperationFilter();
filter.setSystemEntity(provisioningOperation.getSystemEntity());
filter.setSystemId(system.getId());
//
List<SysProvisioningOperationDto> operations = provisioningOperationService.find(filter, null).getContent();
Assert.assertEquals(1, operations.size());
//
Assert.assertEquals(AccResultCode.PROVISIONING_CREATE_ACCOUNT_UID_NOT_FOUND.getCode(), operations.get(0).getResult().getModel().getStatusEnum());
}
use of eu.bcvsolutions.idm.acc.dto.SysSystemEntityDto in project CzechIdMng by bcvsolutions.
the class DefaultProvisioningExecutorIntegrationTest method testCreateAccountWithEmptyAttributes.
@Test
public void testCreateAccountWithEmptyAttributes() {
SysSystemDto system = getHelper().createTestResourceSystem(true);
ProvisioningContext context = new ProvisioningContext();
SysSystemEntityDto systemEntity = getHelper().createSystemEntity(system);
//
Map<ProvisioningAttributeDto, Object> accoutObject = new HashMap<>();
context.setAccountObject(accoutObject);
//
// prepare provisioning operation
SysSystemMappingDto systemMapping = getHelper().getDefaultMapping(system);
attributeMappingService.getAllPasswordAttributes(system.getId(), systemMapping.getId()).forEach(attributeMappingService::delete);
IcObjectClass objectClass = new IcObjectClassImpl(schemaObjectClassService.get(systemMapping.getObjectClass()).getObjectClassName());
IcConnectorObject connectorObject = new IcConnectorObjectImpl(null, objectClass, null);
SysProvisioningOperationDto.Builder operationBuilder = new SysProvisioningOperationDto.Builder().setSystem(system.getId()).setOperationType(ProvisioningOperationType.CREATE).setSystemEntity(systemEntity).setProvisioningContext(new ProvisioningContext(accoutObject, connectorObject));
SysProvisioningOperationDto provisioningOperation = operationBuilder.build();
// set default result state
provisioningOperation.setResult(new OperationResult(OperationState.CREATED));
//
// publish event
provisioningExecutor.execute(provisioningOperation);
//
SysProvisioningOperationFilter filter = new SysProvisioningOperationFilter();
filter.setSystemEntity(provisioningOperation.getSystemEntity());
filter.setSystemId(system.getId());
//
List<SysProvisioningOperationDto> operations = provisioningOperationService.find(filter, null).getContent();
Assert.assertEquals(1, operations.size());
//
Assert.assertEquals(AccResultCode.PROVISIONING_FAILED.getCode(), operations.get(0).getResult().getModel().getStatusEnum());
}
Aggregations