use of eu.bcvsolutions.idm.core.rest.LongPollingSubscriber in project CzechIdMng by bcvsolutions.
the class DefaultLongPollingManagerTest method testExecuteDeferredResultOnUpdateRoleRequest.
@Test
public void testExecuteDeferredResultOnUpdateRoleRequest() {
DefaultLongPollingManager defaultPollingManager = (DefaultLongPollingManager) longPollingManager;
// Clear deferred result and subscribers
defaultPollingManager.getSuspendedRequests().clear();
defaultPollingManager.getRegistredSubscribers().clear();
IdmIdentityDto identityOne = this.getHelper().createIdentity();
IdmRoleRequestDto roleRequest = this.getHelper().createRoleRequest(identityOne, this.getHelper().createRole());
DeferredResult<OperationResultDto> result = new DeferredResult<OperationResultDto>(10000l, new OperationResultDto(OperationState.NOT_EXECUTED));
DeferredResultWrapper wrapper = new DeferredResultWrapper(identityOne.getId(), identityOne.getClass(), result);
wrapper.onCheckResultCallback(new CheckLongPollingResult() {
@Override
public void checkDeferredResult(DeferredResult<OperationResultDto> result, LongPollingSubscriber subscriber) {
checkDeferredRequest(result, subscriber);
}
});
Queue<DeferredResultWrapper> suspendedRequests = defaultPollingManager.getSuspendedRequests();
assertEquals(0, suspendedRequests.size());
longPollingManager.addSuspendedResult(wrapper);
suspendedRequests = defaultPollingManager.getSuspendedRequests();
assertEquals(1, suspendedRequests.size());
longPollingManager.checkDeferredRequests(IdmIdentityDto.class);
suspendedRequests = defaultPollingManager.getSuspendedRequests();
assertEquals(1, suspendedRequests.size());
// Update of role-request -> must be detected
roleRequest.setState(RoleRequestState.IN_PROGRESS);
roleRequestService.save(roleRequest);
// Check must be called twice, because first detect the change and second remove
// ended deferred result (from some reason is not invoked method
// result.onCompleted)
getHelper().waitForResult(null, 1, 1);
longPollingManager.checkDeferredRequests(IdmIdentityDto.class);
getHelper().waitForResult(null, 1, 1);
longPollingManager.checkDeferredRequests(IdmIdentityDto.class);
suspendedRequests = defaultPollingManager.getSuspendedRequests();
assertEquals(0, suspendedRequests.size());
// Clear deferred result and subscribers
defaultPollingManager.getSuspendedRequests().clear();
defaultPollingManager.getRegistredSubscribers().clear();
}
use of eu.bcvsolutions.idm.core.rest.LongPollingSubscriber in project CzechIdMng by bcvsolutions.
the class DefaultSysSystemServiceIntegrationTest method testExecuteDeferredResultOnCreateSyncItemLog.
@Test
public void testExecuteDeferredResultOnCreateSyncItemLog() {
DefaultLongPollingManager defaultPollingManager = (DefaultLongPollingManager) longPollingManager;
// Clear deferred result and subscribers
defaultPollingManager.getSuspendedRequests().clear();
defaultPollingManager.getRegistredSubscribers().clear();
// create test system and sync
SysSystemDto system = helper.createTestResourceSystem(true);
AbstractSysSyncConfigDto syncConfig = createSync(system);
DeferredResult<OperationResultDto> result = new DeferredResult<OperationResultDto>(1000000l, new OperationResultDto(OperationState.NOT_EXECUTED));
DeferredResultWrapper wrapper = new DeferredResultWrapper(system.getId(), system.getClass(), result);
wrapper.onCheckResultCallback(new CheckLongPollingResult() {
@Override
public void checkDeferredResult(DeferredResult<OperationResultDto> result, LongPollingSubscriber subscriber) {
systemController.checkDeferredRequest(result, subscriber);
}
});
Queue<DeferredResultWrapper> suspendedRequests = defaultPollingManager.getSuspendedRequests();
assertEquals(0, suspendedRequests.size());
longPollingManager.addSuspendedResult(wrapper);
suspendedRequests = defaultPollingManager.getSuspendedRequests();
assertEquals(1, suspendedRequests.size());
longPollingManager.checkDeferredRequests(SysSystemDto.class);
suspendedRequests = defaultPollingManager.getSuspendedRequests();
assertEquals(1, suspendedRequests.size());
helper.startSynchronization(syncConfig);
SysSyncConfigFilter logFilter = new SysSyncConfigFilter();
logFilter.setId(syncConfig.getId());
logFilter.setIncludeLastLog(Boolean.TRUE);
List<AbstractSysSyncConfigDto> configs = syncConfigService.find(logFilter, null).getContent();
Assert.assertEquals(1, configs.size());
SysSyncLogDto log = new SysSyncLogDto();
log.setSynchronizationConfig(syncConfig.getId());
log = syncLogService.save(log);
SysSyncActionLogDto mockAction = new SysSyncActionLogDto();
mockAction.setSyncAction(SynchronizationActionType.IGNORE);
mockAction.setSyncLog(log.getId());
mockAction.setOperationResult(OperationResultType.IGNORE);
mockAction = syncActionLogService.save(mockAction);
// Sync item log created -> must be detected
SysSyncItemLogDto mockItemLogDto = new SysSyncItemLogDto();
mockItemLogDto.setSyncActionLog(mockAction.getId());
mockItemLogDto.setIdentification(helper.createName());
mockItemLogDto = syncItemLogService.save(mockItemLogDto);
// Check must be called twice, because first detect the change and second remove
// ended deferred result (from some reason is not invoked method
// result.onCompleted)
longPollingManager.checkDeferredRequests(SysSystemDto.class);
longPollingManager.checkDeferredRequests(SysSystemDto.class);
suspendedRequests = defaultPollingManager.getSuspendedRequests();
assertEquals(0, suspendedRequests.size());
// Clear deferred result and subscribers
defaultPollingManager.getSuspendedRequests().clear();
defaultPollingManager.getRegistredSubscribers().clear();
}
use of eu.bcvsolutions.idm.core.rest.LongPollingSubscriber in project CzechIdMng by bcvsolutions.
the class DefaultLongPollingManager method baseCheckDeferredResult.
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void baseCheckDeferredResult(DeferredResult<OperationResultDto> deferredResult, LongPollingSubscriber subscriber, ModifiedFromFilter filter, ReadDtoService service, boolean checkCount) {
Assert.notNull(deferredResult, "Deferred result is required to check.");
Assert.notNull(subscriber.getEntityId(), "Subscriber is required to check deferred result.");
LOG.debug("Start baseCheckDeferredResult for deferred-result [{}] and subscriber [{}]", deferredResult, subscriber);
if (checkCount) {
long countOfentities = service.count(filter);
Long lastNumberOfEntities = subscriber.getLastNumberOfEntities();
subscriber.setLastNumberOfEntities(countOfentities);
if (lastNumberOfEntities != null && countOfentities != lastNumberOfEntities) {
// Notify FE -> Some of an entities were changed (refresh must be executed)
deferredResult.setResult(new OperationResultDto(OperationState.RUNNING));
return;
}
}
ZonedDateTime timeStamp = subscriber.getLastTimeStamp();
if (timeStamp == null) {
List<AbstractDto> entities = service.find(filter, PageRequest.of(0, 1, new Sort(Direction.DESC, AbstractEntity_.created.getName(), AbstractEntity_.modified.getName()))).getContent();
if (entities.isEmpty()) {
subscriber.setLastTimeStamp(ZonedDateTime.now());
return;
}
ZonedDateTime lastModified = this.getLastTimeStamp(entities.get(0));
subscriber.setLastTimeStamp(lastModified);
return;
}
// Try to find, if some from not finished entities were changed
// TODO: For search SysSyncLogs the filter by modifiedFrom didn't work properly.
// I didn't found reason why, but I hope using sort by created and modified fields will be works better.
// filter.setModifiedFrom(timeStamp);
List<AbstractDto> changedRequestsFromLastChecks = service.find(filter, PageRequest.of(0, 1, Sort.by(Direction.DESC, AbstractEntity_.created.getName(), AbstractEntity_.modified.getName()))).getContent();
if (!changedRequestsFromLastChecks.isEmpty()) {
AbstractDto changedRequestsFromLastCheck = changedRequestsFromLastChecks.get(0);
ZonedDateTime lastModified = this.getLastTimeStamp(changedRequestsFromLastCheck);
if (lastModified.isAfter(timeStamp)) {
// Notify FE -> Some of the entity was changed (refresh must be executed).
// Notified will be all suspended request for same entity ID!
this.suspendedRequests.stream().filter(request -> request.getEntityId().equals(subscriber.getEntityId())).forEach(request -> {
request.getResult().setResult(new OperationResultDto(OperationState.RUNNING));
});
subscriber.setLastTimeStamp(lastModified);
return;
}
}
// Nothing was changed
}
use of eu.bcvsolutions.idm.core.rest.LongPollingSubscriber in project CzechIdMng by bcvsolutions.
the class DefaultLongPollingManagerTest method testExecuteDeferredResultOnCreateRoleRequest.
@Test
public void testExecuteDeferredResultOnCreateRoleRequest() throws InterruptedException {
DefaultLongPollingManager defaultPollingManager = (DefaultLongPollingManager) longPollingManager;
// Clear deferred result and subscribers
defaultPollingManager.getSuspendedRequests().clear();
defaultPollingManager.getRegistredSubscribers().clear();
IdmIdentityDto identityOne = this.getHelper().createIdentity();
DeferredResult<OperationResultDto> result = new DeferredResult<OperationResultDto>(10000l, new OperationResultDto(OperationState.NOT_EXECUTED));
DeferredResultWrapper wrapper = new DeferredResultWrapper(identityOne.getId(), identityOne.getClass(), result);
wrapper.onCheckResultCallback(new CheckLongPollingResult() {
@Override
public void checkDeferredResult(DeferredResult<OperationResultDto> result, LongPollingSubscriber subscriber) {
checkDeferredRequest(result, subscriber);
}
});
Queue<DeferredResultWrapper> suspendedRequests = defaultPollingManager.getSuspendedRequests();
assertEquals(0, suspendedRequests.size());
longPollingManager.addSuspendedResult(wrapper);
suspendedRequests = defaultPollingManager.getSuspendedRequests();
assertEquals(1, suspendedRequests.size());
longPollingManager.checkDeferredRequests(IdmIdentityDto.class);
suspendedRequests = defaultPollingManager.getSuspendedRequests();
assertEquals(1, suspendedRequests.size());
// Create role-request -> must be detected
this.getHelper().createRoleRequest(identityOne, this.getHelper().createRole());
// Check must be called twice, because first detect the change and second remove
// ended deferred result (from some reason is not invoked method
// result.onCompleted)
longPollingManager.checkDeferredRequests(IdmIdentityDto.class);
longPollingManager.checkDeferredRequests(IdmIdentityDto.class);
suspendedRequests = defaultPollingManager.getSuspendedRequests();
assertEquals(0, suspendedRequests.size());
// Clear deferred result and subscribers
defaultPollingManager.getSuspendedRequests().clear();
defaultPollingManager.getRegistredSubscribers().clear();
}
use of eu.bcvsolutions.idm.core.rest.LongPollingSubscriber in project CzechIdMng by bcvsolutions.
the class DefaultLongPollingManagerTest method testRegisteredSubscribers.
@Test
public void testRegisteredSubscribers() {
DefaultLongPollingManager defaultPollingManager = (DefaultLongPollingManager) longPollingManager;
// Clear deferred result and subscribers
defaultPollingManager.getSuspendedRequests().clear();
defaultPollingManager.getRegistredSubscribers().clear();
IdmIdentityDto identityOne = this.getHelper().createIdentity();
DeferredResult<OperationResultDto> result = new DeferredResult<OperationResultDto>(10000l, new OperationResultDto(OperationState.NOT_EXECUTED));
DeferredResultWrapper wrapper = new DeferredResultWrapper(identityOne.getId(), identityOne.getClass(), result);
wrapper.onCheckResultCallback(new CheckLongPollingResult() {
@Override
public void checkDeferredResult(DeferredResult<OperationResultDto> result, LongPollingSubscriber subscriber) {
checkDeferredRequest(result, subscriber);
}
});
longPollingManager.addSuspendedResult(wrapper);
Map<UUID, LongPollingSubscriber> registredSubscirbers = defaultPollingManager.getRegistredSubscribers();
assertEquals(1, registredSubscirbers.size());
assertTrue(registredSubscirbers.containsKey(identityOne.getId()));
longPollingManager.checkDeferredRequests(IdmIdentityDto.class);
// None subscriber will be cleared ... threshold time stamp is too small
longPollingManager.clearUnUseSubscribers(ZonedDateTime.now().minusMinutes(1));
registredSubscirbers = defaultPollingManager.getRegistredSubscribers();
assertEquals(1, registredSubscirbers.size());
longPollingManager.clearUnUseSubscribers(ZonedDateTime.now().plusMinutes(1));
registredSubscirbers = defaultPollingManager.getRegistredSubscribers();
assertEquals(0, registredSubscirbers.size());
// Clear deferred result and subscribers
defaultPollingManager.getSuspendedRequests().clear();
defaultPollingManager.getRegistredSubscribers().clear();
}
Aggregations