You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2017/07/06 18:26:47 UTC
[13/50] [abbrv] geode git commit: merge GEODE-2995,
GEODE-3775 into develop with integration test.
merge GEODE-2995, GEODE-3775 into develop with integration test.
Signed-off-by: Brian Rowe <br...@pivotal.io>
Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/db11ebc1
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/db11ebc1
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/db11ebc1
Branch: refs/heads/feature/GEODE-1279
Commit: db11ebc1efdf2371bdf1566a7828dc08ea621e2c
Parents: e62e825
Author: Galen OSullivan <go...@pivotal.io>
Authored: Wed Jun 21 16:53:03 2017 -0700
Committer: Hitesh Khamesra <hk...@pivotal.io>
Committed: Mon Jun 26 09:26:23 2017 -0700
----------------------------------------------------------------------
.../sockets/ClientProtocolMessageHandler.java | 18 +--
.../tier/sockets/ServerConnectionFactory.java | 39 +++++-
.../sockets/ServiceLoadingFailureException.java | 35 ++++++
.../ServerConnectionFactoryIntegrationTest.java | 67 ----------
.../sockets/ServerConnectionFactoryTest.java | 43 ++++++-
.../protobuf/ProtobufStreamProcessor.java | 15 ++-
...he.tier.sockets.ClientProtocolMessageHandler | 1 +
.../RoundTripCacheConnectionJUnitTest.java | 123 +++++++++++++++++++
8 files changed, 256 insertions(+), 85 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/geode/blob/db11ebc1/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolMessageHandler.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolMessageHandler.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolMessageHandler.java
index 702609d..32e9e4b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolMessageHandler.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolMessageHandler.java
@@ -22,14 +22,14 @@ import java.io.InputStream;
import java.io.OutputStream;
/**
- * Stub, this will be hooked up to the new client protocol when it's implemented.
+ * This is an interface that other modules can implement to hook into
+ * {@link GenericProtocolServerConnection} to handle messages sent to Geode.
+ *
+ * Currently, only one {@link ClientProtocolMessageHandler} at a time can be used in a Geode
+ * instance. It gets wired into {@link ServerConnectionFactory} to create all instances of
+ * {@link GenericProtocolServerConnection}.
*/
-public class ClientProtocolMessageHandler {
- /**
- * Bogus, but it lets us write an integration test so that nobody breaks our flow.
- */
- public void receiveMessage(InputStream inputStream, OutputStream outputStream,
- InternalCache cache) throws IOException {
- outputStream.write(inputStream.read());
- }
+public interface ClientProtocolMessageHandler {
+ void receiveMessage(InputStream inputStream, OutputStream outputStream, InternalCache cache)
+ throws IOException;
}
http://git-wip-us.apache.org/repos/asf/geode/blob/db11ebc1/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactory.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactory.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactory.java
index e4746a7..ad13b78 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactory.java
@@ -22,14 +22,46 @@ import org.apache.geode.internal.security.SecurityService;
import java.io.IOException;
import java.net.Socket;
+import java.util.Iterator;
+import java.util.ServiceLoader;
+import javax.management.ServiceNotFoundException;
/**
* Creates instances of ServerConnection based on the connection mode provided.
*/
public class ServerConnectionFactory {
- // TODO: implement ClientProtocolMessageHandler.
- private static final ClientProtocolMessageHandler protobufProtocolHandler =
- new ClientProtocolMessageHandler();
+ private static ClientProtocolMessageHandler protobufProtocolHandler;
+ private static final Object protocolLoadLock = new Object();
+
+ private static ClientProtocolMessageHandler findClientProtocolMessageHandler() {
+ if (protobufProtocolHandler != null) {
+ return protobufProtocolHandler;
+ }
+
+ synchronized (protocolLoadLock) {
+ if (protobufProtocolHandler != null) {
+ return protobufProtocolHandler;
+ }
+
+ ServiceLoader<ClientProtocolMessageHandler> loader =
+ ServiceLoader.load(ClientProtocolMessageHandler.class);
+ Iterator<ClientProtocolMessageHandler> iterator = loader.iterator();
+
+ if (!iterator.hasNext()) {
+ throw new ServiceLoadingFailureException(
+ "ClientProtocolMessageHandler implementation not found in JVM");
+ }
+
+ ClientProtocolMessageHandler returnValue = iterator.next();
+
+ if (iterator.hasNext()) {
+ throw new ServiceLoadingFailureException(
+ "Multiple service implementations found for ClientProtocolMessageHandler");
+ }
+
+ return returnValue;
+ }
+ }
public static ServerConnection makeServerConnection(Socket s, InternalCache c,
CachedRegionHelper helper, CacheServerStats stats, int hsTimeout, int socketBufferSize,
@@ -39,6 +71,7 @@ public class ServerConnectionFactory {
if (!Boolean.getBoolean("geode.feature-protobuf-protocol")) {
throw new IOException("Acceptor received unknown communication mode: " + communicationMode);
} else {
+ protobufProtocolHandler = findClientProtocolMessageHandler();
return new GenericProtocolServerConnection(s, c, helper, stats, hsTimeout, socketBufferSize,
communicationModeStr, communicationMode, acceptor, protobufProtocolHandler,
securityService);
http://git-wip-us.apache.org/repos/asf/geode/blob/db11ebc1/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServiceLoadingFailureException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServiceLoadingFailureException.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServiceLoadingFailureException.java
new file mode 100644
index 0000000..be39672
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServiceLoadingFailureException.java
@@ -0,0 +1,35 @@
+/*
+ * 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.internal.cache.tier.sockets;
+
+import org.apache.geode.GemFireException;
+
+/**
+ * Indicates that an error has happened loading a necessary service.
+ */
+public class ServiceLoadingFailureException extends GemFireException {
+ public ServiceLoadingFailureException(String message) {
+ super(message);
+ }
+
+ public ServiceLoadingFailureException(Exception cause) {
+ super(cause);
+ }
+
+ public ServiceLoadingFailureException(String message, Exception cause) {
+ super(message, cause);
+ }
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/db11ebc1/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactoryIntegrationTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactoryIntegrationTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactoryIntegrationTest.java
deleted file mode 100644
index 9a1509f..0000000
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactoryIntegrationTest.java
+++ /dev/null
@@ -1,67 +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.internal.cache.tier.sockets;
-
-import static org.junit.Assert.assertEquals;
-
-import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.cache.server.CacheServer;
-import org.apache.geode.internal.AvailablePortHelper;
-import org.apache.geode.internal.cache.tier.Acceptor;
-import org.apache.geode.test.junit.categories.IntegrationTest;
-import org.awaitility.Awaitility;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.contrib.java.lang.system.RestoreSystemProperties;
-import org.junit.experimental.categories.Category;
-
-import java.io.IOException;
-import java.net.Socket;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Test that switching on the header byte makes instances of
- * {@link GenericProtocolServerConnection}.
- */
-@Category(IntegrationTest.class)
-public class ServerConnectionFactoryIntegrationTest {
-
- @Rule
- public final RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties();
-
- @Test
- public void testNewProtocolHeaderLeadsToNewProtocolServerConnection() throws IOException {
- System.setProperty("geode.feature-protobuf-protocol", "true");
-
- CacheFactory cacheFactory = new CacheFactory();
- cacheFactory.set("mcast-port","0"); //sometimes it isn't due to other tests.
- Cache cache = cacheFactory.create();
-
- CacheServer cacheServer = cache.addCacheServer();
- final int cacheServerPort = AvailablePortHelper.getRandomAvailableTCPPort();
- cacheServer.setPort(cacheServerPort);
- cacheServer.start();
-
- Socket socket = new Socket("localhost", cacheServerPort);
- Awaitility.await().atMost(5, TimeUnit.SECONDS).until(socket::isConnected);
- socket.getOutputStream().write(Acceptor.PROTOBUF_CLIENT_SERVER_PROTOCOL);
- socket.getOutputStream().write(222);
- assertEquals(222, socket.getInputStream().read());
-
- cache.close();
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/db11ebc1/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactoryTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactoryTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactoryTest.java
index 11b5289..4e994cd 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactoryTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionFactoryTest.java
@@ -31,6 +31,14 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+/**
+ * We don't test the path where the service providing protobufProtocolHandler is actually present,
+ * because it lives outside this module, and all the integration tests from that module will test
+ * the newclient protocol happy path.
+ *
+ * What we are concerned with is making sure that everything stays the same when the feature flag
+ * isn't set, and that we at least try to load the service when the feature flag is true.
+ */
@Category(UnitTest.class)
public class ServerConnectionFactoryTest {
/**
@@ -38,17 +46,22 @@ public class ServerConnectionFactoryTest {
* enabled.
*/
@Test(expected = IOException.class)
- public void newClientProtocolThrows() throws Exception {
- serverConnectionMockedExceptForCommunicationMode(Acceptor.PROTOBUF_CLIENT_SERVER_PROTOCOL);
+ public void newClientProtocolFailsWithoutSystemPropertySet() throws Exception {
+ ServerConnection serverConnection =
+ serverConnectionMockedExceptForCommunicationMode(Acceptor.PROTOBUF_CLIENT_SERVER_PROTOCOL);
+
}
- @Test
- public void newClientProtocolSucceedsWithSystemPropertySet() throws Exception {
+ /**
+ * @throws ServiceLoadingFailureException because the service is implemented in a different
+ * module, and when this unit test is run, that module won't be present.
+ */
+ @Test(expected = ServiceLoadingFailureException.class)
+ public void newClientProtocolFailsWithSystemPropertySet() throws Exception {
try {
System.setProperty("geode.feature-protobuf-protocol", "true");
ServerConnection serverConnection = serverConnectionMockedExceptForCommunicationMode(
Acceptor.PROTOBUF_CLIENT_SERVER_PROTOCOL);
- assertTrue(serverConnection instanceof GenericProtocolServerConnection);
} finally {
System.clearProperty("geode.feature-protobuf-protocol");
}
@@ -69,6 +82,26 @@ public class ServerConnectionFactoryTest {
}
}
+ @Test
+ public void makeServerConnectionForOldProtocolWithFeatureFlagEnabled() throws IOException {
+ System.setProperty("geode.feature-protobuf-protocol", "true");
+ try {
+ byte[] communicationModes =
+ new byte[] {Acceptor.CLIENT_TO_SERVER, Acceptor.PRIMARY_SERVER_TO_CLIENT,
+ Acceptor.SECONDARY_SERVER_TO_CLIENT, Acceptor.GATEWAY_TO_GATEWAY,
+ Acceptor.MONITOR_TO_SERVER, Acceptor.SUCCESSFUL_SERVER_TO_CLIENT,
+ Acceptor.UNSUCCESSFUL_SERVER_TO_CLIENT, Acceptor.CLIENT_TO_SERVER_FOR_QUEUE,};
+
+ for (byte communicationMode : communicationModes) {
+ ServerConnection serverConnection =
+ serverConnectionMockedExceptForCommunicationMode(communicationMode);
+ assertTrue(serverConnection instanceof LegacyServerConnection);
+ }
+ } finally {
+ System.clearProperty("geode.feature-protobuf-protocol");
+ }
+ }
+
private static ServerConnection serverConnectionMockedExceptForCommunicationMode(
byte communicationMode) throws IOException {
Socket socketMock = mock(Socket.class);
http://git-wip-us.apache.org/repos/asf/geode/blob/db11ebc1/geode-protobuf/src/main/java/org/apache/geode/protocol/protobuf/ProtobufStreamProcessor.java
----------------------------------------------------------------------
diff --git a/geode-protobuf/src/main/java/org/apache/geode/protocol/protobuf/ProtobufStreamProcessor.java b/geode-protobuf/src/main/java/org/apache/geode/protocol/protobuf/ProtobufStreamProcessor.java
index 1dcb61c..d7b5d4b 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/protocol/protobuf/ProtobufStreamProcessor.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/protocol/protobuf/ProtobufStreamProcessor.java
@@ -15,6 +15,8 @@
package org.apache.geode.protocol.protobuf;
import org.apache.geode.cache.Cache;
+import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.tier.sockets.ClientProtocolMessageHandler;
import org.apache.geode.protocol.exception.InvalidProtocolMessageException;
import org.apache.geode.protocol.protobuf.serializer.ProtobufProtocolSerializer;
import org.apache.geode.protocol.operations.registry.OperationsHandlerRegistry;
@@ -34,7 +36,7 @@ import java.io.OutputStream;
* messages, hands the requests to an appropriate handler, wraps the response in a protobuf message,
* and then pushes it to the output stream.
*/
-public class ProtobufStreamProcessor {
+public class ProtobufStreamProcessor implements ClientProtocolMessageHandler {
ProtobufProtocolSerializer protobufProtocolSerializer;
OperationsHandlerRegistry registry;
ProtobufSerializationService protobufSerializationService;
@@ -60,4 +62,15 @@ public class ProtobufStreamProcessor {
ProtobufUtilities.wrapResponseWithDefaultHeader(response);
protobufProtocolSerializer.serialize(responseMessage, outputStream);
}
+
+ @Override
+ public void receiveMessage(InputStream inputStream, OutputStream outputStream,
+ InternalCache cache) throws IOException {
+ try {
+ processOneMessage(inputStream, outputStream, cache);
+ } catch (InvalidProtocolMessageException | OperationHandlerNotRegisteredException
+ | TypeEncodingException e) {
+ throw new IOException(e);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/geode/blob/db11ebc1/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.internal.cache.tier.sockets.ClientProtocolMessageHandler
----------------------------------------------------------------------
diff --git a/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.internal.cache.tier.sockets.ClientProtocolMessageHandler b/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.internal.cache.tier.sockets.ClientProtocolMessageHandler
new file mode 100644
index 0000000..5a17eda
--- /dev/null
+++ b/geode-protobuf/src/main/resources/META-INF/services/org.apache.geode.internal.cache.tier.sockets.ClientProtocolMessageHandler
@@ -0,0 +1 @@
+org.apache.geode.protocol.protobuf.ProtobufStreamProcessor
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/geode/blob/db11ebc1/geode-protobuf/src/test/java/org/apache/geode/protocol/RoundTripCacheConnectionJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-protobuf/src/test/java/org/apache/geode/protocol/RoundTripCacheConnectionJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/protocol/RoundTripCacheConnectionJUnitTest.java
new file mode 100644
index 0000000..b9faca3
--- /dev/null
+++ b/geode-protobuf/src/test/java/org/apache/geode/protocol/RoundTripCacheConnectionJUnitTest.java
@@ -0,0 +1,123 @@
+/*
+ * 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;
+
+import static org.junit.Assert.assertEquals;
+
+import com.google.protobuf.ByteString;
+
+import org.apache.geode.cache.Cache;
+import org.apache.geode.cache.CacheFactory;
+import org.apache.geode.cache.Region;
+import org.apache.geode.cache.RegionFactory;
+import org.apache.geode.cache.server.CacheServer;
+import org.apache.geode.internal.AvailablePortHelper;
+import org.apache.geode.internal.cache.tier.sockets.GenericProtocolServerConnection;
+import org.apache.geode.protocol.protobuf.BasicTypes;
+import org.apache.geode.protocol.protobuf.ClientProtocol;
+import org.apache.geode.protocol.protobuf.ProtobufSerializationService;
+import org.apache.geode.protocol.protobuf.RegionAPI;
+import org.apache.geode.protocol.protobuf.serializer.ProtobufProtocolSerializer;
+import org.apache.geode.serialization.codec.StringCodec;
+import org.apache.geode.test.junit.categories.IntegrationTest;
+import org.awaitility.Awaitility;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.contrib.java.lang.system.RestoreSystemProperties;
+import org.junit.experimental.categories.Category;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Test that switching on the header byte makes instances of
+ * {@link GenericProtocolServerConnection}.
+ */
+@Category(IntegrationTest.class)
+public class RoundTripCacheConnectionJUnitTest {
+ public static final String TEST_KEY = "testKey";
+ public static final String TEST_VALUE = "testValue";
+ public static final String TEST_REGION = "testRegion";
+
+ private Cache cache;
+ private int cacheServerPort;
+
+ @Rule
+ public final RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties();
+
+ @Before
+ public void setup() throws IOException {
+ CacheFactory cacheFactory = new CacheFactory();
+ cacheFactory.set("mcast-port", "0"); // sometimes it isn't due to other tests.
+ cache = cacheFactory.create();
+
+ CacheServer cacheServer = cache.addCacheServer();
+ cacheServerPort = AvailablePortHelper.getRandomAvailableTCPPort();
+ cacheServer.setPort(cacheServerPort);
+ cacheServer.start();
+
+ RegionFactory<Object, Object> regionFactory = cache.createRegionFactory();
+ Region<Object, Object> testRegion = regionFactory.create(TEST_REGION);
+ testRegion.put(TEST_KEY, TEST_VALUE);
+ }
+
+ @After
+ public void cleanup() {
+ cache.close();
+ }
+
+ @Test
+ public void testNewProtocolHeaderLeadsToNewProtocolServerConnection() throws Exception {
+ System.setProperty("geode.feature-protobuf-protocol", "true");
+
+ Socket socket = new Socket("localhost", cacheServerPort);
+ Awaitility.await().atMost(5, TimeUnit.SECONDS).until(socket::isConnected);
+ OutputStream outputStream = socket.getOutputStream();
+ outputStream.write(110);
+
+ ProtobufProtocolSerializer protobufProtocolSerializer = new ProtobufProtocolSerializer();
+ protobufProtocolSerializer.serialize(makeTestGetRequest(new StringCodec()), outputStream);
+
+ ClientProtocol.Message message =
+ protobufProtocolSerializer.deserialize(socket.getInputStream());
+ assertEquals(ClientProtocol.Message.MessageTypeCase.RESPONSE, message.getMessageTypeCase());
+ ClientProtocol.Response response = message.getResponse();
+ assertEquals(ClientProtocol.Response.ResponseAPICase.GETRESPONSE,
+ response.getResponseAPICase());
+ RegionAPI.GetResponse getResponse = response.getGetResponse();
+ BasicTypes.EncodedValue result = getResponse.getResult();
+ assertEquals(BasicTypes.EncodingType.STRING, result.getEncodingType());
+ assertEquals(TEST_VALUE, new ProtobufSerializationService().decode(result.getEncodingType(),
+ result.getValue().toByteArray()));
+ }
+
+ private ClientProtocol.Message makeTestGetRequest(StringCodec stringCodec) {
+ RegionAPI.GetRequest.Builder getRequestBuilder = RegionAPI.GetRequest.newBuilder();
+ getRequestBuilder.setRegionName(TEST_REGION)
+ .setKey(BasicTypes.EncodedValue.newBuilder().setEncodingType(BasicTypes.EncodingType.STRING)
+ .setValue(ByteString.copyFrom(stringCodec.encode(TEST_KEY))));
+ ClientProtocol.Request request =
+ ClientProtocol.Request.newBuilder().setGetRequest(getRequestBuilder).build();
+ ClientProtocol.Message requestMessage = ClientProtocol.Message.newBuilder()
+ .setMessageHeader(ClientProtocol.MessageHeader.newBuilder()).setRequest(request).build();
+
+ return requestMessage;
+ }
+}