@Override public List<T> executeOnGroup(Object arguments, String... groups) throws IOException { final List<String> stringGroups = Arrays.asList(groups); ClientProtocol.Message request = ClientProtocol.Message.newBuilder() .setExecuteFunctionOnGroupRequest(FunctionAPI.ExecuteFunctionOnGroupRequest.newBuilder() .addAllGroupName(stringGroups).setFunctionID(functionId)) .build(); final FunctionAPI.ExecuteFunctionOnGroupResponse response = channel .sendRequest(request, ClientProtocol.Message.MessageTypeCase.EXECUTEFUNCTIONONGROUPRESPONSE) .getExecuteFunctionOnGroupResponse(); return response.getResultsList().stream().map(value -> (T) valueEncoder.decodeValue(value)) .collect(Collectors.toList()); } }
@Test public void requiresPermissions() throws Exception { final SecurityService securityService = mock(SecurityService.class); when(securityService.isIntegratedSecurity()).thenReturn(true); doThrow(new NotAuthorizedException("we should catch this")).when(securityService) .authorize(eq(ResourcePermissions.DATA_WRITE), any()); when(cacheStub.getSecurityService()).thenReturn(securityService); final FunctionAPI.ExecuteFunctionOnGroupRequest request = FunctionAPI.ExecuteFunctionOnGroupRequest.newBuilder().setFunctionID(TEST_FUNCTION_ID) .addGroupName(TEST_GROUP1).build(); ServerMessageExecutionContext context = new ServerMessageExecutionContext(cacheStub, mock(ProtobufClientStatistics.class), securityService); expectedException.expect(NotAuthorizedException.class); operationHandler.process(serializationService, request, context); }
/** * <code>.org.apache.geode.internal.protocol.protobuf.v1.ExecuteFunctionOnGroupRequest executeFunctionOnGroupRequest = 24;</code> */ public Builder mergeExecuteFunctionOnGroupRequest(org.apache.geode.internal.protocol.protobuf.v1.FunctionAPI.ExecuteFunctionOnGroupRequest value) { if (executeFunctionOnGroupRequestBuilder_ == null) { if (messageTypeCase_ == 24 && messageType_ != org.apache.geode.internal.protocol.protobuf.v1.FunctionAPI.ExecuteFunctionOnGroupRequest.getDefaultInstance()) { messageType_ = org.apache.geode.internal.protocol.protobuf.v1.FunctionAPI.ExecuteFunctionOnGroupRequest.newBuilder((org.apache.geode.internal.protocol.protobuf.v1.FunctionAPI.ExecuteFunctionOnGroupRequest) messageType_) .mergeFrom(value).buildPartial(); } else { messageType_ = value; } onChanged(); } else { if (messageTypeCase_ == 24) { executeFunctionOnGroupRequestBuilder_.mergeFrom(value); } executeFunctionOnGroupRequestBuilder_.setMessage(value); } messageTypeCase_ = 24; return this; } /**
@Test(expected = DistributedSystemDisconnectedException.class) public void succeedsWithValidMembers() throws Exception { when(distributionManager.getMemberWithName(any(String.class))).thenReturn( new InternalDistributedMember("localhost", 0), new InternalDistributedMember("localhost", 1), null); final FunctionAPI.ExecuteFunctionOnGroupRequest request = FunctionAPI.ExecuteFunctionOnGroupRequest.newBuilder().setFunctionID(TEST_FUNCTION_ID) .addGroupName(TEST_GROUP1).addGroupName(TEST_GROUP2).build(); final Result<FunctionAPI.ExecuteFunctionOnGroupResponse> result = operationHandler.process(serializationService, request, mockedMessageExecutionContext()); // unfortunately FunctionService fishes for a DistributedSystem and throws an exception // if it can't find one. It uses a static method on InternalDistributedSystem, so no // mocking is possible. If the test throws DistributedSystemDisconnectedException it // means that the operation handler got to the point of trying get an execution // context }
@java.lang.Override public Builder newBuilderForType() { return newBuilder(); } public static Builder newBuilder() {
@Test public void functionNotFound() throws Exception { final FunctionAPI.ExecuteFunctionOnGroupRequest request = FunctionAPI.ExecuteFunctionOnGroupRequest.newBuilder() .setFunctionID("I am not a function, I am a human").addGroupName(TEST_GROUP1).build(); expectedException.expect(IllegalArgumentException.class); final Result<FunctionAPI.ExecuteFunctionOnGroupResponse> result = operationHandler.process(serializationService, request, mockedMessageExecutionContext()); }