Repository: geode Updated Branches: refs/heads/feature/GEODE-2995 d790ed5d8 -> b0f48d19f
GEODE-2995: Added GetRequestOperationHandler.java and cleaned up some code Project: http://git-wip-us.apache.org/repos/asf/geode/repo Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/b0f48d19 Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/b0f48d19 Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/b0f48d19 Branch: refs/heads/feature/GEODE-2995 Commit: b0f48d19f79dcd666bde11f9d95f59a32ecb6613 Parents: d790ed5 Author: Udo Kohlmeyer <ukohlme...@pivotal.io> Authored: Wed Jun 14 17:07:34 2017 -0700 Committer: Udo Kohlmeyer <ukohlme...@pivotal.io> Committed: Wed Jun 14 17:07:34 2017 -0700 ---------------------------------------------------------------------- .../protocol/operations/OperationHandler.java | 7 +- .../ProtobufRequestOperationParser.java | 33 ++++++++ .../protobuf/GetRequestOperationHandler.java | 76 ++++++++++++++++++ .../registry/OperationsHandlerRegistry.java | 8 ++ .../ProtobufSerializationServiceImpl.java | 56 +++++++++++++ .../serialization/SerializationService.java | 28 +++++++ .../SerializationServiceException.java | 23 ++++++ ...codingTypeToSerializationTypeTranslator.java | 50 ------------ .../translation/EncodingTypeTranslator.java | 83 ++++++++++++++++++++ ...e.geode.protocol.operations.OperationHandler | 1 + .../geode/client/protocol/OpsProcessorTest.java | 67 ++++------------ .../ProtobufRequestOperationParser.java | 31 -------- .../OperationsHandlerRegistryJUnitTest.java | 3 +- ...eToSerializationTypeTranslatorJUnitTest.java | 12 +-- 14 files changed, 338 insertions(+), 140 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/OperationHandler.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/OperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/OperationHandler.java index c494855..c93a22a 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/OperationHandler.java +++ b/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/OperationHandler.java @@ -14,6 +14,9 @@ */ package org.apache.geode.protocol.operations; -public interface OperationHandler<T> { - Object process(Object encodingHandlerRegistry, T request); +import org.apache.geode.serialization.SerializationService; + +public interface OperationHandler<Req, Resp> { + Resp process(SerializationService serializationService, Req request); + int getOperationCode(); } http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/ProtobufRequestOperationParser.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/ProtobufRequestOperationParser.java b/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/ProtobufRequestOperationParser.java new file mode 100644 index 0000000..7fb0eab --- /dev/null +++ b/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/ProtobufRequestOperationParser.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. You may obtain a + * copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ +package org.apache.geode.protocol.operations; + +import org.apache.geode.protocol.protobuf.ClientProtocol; + +public class ProtobufRequestOperationParser { + public static Object getRequestForOperationTypeID(ClientProtocol.Request request) { + switch (request.getRequestAPICase()) { + case PUTREQUEST: + return request.getPutRequest(); + case GETREQUEST: + return request.getGetRequest(); + case PUTALLREQUEST: + return request.getPutAllRequest(); + default: + throw new RuntimeException( + "Unknown request type: " + request.getRequestAPICase().getNumber()); + } + } +} http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/protobuf/GetRequestOperationHandler.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/protobuf/GetRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/protobuf/GetRequestOperationHandler.java new file mode 100644 index 0000000..ca5698e --- /dev/null +++ b/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/protobuf/GetRequestOperationHandler.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.protocol.operations.protobuf; + +import org.apache.geode.cache.Region; +import org.apache.geode.protocol.operations.OperationHandler; +import org.apache.geode.protocol.protobuf.BasicTypes; +import org.apache.geode.protocol.protobuf.ClientProtocol; +import org.apache.geode.protocol.protobuf.RegionAPI; +import org.apache.geode.serialization.SerializationService; +import org.apache.geode.serialization.exception.SerializationServiceException; +import org.apache.geode.serialization.protobuf.translation.EncodingTypeTranslator; +import org.apache.geode.serialization.protobuf.translation.exception.UnsupportedEncodingTypeException; + +public class GetRequestOperationHandler + implements OperationHandler<RegionAPI.GetRequest, RegionAPI.GetResponse> { + @Override + public RegionAPI.GetResponse process(SerializationService serializationService, + RegionAPI.GetRequest request) { + try { + String regionName = request.getRegionName(); + BasicTypes.EncodedValue key = request.getKey(); + BasicTypes.EncodingType encodingType = key.getEncodingType(); + byte[] value = key.getValue().toByteArray(); + + Object decodedValue = null; + try { + decodedValue = serializationService.decode(encodingType, value); + } catch (SerializationServiceException e) { + e.printStackTrace(); + } + + Region region = getRegionForName(regionName); + Object resultValue = region.get(decodedValue); + + BasicTypes.EncodingType resultEncodingType = null; + + resultEncodingType = EncodingTypeTranslator.getEncodingTypeForObject(resultValue); + + byte[] resultEncodedValue = serializationService.encode(resultEncodingType, resultValue); + +// BasicTypes.EncodedValue +// encodedValue = +// ProtobufMessageUtil.createEncodedValueFrom(resultEncodingType, resultEncodedValue); +// return ProtobufMessageUtil.createGetResponseFrom(encodedValue); + return null; + } catch (UnsupportedEncodingTypeException e) { + e.printStackTrace(); + throw new RuntimeException("We need to handle exceptions with an error response"); + } + } + + @Override + public int getOperationCode() { + return ClientProtocol.Request.RequestAPICase.GETREQUEST.getNumber(); + } + + private Region getRegionForName(String regionName) { +// return regionService.getRegion(regionName); + return null; + } +} http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/registry/OperationsHandlerRegistry.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/registry/OperationsHandlerRegistry.java b/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/registry/OperationsHandlerRegistry.java index 2e9b40a..9900499 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/registry/OperationsHandlerRegistry.java +++ b/geode-protobuf/src/main/java/org/apache/geode/protocol/operations/registry/OperationsHandlerRegistry.java @@ -19,10 +19,18 @@ import org.apache.geode.protocol.operations.registry.exception.OperationHandlerA import org.apache.geode.protocol.operations.registry.exception.OperationHandlerNotRegisteredException; import java.util.HashMap; +import java.util.ServiceLoader; public class OperationsHandlerRegistry { private HashMap<Integer, OperationHandler> registeredOperations = new HashMap<>(); + public OperationsHandlerRegistry() throws OperationHandlerAlreadyRegisteredException { + ServiceLoader<OperationHandler> operationHandlers = ServiceLoader.load(OperationHandler.class); + for (OperationHandler operationHandler : operationHandlers) { + registerOperationHandlerForOperationId(operationHandler.getOperationCode(),operationHandler); + } + } + public OperationHandler getOperationHandlerForOperationId(int operationCode) throws OperationHandlerNotRegisteredException { OperationHandler operationHandler = registeredOperations.get(operationCode); http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/main/java/org/apache/geode/serialization/ProtobufSerializationServiceImpl.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/ProtobufSerializationServiceImpl.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/ProtobufSerializationServiceImpl.java new file mode 100644 index 0000000..ee8d965 --- /dev/null +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/ProtobufSerializationServiceImpl.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.serialization; + +import org.apache.geode.protocol.protobuf.BasicTypes; +import org.apache.geode.serialization.exception.SerializationServiceException; +import org.apache.geode.serialization.protobuf.translation.EncodingTypeTranslator; +import org.apache.geode.serialization.protobuf.translation.exception.UnsupportedEncodingTypeException; +import org.apache.geode.serialization.registry.SerializationCodecRegistry; +import org.apache.geode.serialization.registry.exception.CodecAlreadyRegisteredForTypeException; +import org.apache.geode.serialization.registry.exception.CodecNotRegisteredForTypeException; + +public class ProtobufSerializationServiceImpl implements SerializationService<BasicTypes.EncodingType> { + private SerializationCodecRegistry serializationCodecRegistry = new SerializationCodecRegistry(); + private EncodingTypeTranslator translator = new EncodingTypeTranslator(); + + public ProtobufSerializationServiceImpl() throws CodecAlreadyRegisteredForTypeException { + } + + @Override + public Object decode(BasicTypes.EncodingType encodingTypeValue, byte[] value) + throws SerializationServiceException { + try { + SerializationType + serializationTypeForEncodingType = + translator.getSerializationTypeForEncodingType(encodingTypeValue); + + TypeCodec + codecForType = + serializationCodecRegistry.getCodecForType(serializationTypeForEncodingType); + return codecForType.decode(value); + } catch (UnsupportedEncodingTypeException | CodecNotRegisteredForTypeException e) { + e.printStackTrace(); + throw new SerializationServiceException("",e); + } + } + + @Override + public byte[] encode(BasicTypes.EncodingType encodingTypeValue, Object value) { + return new byte[0]; + } +} http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/main/java/org/apache/geode/serialization/SerializationService.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/SerializationService.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/SerializationService.java new file mode 100644 index 0000000..8ad64da --- /dev/null +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/SerializationService.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.serialization; + +import org.apache.geode.protocol.protobuf.BasicTypes; +import org.apache.geode.serialization.exception.SerializationServiceException; +import org.apache.geode.serialization.protobuf.translation.exception.UnsupportedEncodingTypeException; + +public interface SerializationService<T> { + + Object decode(T encodingTypeValue, byte[] value) + throws UnsupportedEncodingTypeException, SerializationServiceException; + byte[] encode(T encodingTypeValue, Object value); +} http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/main/java/org/apache/geode/serialization/exception/SerializationServiceException.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/exception/SerializationServiceException.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/exception/SerializationServiceException.java new file mode 100644 index 0000000..c045a83 --- /dev/null +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/exception/SerializationServiceException.java @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.serialization.exception; + +public class SerializationServiceException extends Exception { + public SerializationServiceException(String message, Throwable cause) { + super(message, cause); + } +} http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/main/java/org/apache/geode/serialization/protobuf/translation/EncodingTypeToSerializationTypeTranslator.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/protobuf/translation/EncodingTypeToSerializationTypeTranslator.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/protobuf/translation/EncodingTypeToSerializationTypeTranslator.java deleted file mode 100644 index 6ad053c..0000000 --- a/geode-protobuf/src/main/java/org/apache/geode/serialization/protobuf/translation/EncodingTypeToSerializationTypeTranslator.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more contributor license - * agreements. See the NOTICE file distributed with this work for additional information regarding - * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. You may obtain a - * copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - */ -package org.apache.geode.serialization.protobuf.translation; - -import org.apache.geode.protocol.protobuf.BasicTypes; -import org.apache.geode.serialization.SerializationType; -import org.apache.geode.serialization.protobuf.translation.exception.UnsupportedEncodingTypeException; - -public class EncodingTypeToSerializationTypeTranslator { - public SerializationType getSerializationTypeForEncodingType(BasicTypes.EncodingType encodingType) - throws UnsupportedEncodingTypeException { - switch (encodingType) { - case INT: - return SerializationType.INT; - case BYTE: - return SerializationType.BYTE; - case JSON: - return SerializationType.JSON; - case LONG: - return SerializationType.LONG; - case FLOAT: - return SerializationType.FLOAT; - case SHORT: - return SerializationType.SHORT; - case BINARY: - return SerializationType.BINARY; - case DOUBLE: - return SerializationType.DOUBLE; - case STRING: - return SerializationType.STRING; - case BOOLEAN: - return SerializationType.BOOLEAN; - default: - throw new UnsupportedEncodingTypeException( - "No serialization type found for protobuf encoding type: " + encodingType); - } - } -} http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/main/java/org/apache/geode/serialization/protobuf/translation/EncodingTypeTranslator.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/java/org/apache/geode/serialization/protobuf/translation/EncodingTypeTranslator.java b/geode-protobuf/src/main/java/org/apache/geode/serialization/protobuf/translation/EncodingTypeTranslator.java new file mode 100644 index 0000000..7f014b5 --- /dev/null +++ b/geode-protobuf/src/main/java/org/apache/geode/serialization/protobuf/translation/EncodingTypeTranslator.java @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. You may obtain a + * copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ +package org.apache.geode.serialization.protobuf.translation; + +import org.apache.geode.pdx.JSONFormatter; +import org.apache.geode.pdx.PdxInstance; +import org.apache.geode.protocol.protobuf.BasicTypes; +import org.apache.geode.serialization.SerializationType; +import org.apache.geode.serialization.protobuf.translation.exception.UnsupportedEncodingTypeException; + +public class EncodingTypeTranslator { + public SerializationType getSerializationTypeForEncodingType(BasicTypes.EncodingType encodingType) + throws UnsupportedEncodingTypeException { + switch (encodingType) { + case INT: + return SerializationType.INT; + case BYTE: + return SerializationType.BYTE; + case JSON: + return SerializationType.JSON; + case LONG: + return SerializationType.LONG; + case FLOAT: + return SerializationType.FLOAT; + case SHORT: + return SerializationType.SHORT; + case BINARY: + return SerializationType.BINARY; + case DOUBLE: + return SerializationType.DOUBLE; + case STRING: + return SerializationType.STRING; + case BOOLEAN: + return SerializationType.BOOLEAN; + default: + throw new UnsupportedEncodingTypeException( + "No serialization type found for protobuf encoding type: " + encodingType); + } + } + + public static BasicTypes.EncodingType getEncodingTypeForObject(Object resultValue) + throws UnsupportedEncodingTypeException { + if (resultValue instanceof Integer) { + return BasicTypes.EncodingType.INT; + } else if (resultValue instanceof Byte) { + return BasicTypes.EncodingType.BYTE; + } else if (resultValue instanceof PdxInstance) { + String pdxClassName = ((PdxInstance) resultValue).getClassName(); + if (pdxClassName.equals(JSONFormatter.JSON_CLASSNAME)) { + return BasicTypes.EncodingType.JSON; + } + } else if (resultValue instanceof Long) { + return BasicTypes.EncodingType.LONG; + } else if (resultValue instanceof Float) { + return BasicTypes.EncodingType.FLOAT; + } else if (resultValue instanceof Short) { + return BasicTypes.EncodingType.SHORT; + } else if (resultValue instanceof byte[]) { + return BasicTypes.EncodingType.BINARY; + } else if (resultValue instanceof Double) { + return BasicTypes.EncodingType.DOUBLE; + } else if (resultValue instanceof String) { + return BasicTypes.EncodingType.STRING; + } else if (resultValue instanceof Boolean) { + return BasicTypes.EncodingType.BOOLEAN; + } + + throw new UnsupportedEncodingTypeException( + "We cannot translate: " + resultValue.getClass() + " into a specific Protobuf Encoding"); + } +} http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.protocol.operations.OperationHandler ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.protocol.operations.OperationHandler b/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.protocol.operations.OperationHandler new file mode 100644 index 0000000..fa7c3c6 --- /dev/null +++ b/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.protocol.operations.OperationHandler @@ -0,0 +1 @@ +org.apache.geode.protocol.operations.protobuf.GetRequestOperationHandler \ No newline at end of file http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/test/java/org/apache/geode/client/protocol/OpsProcessorTest.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/test/java/org/apache/geode/client/protocol/OpsProcessorTest.java b/geode-protobuf/src/test/java/org/apache/geode/client/protocol/OpsProcessorTest.java index 7f3a86c..5cec598 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/client/protocol/OpsProcessorTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/client/protocol/OpsProcessorTest.java @@ -18,18 +18,14 @@ package org.apache.geode.client.protocol; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import com.google.protobuf.ByteString; - import org.apache.geode.protocol.operations.OperationHandler; //import org.apache.geode.protocol.operations.ProtobufRequestOperationParser; +import org.apache.geode.protocol.operations.ProtobufRequestOperationParser; import org.apache.geode.protocol.operations.registry.OperationsHandlerRegistry; import org.apache.geode.protocol.operations.registry.exception.OperationHandlerNotRegisteredException; -import org.apache.geode.protocol.protobuf.BasicTypes; import org.apache.geode.protocol.protobuf.ClientProtocol; import org.apache.geode.protocol.protobuf.RegionAPI; -import org.apache.geode.serialization.SerializationType; -import org.apache.geode.serialization.TypeCodec; -import org.apache.geode.serialization.registry.SerializationCodecRegistry; +import org.apache.geode.serialization.SerializationService; import org.apache.geode.serialization.registry.exception.CodecNotRegisteredForTypeException; import org.junit.Assert; import org.junit.Test; @@ -39,68 +35,40 @@ public class OpsProcessorTest { public void testOpsProcessor() throws CodecNotRegisteredForTypeException { OperationsHandlerRegistry opsHandlerRegistry = mock(OperationsHandlerRegistry.class); OperationHandler operationHandlerStub = mock(OperationHandler.class); - SerializationCodecRegistry serializationCodecRegistry = mock(SerializationCodecRegistry.class); - - when(serializationCodecRegistry.getCodecForType(SerializationType.STRING)) - .thenReturn(new TypeCodec<String>() { - @Override - public String decode(byte[] incoming) { - return new String(incoming); - } - - @Override - public byte[] encode(String incoming) { - return incoming.getBytes(); - } + SerializationService serializationService = mock(SerializationService.class); - @Override - public SerializationType getSerializationType() { - return null; - } - }); +// when(serializationService.encode(BasicTypes.EncodingType.STRING,"10")) +// .thenReturn("10".getBytes(Charset.forName("UTF-8"))); ClientProtocol.Request messageRequest = ClientProtocol.Request.newBuilder() .setGetRequest(RegionAPI.GetRequest.newBuilder()).build(); - RegionAPI.GetResponse expectedResponse = getGetResponse(serializationCodecRegistry); + RegionAPI.GetResponse expectedResponse = RegionAPI.GetResponse.newBuilder().build(); try { when(opsHandlerRegistry.getOperationHandlerForOperationId(2)) .thenReturn(operationHandlerStub); } catch (OperationHandlerNotRegisteredException e) { e.printStackTrace(); } -// when(operationHandlerStub.process(serializationCodecRegistry, -// ProtobufRequestOperationParser.getRequestForOperationTypeID(messageRequest))) -// .thenReturn(expectedResponse); + when(operationHandlerStub.process(serializationService, + ProtobufRequestOperationParser.getRequestForOperationTypeID(messageRequest))) + .thenReturn(expectedResponse); - OpsProcessor processor = new OpsProcessor(opsHandlerRegistry, serializationCodecRegistry); + OpsProcessor processor = new OpsProcessor(opsHandlerRegistry, serializationService); ClientProtocol.Response response = processor.process(messageRequest); Assert.assertEquals(expectedResponse, response.getGetResponse()); } - private RegionAPI.GetResponse getGetResponse(SerializationCodecRegistry serializationCodecRegistry) - throws CodecNotRegisteredForTypeException { - RegionAPI.GetResponse.Builder getResponseBuilder = RegionAPI.GetResponse.newBuilder(); - BasicTypes.EncodedValue.Builder encodedValueBuilder = BasicTypes.EncodedValue.newBuilder(); - TypeCodec typeCodec = - serializationCodecRegistry.getCodecForType(SerializationType.STRING); - byte[] serializedValue = typeCodec.encode("10"); - encodedValueBuilder.setValue(ByteString.copyFrom(serializedValue)); - encodedValueBuilder.setEncodingType(BasicTypes.EncodingType.STRING); - getResponseBuilder.setResult(encodedValueBuilder); - return getResponseBuilder.build(); - } - private class OpsProcessor { private final OperationsHandlerRegistry opsHandlerRegistry; - private final SerializationCodecRegistry serializationCodecRegistry; + private final SerializationService serializationService; public OpsProcessor(OperationsHandlerRegistry opsHandlerRegistry, - SerializationCodecRegistry serializationCodecRegistry) { + SerializationService serializationService) { this.opsHandlerRegistry = opsHandlerRegistry; - this.serializationCodecRegistry = serializationCodecRegistry; + this.serializationService = serializationService; } public ClientProtocol.Response process(ClientProtocol.Request request) { @@ -111,11 +79,10 @@ public class OpsProcessorTest { e.printStackTrace(); } -// Object responseMessage = opsHandler.process(serializationCodecRegistry, -// ProtobufRequestOperationParser.getRequestForOperationTypeID(request)); -// return ClientProtocol.Response.newBuilder() -// .setGetResponse((RegionAPI.GetResponse) responseMessage).build(); - return null; + Object responseMessage = opsHandler.process(serializationService, + ProtobufRequestOperationParser.getRequestForOperationTypeID(request)); + return ClientProtocol.Response.newBuilder() + .setGetResponse((RegionAPI.GetResponse) responseMessage).build(); } } } http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/test/java/org/apache/geode/protocol/operations/ProtobufRequestOperationParser.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/test/java/org/apache/geode/protocol/operations/ProtobufRequestOperationParser.java b/geode-protobuf/src/test/java/org/apache/geode/protocol/operations/ProtobufRequestOperationParser.java deleted file mode 100644 index 7bc8819..0000000 --- a/geode-protobuf/src/test/java/org/apache/geode/protocol/operations/ProtobufRequestOperationParser.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more contributor license - * agreements. See the NOTICE file distributed with this work for additional information regarding - * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. You may obtain a - * copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - */ -package org.apache.geode.protocol.operations; - -import org.apache.geode.protocol.protobuf.ClientProtocol; - -class ProtobufRequestOperationParser { - static Object getRequestForOperationTypeID(ClientProtocol.Request request) { - switch (request.getRequestAPICase()) { - case PUTREQUEST: - return request.getPutRequest(); - case GETREQUEST: - return request.getGetRequest(); - default: - throw new RuntimeException( - "Unknown request type: " + request.getRequestAPICase().getNumber()); - } - } -} http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/test/java/org/apache/geode/protocol/operations/registry/OperationsHandlerRegistryJUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/test/java/org/apache/geode/protocol/operations/registry/OperationsHandlerRegistryJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/protocol/operations/registry/OperationsHandlerRegistryJUnitTest.java index 9a81706..9b8209e 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/protocol/operations/registry/OperationsHandlerRegistryJUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/protocol/operations/registry/OperationsHandlerRegistryJUnitTest.java @@ -7,6 +7,7 @@ import static org.junit.Assert.assertTrue; import org.apache.geode.protocol.operations.OperationHandler; import org.apache.geode.protocol.operations.registry.exception.OperationHandlerAlreadyRegisteredException; import org.apache.geode.protocol.operations.registry.exception.OperationHandlerNotRegisteredException; +import org.apache.geode.serialization.SerializationService; import org.apache.geode.test.junit.categories.UnitTest; import org.junit.Before; import org.junit.Test; @@ -72,7 +73,7 @@ public class OperationsHandlerRegistryJUnitTest { private class DummyOperationHandler implements OperationHandler { @Override - public Object process(Object encodingHandlerRegistry, Object request) { + public Object process(SerializationService serializationService, Object request) { return null; } } http://git-wip-us.apache.org/repos/asf/geode/blob/b0f48d19/geode-protobuf/src/test/java/org/apache/geode/serialization/protobuf/translation/EncodingTypeToSerializationTypeTranslatorJUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-protobuf/src/test/java/org/apache/geode/serialization/protobuf/translation/EncodingTypeToSerializationTypeTranslatorJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/serialization/protobuf/translation/EncodingTypeToSerializationTypeTranslatorJUnitTest.java index 2d602c9..0cc7dbe 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/serialization/protobuf/translation/EncodingTypeToSerializationTypeTranslatorJUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/serialization/protobuf/translation/EncodingTypeToSerializationTypeTranslatorJUnitTest.java @@ -14,8 +14,8 @@ public class EncodingTypeToSerializationTypeTranslatorJUnitTest { @Test public void testTranslateEncodingTypes() throws UnsupportedEncodingTypeException { - EncodingTypeToSerializationTypeTranslator translator = - new EncodingTypeToSerializationTypeTranslator(); + EncodingTypeTranslator translator = + new EncodingTypeTranslator(); assertSame(SerializationType.INT, translator.getSerializationTypeForEncodingType(BasicTypes.EncodingType.INT)); assertSame(SerializationType.LONG, @@ -42,15 +42,15 @@ public class EncodingTypeToSerializationTypeTranslatorJUnitTest { public void testTranslateInvalidEncoding_throwsException() throws UnsupportedEncodingTypeException { - EncodingTypeToSerializationTypeTranslator translator = - new EncodingTypeToSerializationTypeTranslator(); + EncodingTypeTranslator translator = + new EncodingTypeTranslator(); translator.getSerializationTypeForEncodingType(BasicTypes.EncodingType.INVALID); } @Test public void testAllEncodingTypeTranslations() { - EncodingTypeToSerializationTypeTranslator translator = - new EncodingTypeToSerializationTypeTranslator(); + EncodingTypeTranslator translator = + new EncodingTypeTranslator(); for (BasicTypes.EncodingType encodingType : BasicTypes.EncodingType.values()) { if (!(encodingType.equals(BasicTypes.EncodingType.UNRECOGNIZED) || encodingType.equals(BasicTypes.EncodingType.INVALID))) {