use of eu.bcvsolutions.idm.core.rest.DeferredResultWrapper 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.DeferredResultWrapper 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();
}
use of eu.bcvsolutions.idm.core.rest.DeferredResultWrapper in project CzechIdMng by bcvsolutions.
the class IdmMonitoringResultController method checkLastMonitoringResults.
/**
* Long polling for check unresolved identity role-requests
*
* @param backendId - applicant ID
*
* @return DeferredResult<OperationResultDto>, where:
*
* - EXECUTED = All requests for this identity are resolved,
* - RUNNING = Requests are not resolved, but some request was changed (since previous check).
* - NOT_EXECUTED = Deferred-result expired
*/
@ResponseBody
@RequestMapping(value = "{backendId}/check-last-monitoring-results", method = RequestMethod.GET)
@PreAuthorize("hasAuthority('" + MonitoringGroupPermission.MONITORINGRESULT_READ + "')")
@ApiOperation(value = "Check changes of last monitoring results (Long-polling request).", nickname = "checkLastMonitoringResults", tags = { IdmMonitoringResultController.TAG }, authorizations = { @Authorization(value = SwaggerConfig.AUTHENTICATION_BASIC, scopes = { @AuthorizationScope(scope = CoreGroupPermission.ROLE_REQUEST_READ, description = ""), @AuthorizationScope(scope = CoreGroupPermission.IDENTITY_READ, description = "") }), @Authorization(value = SwaggerConfig.AUTHENTICATION_CIDMST, scopes = { @AuthorizationScope(scope = CoreGroupPermission.ROLE_REQUEST_READ, description = ""), @AuthorizationScope(scope = CoreGroupPermission.IDENTITY_READ, description = "") }) })
public DeferredResult<OperationResultDto> checkLastMonitoringResults() {
DeferredResultWrapper result = new DeferredResultWrapper(LONG_POOLING_IDENTIFIER, IdmMonitoringResultDto.class, new DeferredResult<OperationResultDto>(10000l, new OperationResultDto(OperationState.NOT_EXECUTED)));
result.onCheckResultCallback(new CheckLongPollingResult() {
@Override
public void checkDeferredResult(DeferredResult<OperationResultDto> result, LongPollingSubscriber subscriber) {
checkDeferredRequest(result, subscriber);
}
});
// If isn't long polling enabled, then Blocked response will be sent.
if (!longPollingManager.isLongPollingEnabled()) {
result.getResult().setResult(new OperationResultDto(OperationState.BLOCKED));
//
return result.getResult();
}
longPollingManager.addSuspendedResult(result);
return result.getResult();
}
Aggregations