@Before public void setUp() { regionStub = mock(LocalRegion.class); cacheStub = mock(InternalCacheForClientAccess.class); doReturn(cacheStub).when(cacheStub).getCacheForProcessingClientRequests(); serializationService = new ProtobufSerializationService(); when(cacheStub.getRegion(TEST_REGION)).thenReturn(regionStub); when(cacheStub.getSecurityService()).thenReturn(mock(SecurityService.class)); operationHandler = new ExecuteFunctionOnRegionRequestOperationHandler(); function = new TestFunction(); FunctionService.registerFunction(function); }
@Override public Result<ExecuteFunctionOnRegionResponse> process( ProtobufSerializationService serializationService, ExecuteFunctionOnRegionRequest request, MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException, ConnectionStateException, EncodingException, DecodingException { final String functionID = request.getFunctionID(); final String regionName = request.getRegion(); Object arguments = getFunctionArguments(request, serializationService); Set<?> filter = parseFilter(serializationService, request); SecureFunctionService functionService = messageExecutionContext.getSecureCache().getFunctionService(); List<Object> results = functionService.executeFunctionOnRegion(functionID, regionName, arguments, filter); final ExecuteFunctionOnRegionResponse.Builder responseMessage = ExecuteFunctionOnRegionResponse.newBuilder(); for (Object result : results) { responseMessage.addResults(serializationService.encode(result)); } return Success.of(responseMessage.build()); }
@Test public void requiresPermissions() throws Exception { final FunctionAPI.ExecuteFunctionOnRegionRequest request = FunctionAPI.ExecuteFunctionOnRegionRequest.newBuilder().setFunctionID(TEST_FUNCTION_ID) .setRegion(TEST_REGION).build(); SecurityService securityService = mock(SecurityService.class); when(securityService.isIntegratedSecurity()).thenReturn(true); doThrow(new NotAuthorizedException("we should catch this")).when(securityService) .authorize(Mockito.eq(ResourcePermissions.DATA_WRITE), any()); ServerMessageExecutionContext context = new ServerMessageExecutionContext(cacheStub, mock(ProtobufClientStatistics.class), securityService); expectedException.expect(NotAuthorizedException.class); operationHandler.process(serializationService, request, context); }
new ExecuteFunctionOnRegionRequestOperationHandler(), opsResp -> ClientProtocol.Message .newBuilder().setExecuteFunctionOnRegionResponse(opsResp)));
@Test public void failsOnUnknownRegion() throws Exception { final FunctionAPI.ExecuteFunctionOnRegionRequest request = FunctionAPI.ExecuteFunctionOnRegionRequest.newBuilder().setFunctionID(TEST_FUNCTION_ID) .setRegion(NOT_A_REGION).build(); expectedException.expect(RegionDestroyedException.class); final Result<FunctionAPI.ExecuteFunctionOnRegionResponse> result = operationHandler.process(serializationService, request, mockedMessageExecutionContext()); }
@Test public void functionNotFound() throws Exception { final FunctionAPI.ExecuteFunctionOnRegionRequest request = FunctionAPI.ExecuteFunctionOnRegionRequest.newBuilder().setFunctionID(TEST_FUNCTION_ID) .setRegion(TEST_REGION).build(); FunctionService.unregisterFunction(TEST_FUNCTION_ID); expectedException.expect(IllegalArgumentException.class); final Result<FunctionAPI.ExecuteFunctionOnRegionResponse> result = operationHandler.process(serializationService, request, mockedMessageExecutionContext()); }