This is an automated email from the ASF dual-hosted git repository. udo pushed a commit to branch feature/GEODE-3705 in repository https://gitbox.apache.org/repos/asf/geode.git
commit 018219775a4e0256ce5f4dc4b88a3f68c92da3ba Author: kohlmu-pivotal <[email protected]> AuthorDate: Fri Oct 20 16:08:56 2017 -0700 Adding SecurityProcessor.java and returning MessageExecutionContext.java --- .../tier/sockets/ClientProtocolMessageHandler.java | 13 ++--- .../tier/sockets/MessageExecutionContext.java | 40 ++++++++++---- .../{protobuf => }/EncodingTypeTranslator.java | 3 +- .../internal/protocol/{protobuf => }/Failure.java | 20 ++++--- .../protocol/{protobuf => }/Handshaker.java | 7 ++- .../protocol/{protobuf => }/OperationContext.java | 3 +- .../internal/protocol/ProtobufCachePipeline.java | 17 ++---- .../protocol/{protobuf => }/ProtocolErrorCode.java | 2 +- .../internal/protocol/{protobuf => }/Result.java | 7 ++- .../internal/protocol/{protobuf => }/Success.java | 21 +++++--- .../protocol/operations/OperationHandler.java | 6 +-- .../protocol/protobuf/ProtobufOpsProcessor.java | 62 ++++++++++++---------- .../protobuf/ProtobufSerializationService.java | 1 + .../protocol/protobuf/ProtobufStreamProcessor.java | 21 +++++--- .../operations/GetAllRequestOperationHandler.java | 20 +++---- .../GetAvailableServersOperationHandler.java | 12 ++--- .../GetRegionNamesRequestOperationHandler.java | 12 ++--- .../GetRegionRequestOperationHandler.java | 18 +++---- .../operations/GetRequestOperationHandler.java | 28 +++++----- .../operations/PutAllRequestOperationHandler.java | 20 +++---- .../operations/PutRequestOperationHandler.java | 22 ++++---- .../operations/RemoveRequestOperationHandler.java | 22 ++++---- .../HandshakerRequestOperationHandler.java | 23 ++++---- .../AuthenticationRequestOperationHandler.java | 57 ++++++++++++++++++++ .../security/InvalidConfigAuthenticator.java | 25 +++------ .../security/ProtobufShiroAuthenticator.java | 55 ++----------------- .../AuthenticationSecurityProcessor.java} | 19 ++++--- .../AuthorizationSecurityProcessor.java} | 19 ++++--- .../NoAuthenticationSecurityProcessor.java} | 18 ++++--- .../utilities/ProtobufResponseUtilities.java | 4 +- .../protobuf/utilities/ProtobufUtilities.java | 2 +- .../registry/OperationContextRegistry.java | 10 +++- .../security/AuthenticationLookupService.java | 2 +- .../internal/protocol/security/Authenticator.java | 18 ++----- .../protocol/security/NoOpAuthenticator.java | 8 +-- .../SecurityProcessor.java} | 18 +++---- geode-protobuf/src/main/proto/clientProtocol.proto | 4 +- geode-protobuf/src/main/proto/handshake_API.proto | 5 ++ .../protocol/AuthenticationIntegrationTest.java | 17 +++--- .../protocol/AuthorizationIntegrationTest.java | 7 ++- .../acceptance/LocatorConnectionDUnitTest.java | 3 +- ...TypeToSerializationTypeTranslatorJUnitTest.java | 1 + .../internal/protocol/protobuf/HandshakerTest.java | 18 +++---- .../ProtobufShiroAuthenticatorJUnitTest.java | 35 ++++++------ .../protobuf/ProtobufStreamProcessorTest.java | 6 ++- .../protobuf/ProtobufTestExecutionContext.java | 6 ++- .../protocol/protobuf/ProtobufTestUtilities.java | 2 +- .../GetAllRequestOperationHandlerJUnitTest.java | 13 ++--- ...tAvailableServersOperationHandlerJUnitTest.java | 4 +- ...egionNamesRequestOperationHandlerJUnitTest.java | 9 ++-- .../GetRegionRequestOperationHandlerJUnitTest.java | 11 ++-- .../GetRequestOperationHandlerJUnitTest.java | 19 +++---- .../PutAllRequestOperationHandlerJUnitTest.java | 11 ++-- .../PutRequestOperationHandlerJUnitTest.java | 17 +++--- .../RemoveRequestOperationHandlerJUnitTest.java | 17 +++--- 55 files changed, 461 insertions(+), 399 deletions(-) diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolMessageHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolMessageHandler.java index 4de279b..c1250e1 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolMessageHandler.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProtocolMessageHandler.java @@ -23,17 +23,18 @@ import org.apache.geode.StatisticsFactory; /** - * This is an interface that other modules can implement to hook into - * {@link GenericProtocolServerConnection} to handle messages sent to Geode. + * 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}. + * instance. It gets wired into {@link ServerConnectionFactory} to create all instances of {@link + * GenericProtocolServerConnection}. * * Implementors of this interface are expected to be able to be used for any number of connections * at a time (stateless except for the statistics). */ public interface ClientProtocolMessageHandler { - void receiveMessage(InputStream inputStream, OutputStream outputStream, - MessageExecutionContext executionContext) throws IOException; + MessageExecutionContext receiveMessage(InputStream inputStream, OutputStream outputStream, + MessageExecutionContext executionContext) + throws IOException; } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageExecutionContext.java b/geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageExecutionContext.java index 0978e41..5c9a5c8 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageExecutionContext.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageExecutionContext.java @@ -15,11 +15,16 @@ package org.apache.geode.internal.cache.tier.sockets; + import org.apache.geode.annotations.Experimental; import org.apache.geode.cache.Cache; import org.apache.geode.distributed.Locator; import org.apache.geode.distributed.internal.InternalLocator; import org.apache.geode.internal.exception.InvalidExecutionContextException; +import org.apache.geode.internal.protocol.protobuf.security.processors.NoAuthenticationSecurityProcessor; +import org.apache.geode.internal.protocol.security.Authenticator; +import org.apache.geode.internal.protocol.security.NoOpAuthenticator; +import org.apache.geode.internal.protocol.security.SecurityProcessor; import org.apache.geode.internal.protocol.statistics.ProtocolClientStatistics; import org.apache.geode.internal.protocol.security.Authorizer; import org.apache.geode.internal.protocol.security.NoOpAuthorizer; @@ -29,16 +34,21 @@ public class MessageExecutionContext { private Cache cache; private Locator locator; private final Authorizer authorizer; - private final Object authenticatedSubject; + private final Object authenticatedToken; private final ProtocolClientStatistics statistics; + private final SecurityProcessor securityProcessor; + private final Authenticator authenticator; - public MessageExecutionContext(Cache cache, Authorizer streamAuthorizer, - Object authenticatedSubject, ProtocolClientStatistics statistics) { + public MessageExecutionContext(Cache cache, Authenticator authenticator, + Authorizer streamAuthorizer, Object authenticatedToken, ProtocolClientStatistics statistics, + SecurityProcessor securityProcessor) { this.cache = cache; this.authorizer = streamAuthorizer; - this.authenticatedSubject = authenticatedSubject; + this.authenticatedToken = authenticatedToken; this.statistics = statistics; + this.securityProcessor = securityProcessor; + this.authenticator = authenticator; } public MessageExecutionContext(InternalLocator locator, ProtocolClientStatistics statistics) { @@ -46,14 +56,16 @@ public class MessageExecutionContext { // set a no-op authorizer until such time as locators implement authentication // and authorization checks this.authorizer = new NoOpAuthorizer(); + this.authenticator = new NoOpAuthenticator(); this.statistics = statistics; - this.authenticatedSubject = new Object(); + this.authenticatedToken = new Object(); + this.securityProcessor = new NoAuthenticationSecurityProcessor(); } /** * Returns the cache associated with this execution * <p> - * + * * @throws InvalidExecutionContextException if there is no cache available */ public Cache getCache() throws InvalidExecutionContextException { @@ -67,7 +79,7 @@ public class MessageExecutionContext { /** * Returns the locator associated with this execution * <p> - * + * * @throws InvalidExecutionContextException if there is no locator available */ public Locator getLocator() throws InvalidExecutionContextException { @@ -86,10 +98,10 @@ public class MessageExecutionContext { } /** - * Returns the authentication/authorization subject associated with this execution + * Returns the authentication token associated with this execution */ - public Object getSubject() { - return authenticatedSubject; + public Object getAuthenticationToken() { + return authenticatedToken; } @@ -100,4 +112,12 @@ public class MessageExecutionContext { public ProtocolClientStatistics getStatistics() { return statistics; } + + public Authenticator getAuthenticator() { + return authenticator; + } + + public SecurityProcessor getSecurityProcessor() { + return securityProcessor; + } } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeTranslator.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/EncodingTypeTranslator.java similarity index 96% rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeTranslator.java rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/EncodingTypeTranslator.java index 1868ced..5801292 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeTranslator.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/EncodingTypeTranslator.java @@ -12,11 +12,12 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package org.apache.geode.internal.protocol.protobuf; +package org.apache.geode.internal.protocol; import java.util.HashMap; import org.apache.geode.annotations.Experimental; +import org.apache.geode.internal.protocol.protobuf.BasicTypes; import org.apache.geode.pdx.JSONFormatter; import org.apache.geode.pdx.PdxInstance; import org.apache.geode.internal.serialization.SerializationType; diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Failure.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Failure.java similarity index 64% rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Failure.java rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Failure.java index 6ac73de..cfcd46d 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Failure.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Failure.java @@ -12,31 +12,39 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package org.apache.geode.internal.protocol.protobuf; +package org.apache.geode.internal.protocol; import java.util.function.Function; import org.apache.geode.annotations.Experimental; +import org.apache.geode.internal.protocol.protobuf.ClientProtocol; @Experimental -public class Failure<SuccessType> implements Result<SuccessType> { +public class Failure<SuccessType, ExecutionContext> implements Result<SuccessType, ExecutionContext> { private final ClientProtocol.ErrorResponse errorResponse; + private final ExecutionContext executionContext; - public Failure(ClientProtocol.ErrorResponse errorResponse) { + public Failure(ClientProtocol.ErrorResponse errorResponse, ExecutionContext executionContext) { this.errorResponse = errorResponse; + this.executionContext = executionContext; } - public static <T> Failure<T> of(ClientProtocol.ErrorResponse errorResponse) { - return new Failure<>(errorResponse); + public static <T, V> Failure<T, V> of(ClientProtocol.ErrorResponse errorResponse, V context) { + return new Failure<>(errorResponse, context); } @Override public <T> T map(Function<SuccessType, T> successFunction, - Function<ClientProtocol.ErrorResponse, T> errorFunction) { + Function<ClientProtocol.ErrorResponse, T> errorFunction) { return errorFunction.apply(errorResponse); } @Override + public ExecutionContext getExecutionContext() { + return executionContext; + } + + @Override public SuccessType getMessage() { throw new RuntimeException("This is not a Success result"); } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Handshaker.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Handshaker.java similarity index 88% rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Handshaker.java rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Handshaker.java index 1812f92..1a5bb97 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Handshaker.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Handshaker.java @@ -13,7 +13,7 @@ * the License. */ -package org.apache.geode.internal.protocol.protobuf; +package org.apache.geode.internal.protocol; import java.io.IOException; import java.io.InputStream; @@ -22,8 +22,11 @@ import java.io.OutputStream; import org.apache.logging.log4j.Logger; import org.apache.geode.cache.IncompatibleVersionException; +import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.logging.LogService; +import org.apache.geode.internal.protocol.Result; import org.apache.geode.internal.protocol.handshaker.ClientProtocolHandshaker; +import org.apache.geode.internal.protocol.protobuf.HandshakeAPI; import org.apache.geode.internal.protocol.protobuf.operations.handshaker.HandshakerRequestOperationHandler; public class Handshaker implements ClientProtocolHandshaker { @@ -45,7 +48,7 @@ public class Handshaker implements ClientProtocolHandshaker { // At this stage HandshakerRequestOperationHandler is not wired into the // ProtobufOpsStreamProcesser. // Thus passing in null serializationService and executionContext. - Result<HandshakeAPI.HandshakeResponse> result = + Result<HandshakeAPI.HandshakeResponse,MessageExecutionContext> result = handshakerRequestOperationHandler.process(null, handshakeRequest, null); HandshakeAPI.HandshakeResponse handshakeResponse = result.getMessage(); diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/OperationContext.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/OperationContext.java similarity index 96% rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/OperationContext.java rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/OperationContext.java index 12c50aa..d4ca2a0 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/OperationContext.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/OperationContext.java @@ -13,12 +13,13 @@ * the License. */ -package org.apache.geode.internal.protocol.protobuf; +package org.apache.geode.internal.protocol; import java.util.function.Function; import org.apache.geode.annotations.Experimental; import org.apache.geode.internal.protocol.operations.OperationHandler; +import org.apache.geode.internal.protocol.protobuf.ClientProtocol; import org.apache.geode.security.ResourcePermission; @Experimental diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufCachePipeline.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufCachePipeline.java index 3b6d2e5..a7764df 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufCachePipeline.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtobufCachePipeline.java @@ -24,6 +24,7 @@ import org.apache.geode.cache.Cache; import org.apache.geode.internal.cache.tier.sockets.ClientProtocolProcessor; import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.protocol.protobuf.ProtobufStreamProcessor; +import org.apache.geode.internal.protocol.protobuf.security.processors.AuthenticationSecurityProcessor; import org.apache.geode.internal.protocol.security.Authenticator; import org.apache.geode.internal.protocol.security.Authorizer; import org.apache.geode.internal.protocol.statistics.ProtocolClientStatistics; @@ -39,7 +40,7 @@ public final class ProtobufCachePipeline implements ClientProtocolProcessor { private final ProtobufStreamProcessor streamProcessor; private final Authenticator authenticator; - private Object authenticatorToken; + private MessageExecutionContext messageExecutionContext; ProtobufCachePipeline(ProtobufStreamProcessor protobufStreamProcessor, ProtocolClientStatistics statistics, Cache cache, Authenticator authenticator, @@ -50,22 +51,14 @@ public final class ProtobufCachePipeline implements ClientProtocolProcessor { this.authenticator = authenticator; this.authorizer = authorizer; this.statistics.clientConnected(); + this.messageExecutionContext = new MessageExecutionContext(cache, authenticator, authorizer, + null, statistics, new AuthenticationSecurityProcessor()); } @Override public void processMessage(InputStream inputStream, OutputStream outputStream) throws IOException { - if (authenticatorToken == null) { - try { - authenticatorToken = authenticator.authenticate(inputStream, outputStream); - } catch (AuthenticationFailedException ex) { - statistics.incAuthenticationFailures(); - throw new IOException(ex); - } - } else { - streamProcessor.receiveMessage(inputStream, outputStream, - new MessageExecutionContext(cache, authorizer, authenticatorToken, statistics)); - } + messageExecutionContext = streamProcessor.receiveMessage(inputStream, outputStream, messageExecutionContext); } @Override diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtocolErrorCode.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtocolErrorCode.java similarity index 96% rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtocolErrorCode.java rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtocolErrorCode.java index 2c895d3..f74f613 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtocolErrorCode.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/ProtocolErrorCode.java @@ -12,7 +12,7 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package org.apache.geode.internal.protocol.protobuf; +package org.apache.geode.internal.protocol; public enum ProtocolErrorCode { GENERIC_FAILURE(1000), diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Result.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Result.java similarity index 83% copy from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Result.java copy to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Result.java index bada098..69a5f6f 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Result.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Result.java @@ -12,17 +12,20 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package org.apache.geode.internal.protocol.protobuf; +package org.apache.geode.internal.protocol; import java.util.function.Function; import org.apache.geode.annotations.Experimental; +import org.apache.geode.internal.protocol.protobuf.ClientProtocol; @Experimental -public interface Result<SuccessType> { +public interface Result<SuccessType,ExecutionContext> { <T> T map(Function<SuccessType, T> successFunction, Function<ClientProtocol.ErrorResponse, T> errorFunction); + ExecutionContext getExecutionContext(); + SuccessType getMessage(); ClientProtocol.ErrorResponse getErrorMessage(); diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Success.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Success.java similarity index 66% rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Success.java rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Success.java index 224b21c..0a3378e 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Success.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/Success.java @@ -12,31 +12,40 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package org.apache.geode.internal.protocol.protobuf; +package org.apache.geode.internal.protocol; import java.util.function.Function; import org.apache.geode.annotations.Experimental; +import org.apache.geode.internal.protocol.protobuf.ClientProtocol; @Experimental -public class Success<SuccessType> implements Result<SuccessType> { +public class Success<SuccessType, ExecutionContext> + implements Result<SuccessType, ExecutionContext> { private final SuccessType successResponse; + private final ExecutionContext executionContext; - public Success(SuccessType successResponse) { + public Success(SuccessType successResponse, ExecutionContext executionContext) { this.successResponse = successResponse; + this.executionContext = executionContext; } - public static <T> Success<T> of(T result) { - return new Success<>(result); + public static <T,V> Success<T,V> of(T result,V context) { + return new Success<>(result,context); } @Override public <T> T map(Function<SuccessType, T> successFunction, - Function<ClientProtocol.ErrorResponse, T> errorFunction) { + Function<ClientProtocol.ErrorResponse, T> errorFunction) { return successFunction.apply(successResponse); } @Override + public ExecutionContext getExecutionContext() { + return executionContext; + } + + @Override public SuccessType getMessage() { return successResponse; } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/operations/OperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/operations/OperationHandler.java index 9d2d482..13ce932 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/operations/OperationHandler.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/operations/OperationHandler.java @@ -18,7 +18,7 @@ import org.apache.geode.annotations.Experimental; import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.exception.InvalidExecutionContextException; import org.apache.geode.internal.protocol.protobuf.ProtobufOpsProcessor; -import org.apache.geode.internal.protocol.protobuf.Result; +import org.apache.geode.internal.protocol.Result; import org.apache.geode.internal.serialization.SerializationService; /** @@ -33,7 +33,7 @@ public interface OperationHandler<Req, Resp> { * Decode the message, deserialize contained values using the serialization service, do the work * indicated on the provided cache, and return a response. */ - Result<Resp> process(SerializationService serializationService, Req request, - MessageExecutionContext executionContext) throws InvalidExecutionContextException; + Result<Resp,MessageExecutionContext> process(SerializationService serializationService, Req request, + MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException; } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufOpsProcessor.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufOpsProcessor.java index 4fd1764..59407d6 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufOpsProcessor.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufOpsProcessor.java @@ -20,12 +20,16 @@ import org.apache.geode.annotations.Experimental; import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.exception.InvalidExecutionContextException; import org.apache.geode.internal.logging.LogService; +import org.apache.geode.internal.protocol.Failure; +import org.apache.geode.internal.protocol.OperationContext; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.registry.OperationContextRegistry; -import org.apache.geode.internal.protocol.statistics.ProtocolClientStatistics; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities; +import org.apache.geode.internal.protocol.security.SecurityProcessor; import org.apache.geode.internal.serialization.SerializationService; -import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*; +import static org.apache.geode.internal.protocol.ProtocolErrorCode.*; /** * This handles protobuf requests by determining the operation type of the request and dispatching @@ -39,42 +43,46 @@ public class ProtobufOpsProcessor { private static final Logger logger = LogService.getLogger(ProtobufOpsProcessor.class); public ProtobufOpsProcessor(SerializationService serializationService, - OperationContextRegistry operationContextRegistry) { + OperationContextRegistry operationContextRegistry) { this.serializationService = serializationService; this.operationContextRegistry = operationContextRegistry; } - public ClientProtocol.Response process(ClientProtocol.Request request, - MessageExecutionContext context) { + public Result<ClientProtocol.Response, MessageExecutionContext> process( + ClientProtocol.Request request, + MessageExecutionContext messageExecutionContext) { ClientProtocol.Request.RequestAPICase requestType = request.getRequestAPICase(); logger.debug("Processing request of type {}", requestType); OperationContext operationContext = operationContextRegistry.getOperationContext(requestType); - ClientProtocol.Response.Builder builder; Result result; - try { - if (context.getAuthorizer().authorize(context.getSubject(), - operationContext.getAccessPermissionRequired())) { - result = operationContext.getOperationHandler().process(serializationService, - operationContext.getFromRequest().apply(request), context); - } else { - logger.warn("Received unauthorized request"); - recordAuthorizationViolation(context); - result = Failure.of(ProtobufResponseUtilities.makeErrorResponse(AUTHORIZATION_FAILED, - "User isn't authorized for this operation.")); - } - } catch (InvalidExecutionContextException exception) { - logger.error("Invalid execution context found for operation {}", requestType); - result = Failure.of(ProtobufResponseUtilities.makeErrorResponse(UNSUPPORTED_OPERATION, - "Invalid execution context found for operation.")); + + SecurityProcessor securityProcessor = messageExecutionContext.getSecurityProcessor(); + if (securityProcessor.validateOperation(request, messageExecutionContext, operationContext)) { + result = processOperation(request, messageExecutionContext, requestType, operationContext); + } else { + logger.warn("Received unauthorized request"); + messageExecutionContext.getStatistics().incAuthorizationViolations(); + result = Failure.of(ProtobufResponseUtilities.makeErrorResponse(AUTHORIZATION_FAILED, + "User isn't authorized for this operation."), messageExecutionContext); } - builder = (ClientProtocol.Response.Builder) result.map(operationContext.getToResponse(), - operationContext.getToErrorResponse()); - return builder.build(); + ClientProtocol.Response + response = + ((ClientProtocol.Response.Builder) result.map(operationContext.getToResponse(), + operationContext.getToErrorResponse())).build(); + return Success.of(response, (MessageExecutionContext) result.getExecutionContext()); } - private void recordAuthorizationViolation(MessageExecutionContext context) { - ProtocolClientStatistics statistics = context.getStatistics(); - statistics.incAuthorizationViolations(); + private Result processOperation(ClientProtocol.Request request, MessageExecutionContext context, + ClientProtocol.Request.RequestAPICase requestType, + OperationContext operationContext) { + try { + return operationContext.getOperationHandler().process(serializationService, + operationContext.getFromRequest().apply(request), context); + } catch (InvalidExecutionContextException exception) { + logger.error("Invalid execution context found for operation {}", requestType); + return Failure.of(ProtobufResponseUtilities.makeErrorResponse(UNSUPPORTED_OPERATION, + "Invalid execution context found for operation."), context); + } } } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufSerializationService.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufSerializationService.java index 8b8dbb3..f7281fd 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufSerializationService.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufSerializationService.java @@ -15,6 +15,7 @@ package org.apache.geode.internal.protocol.protobuf; import org.apache.geode.annotations.Experimental; +import org.apache.geode.internal.protocol.EncodingTypeTranslator; import org.apache.geode.internal.serialization.SerializationService; import org.apache.geode.internal.serialization.SerializationType; import org.apache.geode.internal.serialization.TypeCodec; diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessor.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessor.java index 9386ee7..4250e93 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessor.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessor.java @@ -25,6 +25,7 @@ import org.apache.geode.annotations.Experimental; import org.apache.geode.internal.cache.tier.sockets.ClientProtocolMessageHandler; import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.logging.LogService; +import org.apache.geode.internal.protocol.Result; import org.apache.geode.internal.protocol.exception.InvalidProtocolMessageException; import org.apache.geode.internal.protocol.registry.OperationContextRegistry; import org.apache.geode.internal.protocol.protobuf.serializer.ProtobufProtocolSerializer; @@ -49,17 +50,19 @@ public class ProtobufStreamProcessor implements ClientProtocolMessageHandler { } @Override - public void receiveMessage(InputStream inputStream, OutputStream outputStream, - MessageExecutionContext executionContext) throws IOException { + public MessageExecutionContext receiveMessage(InputStream inputStream, OutputStream outputStream, + MessageExecutionContext executionContext) + throws IOException { try { - processOneMessage(inputStream, outputStream, executionContext); + return processOneMessage(inputStream, outputStream, executionContext); } catch (InvalidProtocolMessageException e) { throw new IOException(e); } } - private void processOneMessage(InputStream inputStream, OutputStream outputStream, - MessageExecutionContext executionContext) + private MessageExecutionContext processOneMessage(InputStream inputStream, + OutputStream outputStream, + MessageExecutionContext executionContext) throws InvalidProtocolMessageException, IOException { ClientProtocol.Message message = protobufProtocolSerializer.deserialize(inputStream); if (message == null) { @@ -71,9 +74,13 @@ public class ProtobufStreamProcessor implements ClientProtocolMessageHandler { statistics.messageReceived(message.getSerializedSize()); ClientProtocol.Request request = message.getRequest(); - ClientProtocol.Response response = protobufOpsProcessor.process(request, executionContext); - ClientProtocol.Message responseMessage = ProtobufUtilities.createProtobufResponse(response); + Result<ClientProtocol.Response, MessageExecutionContext> result = + protobufOpsProcessor.process(request, executionContext); + ClientProtocol.Message + responseMessage = + ProtobufUtilities.createProtobufResponse(result.getMessage()); statistics.messageSent(responseMessage.getSerializedSize()); protobufProtocolSerializer.serialize(responseMessage, outputStream); + return result.getExecutionContext(); } } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandler.java index 2001645..c15a44f 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandler.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandler.java @@ -31,17 +31,17 @@ import org.apache.geode.internal.logging.LogService; import org.apache.geode.internal.protocol.operations.OperationHandler; import org.apache.geode.internal.protocol.protobuf.BasicTypes; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Failure; -import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Failure; +import org.apache.geode.internal.protocol.ProtocolErrorCode; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities; import org.apache.geode.internal.serialization.SerializationService; import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException; import org.apache.geode.internal.serialization.registry.exception.CodecNotRegisteredForTypeException; -import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*; +import static org.apache.geode.internal.protocol.ProtocolErrorCode.*; @Experimental public class GetAllRequestOperationHandler @@ -49,15 +49,15 @@ public class GetAllRequestOperationHandler private static final Logger logger = LogService.getLogger(); @Override - public Result<RegionAPI.GetAllResponse> process(SerializationService serializationService, - RegionAPI.GetAllRequest request, MessageExecutionContext executionContext) + public Result<RegionAPI.GetAllResponse,MessageExecutionContext> process(SerializationService serializationService, + RegionAPI.GetAllRequest request, MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException { String regionName = request.getRegionName(); - Region region = executionContext.getCache().getRegion(regionName); + Region region = messageExecutionContext.getCache().getRegion(regionName); if (region == null) { logger.error("Received GetAll request for non-existing region {}", regionName); return Failure - .of(ProtobufResponseUtilities.makeErrorResponse(REGION_NOT_FOUND, "Region not found")); + .of(ProtobufResponseUtilities.makeErrorResponse(REGION_NOT_FOUND, "Region not found"),messageExecutionContext); } Map<Boolean, List<Object>> resultsCollection = request.getKeyList().stream() @@ -73,7 +73,7 @@ public class GetAllRequestOperationHandler responseBuilder.addFailures((BasicTypes.KeyedError) entry); } - return Success.of(responseBuilder.build()); + return Success.of(responseBuilder.build(),messageExecutionContext); } private Object processOneMessage(SerializationService serializationService, Region region, diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandler.java index c8f663f..ec2c917 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandler.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandler.java @@ -25,9 +25,9 @@ import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.exception.InvalidExecutionContextException; import org.apache.geode.internal.protocol.operations.OperationHandler; import org.apache.geode.internal.protocol.protobuf.BasicTypes; -import org.apache.geode.internal.protocol.protobuf.Result; +import org.apache.geode.internal.protocol.Result; import org.apache.geode.internal.protocol.protobuf.ServerAPI; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.serialization.SerializationService; @Experimental @@ -35,11 +35,11 @@ public class GetAvailableServersOperationHandler implements OperationHandler<ServerAPI.GetAvailableServersRequest, ServerAPI.GetAvailableServersResponse> { @Override - public Result<ServerAPI.GetAvailableServersResponse> process( + public Result<ServerAPI.GetAvailableServersResponse,MessageExecutionContext> process( SerializationService serializationService, ServerAPI.GetAvailableServersRequest request, - MessageExecutionContext executionContext) throws InvalidExecutionContextException { + MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException { - InternalLocator internalLocator = (InternalLocator) executionContext.getLocator(); + InternalLocator internalLocator = (InternalLocator) messageExecutionContext.getLocator(); ArrayList serversFromSnapshot = internalLocator.getServerLocatorAdvisee().getLoadSnapshot().getServers(null); if (serversFromSnapshot == null) { @@ -51,7 +51,7 @@ public class GetAvailableServersOperationHandler implements .collect(Collectors.toList()); ServerAPI.GetAvailableServersResponse.Builder builder = ServerAPI.GetAvailableServersResponse.newBuilder().addAllServers(servers); - return Success.of(builder.build()); + return Success.of(builder.build(),messageExecutionContext); } private BasicTypes.Server getServerProtobufMessage(ServerLocation serverLocation) { diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandler.java index 7ffdcd8..c8e6573 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandler.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandler.java @@ -22,8 +22,8 @@ import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.exception.InvalidExecutionContextException; import org.apache.geode.internal.protocol.operations.OperationHandler; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities; import org.apache.geode.internal.serialization.SerializationService; @@ -32,10 +32,10 @@ public class GetRegionNamesRequestOperationHandler implements OperationHandler<RegionAPI.GetRegionNamesRequest, RegionAPI.GetRegionNamesResponse> { @Override - public Result<RegionAPI.GetRegionNamesResponse> process(SerializationService serializationService, - RegionAPI.GetRegionNamesRequest request, MessageExecutionContext executionContext) + public Result<RegionAPI.GetRegionNamesResponse,MessageExecutionContext> process(SerializationService serializationService, + RegionAPI.GetRegionNamesRequest request, MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException { - Set<Region<?, ?>> regions = executionContext.getCache().rootRegions(); - return Success.of(ProtobufResponseUtilities.createGetRegionNamesResponse(regions)); + Set<Region<?, ?>> regions = messageExecutionContext.getCache().rootRegions(); + return Success.of(ProtobufResponseUtilities.createGetRegionNamesResponse(regions),messageExecutionContext); } } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandler.java index 78d3d5c..032d72c 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandler.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandler.java @@ -23,15 +23,15 @@ import org.apache.geode.internal.exception.InvalidExecutionContextException; import org.apache.geode.internal.logging.LogService; import org.apache.geode.internal.protocol.protobuf.BasicTypes; import org.apache.geode.internal.protocol.operations.OperationHandler; -import org.apache.geode.internal.protocol.protobuf.Failure; +import org.apache.geode.internal.protocol.Failure; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities; import org.apache.geode.internal.serialization.SerializationService; -import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*; +import static org.apache.geode.internal.protocol.ProtocolErrorCode.*; @Experimental public class GetRegionRequestOperationHandler @@ -39,20 +39,20 @@ public class GetRegionRequestOperationHandler private static final Logger logger = LogService.getLogger(); @Override - public Result<RegionAPI.GetRegionResponse> process(SerializationService serializationService, - RegionAPI.GetRegionRequest request, MessageExecutionContext executionContext) + public Result<RegionAPI.GetRegionResponse,MessageExecutionContext> process(SerializationService serializationService, + RegionAPI.GetRegionRequest request, MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException { String regionName = request.getRegionName(); - Region region = executionContext.getCache().getRegion(regionName); + Region region = messageExecutionContext.getCache().getRegion(regionName); if (region == null) { logger.error("Received GetRegion request for non-existing region {}", regionName); return Failure.of(ProtobufResponseUtilities.makeErrorResponse(REGION_NOT_FOUND, - "No region exists for name: " + regionName)); + "No region exists for name: " + regionName),messageExecutionContext); } BasicTypes.Region protoRegion = ProtobufUtilities.createRegionMessageFromRegion(region); - return Success.of(RegionAPI.GetRegionResponse.newBuilder().setRegion(protoRegion).build()); + return Success.of(RegionAPI.GetRegionResponse.newBuilder().setRegion(protoRegion).build(),messageExecutionContext); } } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandler.java index e7702b8..0e7c6a2 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandler.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandler.java @@ -23,18 +23,17 @@ import org.apache.geode.internal.exception.InvalidExecutionContextException; import org.apache.geode.internal.logging.LogService; import org.apache.geode.internal.protocol.operations.OperationHandler; import org.apache.geode.internal.protocol.protobuf.BasicTypes; -import org.apache.geode.internal.protocol.protobuf.Failure; -import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode; +import org.apache.geode.internal.protocol.Failure; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities; import org.apache.geode.internal.serialization.SerializationService; import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException; import org.apache.geode.internal.serialization.registry.exception.CodecNotRegisteredForTypeException; -import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*; +import static org.apache.geode.internal.protocol.ProtocolErrorCode.*; @Experimental public class GetRequestOperationHandler @@ -42,15 +41,17 @@ public class GetRequestOperationHandler private static final Logger logger = LogService.getLogger(); @Override - public Result<RegionAPI.GetResponse> process(SerializationService serializationService, - RegionAPI.GetRequest request, MessageExecutionContext executionContext) + public Result<RegionAPI.GetResponse, MessageExecutionContext> process( + SerializationService serializationService, + RegionAPI.GetRequest request, MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException { String regionName = request.getRegionName(); - Region region = executionContext.getCache().getRegion(regionName); + Region region = messageExecutionContext.getCache().getRegion(regionName); if (region == null) { logger.error("Received Get request for non-existing region {}", regionName); return Failure - .of(ProtobufResponseUtilities.makeErrorResponse(REGION_NOT_FOUND, "Region not found")); + .of(ProtobufResponseUtilities.makeErrorResponse(REGION_NOT_FOUND, "Region not found"), + messageExecutionContext); } try { @@ -58,20 +59,21 @@ public class GetRequestOperationHandler Object resultValue = region.get(decodedKey); if (resultValue == null) { - return Success.of(RegionAPI.GetResponse.newBuilder().build()); + return Success.of(RegionAPI.GetResponse.newBuilder().build(), messageExecutionContext); } BasicTypes.EncodedValue encodedValue = ProtobufUtilities.createEncodedValue(serializationService, resultValue); - return Success.of(RegionAPI.GetResponse.newBuilder().setResult(encodedValue).build()); + return Success.of(RegionAPI.GetResponse.newBuilder().setResult(encodedValue).build(), + messageExecutionContext); } catch (UnsupportedEncodingTypeException ex) { logger.error("Received Get request with unsupported encoding: {}", ex); return Failure.of(ProtobufResponseUtilities.makeErrorResponse(VALUE_ENCODING_ERROR, - "Encoding not supported.")); + "Encoding not supported."), messageExecutionContext); } catch (CodecNotRegisteredForTypeException ex) { logger.error("Got codec error when decoding Get request: {}", ex); return Failure.of(ProtobufResponseUtilities.makeErrorResponse(VALUE_ENCODING_ERROR, - "Codec error in protobuf deserialization.")); + "Codec error in protobuf deserialization."), messageExecutionContext); } } } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandler.java index 300616b..54f9391 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandler.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandler.java @@ -26,18 +26,18 @@ import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.exception.InvalidExecutionContextException; import org.apache.geode.internal.protocol.operations.OperationHandler; import org.apache.geode.internal.protocol.protobuf.BasicTypes; -import org.apache.geode.internal.protocol.protobuf.Failure; -import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode; +import org.apache.geode.internal.protocol.Failure; +import org.apache.geode.internal.protocol.ProtocolErrorCode; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities; import org.apache.geode.internal.serialization.SerializationService; import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException; import org.apache.geode.internal.serialization.registry.exception.CodecNotRegisteredForTypeException; -import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*; +import static org.apache.geode.internal.protocol.ProtocolErrorCode.*; @Experimental public class PutAllRequestOperationHandler @@ -45,23 +45,23 @@ public class PutAllRequestOperationHandler private static final Logger logger = LogManager.getLogger(); @Override - public Result<RegionAPI.PutAllResponse> process(SerializationService serializationService, - RegionAPI.PutAllRequest putAllRequest, MessageExecutionContext executionContext) + public Result<RegionAPI.PutAllResponse,MessageExecutionContext> process(SerializationService serializationService, + RegionAPI.PutAllRequest putAllRequest, MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException { String regionName = putAllRequest.getRegionName(); - Region region = executionContext.getCache().getRegion(regionName); + Region region = messageExecutionContext.getCache().getRegion(regionName); if (region == null) { logger.error("Received PutAll request for non-existing region {}", regionName); return Failure.of(ProtobufResponseUtilities.makeErrorResponse(REGION_NOT_FOUND, - "Region passed does not exist: " + regionName)); + "Region passed does not exist: " + regionName),messageExecutionContext); } RegionAPI.PutAllResponse.Builder builder = RegionAPI.PutAllResponse.newBuilder() .addAllFailedKeys(putAllRequest.getEntryList().stream() .map((entry) -> singlePut(serializationService, region, entry)).filter(Objects::nonNull) .collect(Collectors.toList())); - return Success.of(builder.build()); + return Success.of(builder.build(),messageExecutionContext); } private BasicTypes.KeyedError singlePut(SerializationService serializationService, Region region, diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandler.java index 81c842d..719fa85 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandler.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandler.java @@ -23,17 +23,17 @@ import org.apache.geode.internal.exception.InvalidExecutionContextException; import org.apache.geode.internal.logging.LogService; import org.apache.geode.internal.protocol.operations.OperationHandler; import org.apache.geode.internal.protocol.protobuf.BasicTypes; -import org.apache.geode.internal.protocol.protobuf.Failure; +import org.apache.geode.internal.protocol.Failure; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities; import org.apache.geode.internal.serialization.SerializationService; import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException; import org.apache.geode.internal.serialization.registry.exception.CodecNotRegisteredForTypeException; -import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*; +import static org.apache.geode.internal.protocol.ProtocolErrorCode.*; @Experimental public class PutRequestOperationHandler @@ -41,15 +41,15 @@ public class PutRequestOperationHandler private static final Logger logger = LogService.getLogger(); @Override - public Result<RegionAPI.PutResponse> process(SerializationService serializationService, - RegionAPI.PutRequest request, MessageExecutionContext executionContext) + public Result<RegionAPI.PutResponse,MessageExecutionContext> process(SerializationService serializationService, + RegionAPI.PutRequest request, MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException { String regionName = request.getRegionName(); - Region region = executionContext.getCache().getRegion(regionName); + Region region = messageExecutionContext.getCache().getRegion(regionName); if (region == null) { logger.warn("Received Put request for non-existing region: {}", regionName); return Failure.of(ProtobufResponseUtilities.makeErrorResponse(REGION_NOT_FOUND, - "Region passed by client did not exist: " + regionName)); + "Region passed by client did not exist: " + regionName),messageExecutionContext); } try { @@ -59,16 +59,16 @@ public class PutRequestOperationHandler Object decodedKey = ProtobufUtilities.decodeValue(serializationService, entry.getKey()); try { region.put(decodedKey, decodedValue); - return Success.of(RegionAPI.PutResponse.newBuilder().build()); + return Success.of(RegionAPI.PutResponse.newBuilder().build(),messageExecutionContext); } catch (ClassCastException ex) { logger.error("Received Put request with invalid key type: {}", ex); return Failure.of(ProtobufResponseUtilities.makeErrorResponse(CONSTRAINT_VIOLATION, - "invalid key or value type for region " + regionName)); + "invalid key or value type for region " + regionName),messageExecutionContext); } } catch (UnsupportedEncodingTypeException | CodecNotRegisteredForTypeException ex) { logger.error("Got codec error when decoding Put request: {}", ex); return Failure - .of(ProtobufResponseUtilities.makeErrorResponse(VALUE_ENCODING_ERROR, ex.getMessage())); + .of(ProtobufResponseUtilities.makeErrorResponse(VALUE_ENCODING_ERROR, ex.getMessage()),messageExecutionContext); } } } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandler.java index 0e3b148..2d401fa 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandler.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandler.java @@ -22,17 +22,17 @@ import org.apache.geode.cache.Region; import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.exception.InvalidExecutionContextException; import org.apache.geode.internal.protocol.operations.OperationHandler; -import org.apache.geode.internal.protocol.protobuf.Failure; +import org.apache.geode.internal.protocol.Failure; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities; import org.apache.geode.internal.serialization.SerializationService; import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException; import org.apache.geode.internal.serialization.registry.exception.CodecNotRegisteredForTypeException; -import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.*; +import static org.apache.geode.internal.protocol.ProtocolErrorCode.*; @Experimental public class RemoveRequestOperationHandler @@ -40,32 +40,32 @@ public class RemoveRequestOperationHandler private static final Logger logger = LogManager.getLogger(); @Override - public Result<RegionAPI.RemoveResponse> process(SerializationService serializationService, - RegionAPI.RemoveRequest request, MessageExecutionContext executionContext) + public Result<RegionAPI.RemoveResponse,MessageExecutionContext> process(SerializationService serializationService, + RegionAPI.RemoveRequest request, MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException { String regionName = request.getRegionName(); - Region region = executionContext.getCache().getRegion(regionName); + Region region = messageExecutionContext.getCache().getRegion(regionName); if (region == null) { logger.error("Received Remove request for non-existing region {}", regionName); return Failure - .of(ProtobufResponseUtilities.makeErrorResponse(REGION_NOT_FOUND, "Region not found")); + .of(ProtobufResponseUtilities.makeErrorResponse(REGION_NOT_FOUND, "Region not found"),messageExecutionContext); } try { Object decodedKey = ProtobufUtilities.decodeValue(serializationService, request.getKey()); region.remove(decodedKey); - return Success.of(RegionAPI.RemoveResponse.newBuilder().build()); + return Success.of(RegionAPI.RemoveResponse.newBuilder().build(),messageExecutionContext); } catch (UnsupportedEncodingTypeException ex) { // can be thrown by encoding or decoding. logger.error("Received Remove request with unsupported encoding: {}", ex); return Failure.of(ProtobufResponseUtilities.makeErrorResponse(VALUE_ENCODING_ERROR, - "Encoding not supported: " + ex.getMessage())); + "Encoding not supported: " + ex.getMessage()),messageExecutionContext); } catch (CodecNotRegisteredForTypeException ex) { logger.error("Got codec error when decoding Remove request: {}", ex); return Failure.of(ProtobufResponseUtilities.makeErrorResponse(VALUE_ENCODING_ERROR, - "Codec error in protobuf deserialization: " + ex.getMessage())); + "Codec error in protobuf deserialization: " + ex.getMessage()),messageExecutionContext); } } } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/handshaker/HandshakerRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/handshaker/HandshakerRequestOperationHandler.java index b31247b..0b2e3b6 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/handshaker/HandshakerRequestOperationHandler.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/handshaker/HandshakerRequestOperationHandler.java @@ -14,24 +14,17 @@ */ package org.apache.geode.internal.protocol.protobuf.operations.handshaker; -import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.CONSTRAINT_VIOLATION; -import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.UNSUPPORTED_VERSION; +import static org.apache.geode.internal.protocol.ProtocolErrorCode.UNSUPPORTED_VERSION; import org.apache.logging.log4j.Logger; -import org.apache.geode.cache.IncompatibleVersionException; import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; -import org.apache.geode.internal.exception.InvalidExecutionContextException; import org.apache.geode.internal.logging.LogService; import org.apache.geode.internal.protocol.operations.OperationHandler; import org.apache.geode.internal.protocol.protobuf.BasicTypes; -import org.apache.geode.internal.protocol.protobuf.ClientProtocol; -import org.apache.geode.internal.protocol.protobuf.Failure; import org.apache.geode.internal.protocol.protobuf.HandshakeAPI; -import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; -import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufResponseUtilities; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.serialization.SerializationService; public class HandshakerRequestOperationHandler @@ -42,8 +35,9 @@ public class HandshakerRequestOperationHandler LogService.getLogger(HandshakerRequestOperationHandler.class); @Override - public Result<HandshakeAPI.HandshakeResponse> process(SerializationService serializationService, - HandshakeAPI.HandshakeRequest request, MessageExecutionContext executionContext) { + public Result<HandshakeAPI.HandshakeResponse, MessageExecutionContext> process( + SerializationService serializationService, + HandshakeAPI.HandshakeRequest request, MessageExecutionContext messageExecutionContext) { HandshakeAPI.Semver version = request.getVersion(); if (version.getMajor() != MAJOR_VERSION || version.getMinor() < MINOR_VERSION) { logger.warn("Version mismatch: incompatible version. Supported version is: " + MAJOR_VERSION @@ -52,8 +46,9 @@ public class HandshakerRequestOperationHandler .setError(BasicTypes.Error.newBuilder().setErrorCode(UNSUPPORTED_VERSION.codeValue) .setMessage("Version mismatch: incompatible version. Supported version is: " + MAJOR_VERSION + "." + MINOR_VERSION)) - .build()); + .build(), messageExecutionContext); } - return Success.of(HandshakeAPI.HandshakeResponse.newBuilder().setOk(true).build()); + return Success.of(HandshakeAPI.HandshakeResponse.newBuilder().setOk(true).build(), + messageExecutionContext); } } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/security/AuthenticationRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/security/AuthenticationRequestOperationHandler.java new file mode 100644 index 0000000..947563f --- /dev/null +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/operations/security/AuthenticationRequestOperationHandler.java @@ -0,0 +1,57 @@ +/* + * 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.protocol.protobuf.operations.security; + +import java.util.Properties; + +import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; +import org.apache.geode.internal.exception.InvalidExecutionContextException; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; +import org.apache.geode.internal.protocol.operations.OperationHandler; +import org.apache.geode.internal.protocol.protobuf.AuthenticationAPI; +import org.apache.geode.internal.protocol.protobuf.security.processors.AuthorizationSecurityProcessor; +import org.apache.geode.internal.protocol.security.Authenticator; +import org.apache.geode.internal.serialization.SerializationService; +import org.apache.geode.security.AuthenticationFailedException; + +public class AuthenticationRequestOperationHandler implements + OperationHandler<AuthenticationAPI.AuthenticationRequest, AuthenticationAPI.AuthenticationResponse> { + @Override + public Result<AuthenticationAPI.AuthenticationResponse,MessageExecutionContext> process( + SerializationService serializationService, AuthenticationAPI.AuthenticationRequest request, + MessageExecutionContext messageExecutionContext) throws InvalidExecutionContextException { + Authenticator authenticator = messageExecutionContext.getAuthenticator(); + Properties properties = new Properties(); + properties.putAll(request.getCredentialsMap()); + + try { + Object authenticationToken = authenticator.authenticate(properties); + MessageExecutionContext + newMessageExecutionContext = + new MessageExecutionContext(messageExecutionContext.getCache(), + messageExecutionContext.getAuthenticator(), messageExecutionContext.getAuthorizer(), + authenticationToken, messageExecutionContext.getStatistics(), + new AuthorizationSecurityProcessor()); + return Success + .of(AuthenticationAPI.AuthenticationResponse.newBuilder().setAuthenticated(true).build(), + newMessageExecutionContext); + } catch (AuthenticationFailedException e) { + return Success + .of(AuthenticationAPI.AuthenticationResponse.newBuilder().setAuthenticated(false) + .build(), messageExecutionContext); + } + } +} diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/InvalidConfigAuthenticator.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/InvalidConfigAuthenticator.java index e924bc6..409a075 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/InvalidConfigAuthenticator.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/InvalidConfigAuthenticator.java @@ -21,35 +21,22 @@ import java.io.OutputStream; import org.apache.geode.internal.protocol.protobuf.BasicTypes; import org.apache.geode.internal.protocol.protobuf.ClientProtocol; -import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode; +import org.apache.geode.internal.protocol.ProtocolErrorCode; import org.apache.logging.log4j.Logger; import org.apache.geode.internal.logging.LogService; import org.apache.geode.internal.protocol.security.Authenticator; import org.apache.geode.internal.security.SecurityService; +import org.apache.geode.security.AuthenticationFailedException; -public class InvalidConfigAuthenticator implements Authenticator { +public class InvalidConfigAuthenticator implements Authenticator<Object, Object> { private static final Logger logger = LogService.getLogger(InvalidConfigAuthenticator.class); - private final SecurityService securityService; - - public InvalidConfigAuthenticator(SecurityService securityService) { - this.securityService = securityService; - } @Override - public Object authenticate(InputStream inputStream, OutputStream outputStream) - throws IOException { + public Object authenticate(Object object) throws AuthenticationFailedException { logger.warn( "Attempting to authenticate incoming protobuf message using legacy security implementation. This is not supported. Failing authentication."); - - ClientProtocol.Message.newBuilder() - .setResponse(ClientProtocol.Response.newBuilder() - .setErrorResponse(ClientProtocol.ErrorResponse.newBuilder() - .setError(BasicTypes.Error.newBuilder() - .setErrorCode(ProtocolErrorCode.AUTHENTICATION_FAILED.codeValue).setMessage( - "Attempting to authenticate incoming protobuf message using legacy security implementation. This is not supported. Failing authentication.")))) - .build().writeDelimitedTo(outputStream); - - throw new IOException("Protobuf clients not supported with legacy security."); + throw new AuthenticationFailedException( + "Attempting to authenticate incoming protobuf message using legacy security implementation. This is not supported. Failing authentication."); } } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthenticator.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthenticator.java index 6d6a497..cdee506 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthenticator.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/ProtobufShiroAuthenticator.java @@ -14,7 +14,7 @@ */ package org.apache.geode.internal.protocol.protobuf.security; -import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.AUTHENTICATION_FAILED; +import static org.apache.geode.internal.protocol.ProtocolErrorCode.AUTHENTICATION_FAILED; import org.apache.geode.internal.protocol.protobuf.AuthenticationAPI; @@ -31,9 +31,7 @@ import java.util.Properties; import org.apache.shiro.subject.Subject; -public class ProtobufShiroAuthenticator implements Authenticator { - private static final String UNEXECPTED_REQUEST = "Expected to receive an authentication request"; - +public class ProtobufShiroAuthenticator implements Authenticator<Properties, Subject> { private final SecurityService securityService; public ProtobufShiroAuthenticator(SecurityService securityService) { @@ -41,52 +39,7 @@ public class ProtobufShiroAuthenticator implements Authenticator { } @Override - public Subject authenticate(InputStream inputStream, OutputStream outputStream) - throws IOException, AuthenticationFailedException { - ClientProtocol.Message message = ClientProtocol.Message.parseDelimitedFrom(inputStream); - - if (message.getRequest().getRequestAPICase() - .getNumber() != ClientProtocol.Request.SIMPLEAUTHENTICATIONREQUEST_FIELD_NUMBER) { - failAuth(outputStream); - } - - AuthenticationAPI.AuthenticationRequest authenticationRequest = - message.getRequest().getSimpleAuthenticationRequest(); - if (authenticationRequest == null) { - failAuth(outputStream); - } - - Properties properties = new Properties(); - properties.putAll(authenticationRequest.getCredentialsMap()); - - try { - // throws AuthenticationFailedException on failure. - Subject authToken = securityService.login(properties); - - sendAuthenticationResponse(outputStream, true); - return authToken; - } catch (AuthenticationFailedException ex) { - sendAuthenticationResponse(outputStream, false); - throw ex; - } - } - - private void sendAuthenticationResponse(OutputStream outputStream, boolean success) - throws IOException { - ClientProtocol.Message.newBuilder() - .setResponse(ClientProtocol.Response.newBuilder().setSimpleAuthenticationResponse( - AuthenticationAPI.AuthenticationResponse.newBuilder().setAuthenticated(success))) - .build().writeDelimitedTo(outputStream); - } - - private void failAuth(OutputStream outputStream) throws IOException { - ClientProtocol.Message.newBuilder() - .setResponse(ClientProtocol.Response.newBuilder() - .setErrorResponse(ClientProtocol.ErrorResponse.newBuilder() - .setError(BasicTypes.Error.newBuilder() - .setErrorCode(AUTHENTICATION_FAILED.codeValue).setMessage(UNEXECPTED_REQUEST)))) - .build().writeDelimitedTo(outputStream); - - throw new IOException(UNEXECPTED_REQUEST); + public Subject authenticate(Properties properties) throws AuthenticationFailedException { + return securityService.login(properties); } } diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/processors/AuthenticationSecurityProcessor.java similarity index 53% copy from geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java copy to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/processors/AuthenticationSecurityProcessor.java index 43b1efa..d164222 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/processors/AuthenticationSecurityProcessor.java @@ -12,16 +12,19 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package org.apache.geode.internal.protocol.protobuf; +package org.apache.geode.internal.protocol.protobuf.security.processors; -import org.apache.geode.cache.Cache; import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; -import org.apache.geode.internal.protocol.security.NoOpAuthorizer; -import org.apache.geode.internal.protocol.statistics.NoOpStatistics; +import org.apache.geode.internal.protocol.OperationContext; +import org.apache.geode.internal.protocol.protobuf.AuthenticationAPI; +import org.apache.geode.internal.protocol.protobuf.ClientProtocol; +import org.apache.geode.internal.protocol.security.SecurityProcessor; -public class ProtobufTestExecutionContext { - public static MessageExecutionContext getNoAuthExecutionContext(Cache cache) { - return new MessageExecutionContext(cache, new NoOpAuthorizer(), new Object(), - new NoOpStatistics()); +public class AuthenticationSecurityProcessor implements SecurityProcessor<ClientProtocol.Request> { + @Override + public boolean validateOperation(ClientProtocol.Request request, + MessageExecutionContext messageExecutionContext, OperationContext operationContext) { + Object fromRequest = operationContext.getFromRequest().apply(request); + return fromRequest instanceof AuthenticationAPI.AuthenticationRequest; } } diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/processors/AuthorizationSecurityProcessor.java similarity index 54% copy from geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java copy to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/processors/AuthorizationSecurityProcessor.java index 43b1efa..7664e8a 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/processors/AuthorizationSecurityProcessor.java @@ -12,16 +12,19 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package org.apache.geode.internal.protocol.protobuf; +package org.apache.geode.internal.protocol.protobuf.security.processors; -import org.apache.geode.cache.Cache; import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; -import org.apache.geode.internal.protocol.security.NoOpAuthorizer; -import org.apache.geode.internal.protocol.statistics.NoOpStatistics; +import org.apache.geode.internal.protocol.OperationContext; +import org.apache.geode.internal.protocol.protobuf.ClientProtocol; +import org.apache.geode.internal.protocol.security.SecurityProcessor; -public class ProtobufTestExecutionContext { - public static MessageExecutionContext getNoAuthExecutionContext(Cache cache) { - return new MessageExecutionContext(cache, new NoOpAuthorizer(), new Object(), - new NoOpStatistics()); +public class AuthorizationSecurityProcessor implements SecurityProcessor<ClientProtocol.Request> { + @Override + public boolean validateOperation(ClientProtocol.Request request, + MessageExecutionContext messageExecutionContext, OperationContext operationContext) { + return messageExecutionContext.getAuthorizer().authorize( + messageExecutionContext.getAuthenticationToken(), + operationContext.getAccessPermissionRequired()); } } diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/processors/NoAuthenticationSecurityProcessor.java similarity index 60% copy from geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java copy to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/processors/NoAuthenticationSecurityProcessor.java index 43b1efa..d603b1a 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/security/processors/NoAuthenticationSecurityProcessor.java @@ -12,16 +12,18 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package org.apache.geode.internal.protocol.protobuf; +package org.apache.geode.internal.protocol.protobuf.security.processors; -import org.apache.geode.cache.Cache; import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; -import org.apache.geode.internal.protocol.security.NoOpAuthorizer; -import org.apache.geode.internal.protocol.statistics.NoOpStatistics; +import org.apache.geode.internal.protocol.OperationContext; +import org.apache.geode.internal.protocol.protobuf.ClientProtocol; +import org.apache.geode.internal.protocol.security.SecurityProcessor; -public class ProtobufTestExecutionContext { - public static MessageExecutionContext getNoAuthExecutionContext(Cache cache) { - return new MessageExecutionContext(cache, new NoOpAuthorizer(), new Object(), - new NoOpStatistics()); +public class NoAuthenticationSecurityProcessor + implements SecurityProcessor<ClientProtocol.Request> { + @Override + public boolean validateOperation(ClientProtocol.Request request, + MessageExecutionContext messageExecutionContext, OperationContext operationContext) { + return true; } } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufResponseUtilities.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufResponseUtilities.java index 6819d8b..663c31e 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufResponseUtilities.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufResponseUtilities.java @@ -16,14 +16,12 @@ package org.apache.geode.internal.protocol.protobuf.utilities; import java.util.Set; -import org.apache.logging.log4j.Logger; - import org.apache.geode.annotations.Experimental; import org.apache.geode.cache.Region; import org.apache.geode.internal.protocol.protobuf.BasicTypes; import org.apache.geode.internal.protocol.protobuf.ClientProtocol; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode; +import org.apache.geode.internal.protocol.ProtocolErrorCode; /** diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufUtilities.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufUtilities.java index 320a10c..1053f64 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufUtilities.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/utilities/ProtobufUtilities.java @@ -21,7 +21,7 @@ import org.apache.geode.cache.Region; import org.apache.geode.cache.RegionAttributes; import org.apache.geode.internal.protocol.protobuf.BasicTypes; import org.apache.geode.internal.protocol.protobuf.ClientProtocol; -import org.apache.geode.internal.protocol.protobuf.EncodingTypeTranslator; +import org.apache.geode.internal.protocol.EncodingTypeTranslator; import org.apache.geode.internal.protocol.protobuf.ProtobufSerializationService; import org.apache.geode.internal.protocol.protobuf.RegionAPI; import org.apache.geode.internal.protocol.protobuf.utilities.exception.UnknownProtobufPrimitiveType; diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/registry/OperationContextRegistry.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/registry/OperationContextRegistry.java index dbf6259..e18a81b 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/registry/OperationContextRegistry.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/registry/OperationContextRegistry.java @@ -21,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.apache.geode.annotations.Experimental; import org.apache.geode.internal.protocol.protobuf.ClientProtocol; import org.apache.geode.internal.protocol.protobuf.ClientProtocol.Request.RequestAPICase; -import org.apache.geode.internal.protocol.protobuf.OperationContext; +import org.apache.geode.internal.protocol.OperationContext; import org.apache.geode.internal.protocol.protobuf.operations.GetAllRequestOperationHandler; import org.apache.geode.internal.protocol.protobuf.operations.GetAvailableServersOperationHandler; import org.apache.geode.internal.protocol.protobuf.operations.GetRegionNamesRequestOperationHandler; @@ -30,6 +30,7 @@ import org.apache.geode.internal.protocol.protobuf.operations.GetRequestOperatio import org.apache.geode.internal.protocol.protobuf.operations.PutAllRequestOperationHandler; import org.apache.geode.internal.protocol.protobuf.operations.PutRequestOperationHandler; import org.apache.geode.internal.protocol.protobuf.operations.RemoveRequestOperationHandler; +import org.apache.geode.internal.protocol.protobuf.operations.security.AuthenticationRequestOperationHandler; import org.apache.geode.security.ResourcePermission; @Experimental @@ -45,6 +46,13 @@ public class OperationContextRegistry { } private void addContexts() { + operationContexts.put(RequestAPICase.AUTHENTICATIONREQUEST, + new OperationContext<>(ClientProtocol.Request::getAuthenticationRequest, + new AuthenticationRequestOperationHandler(), + opsResp -> ClientProtocol.Response.newBuilder().setAuthenticationResponse(opsResp), + new ResourcePermission(ResourcePermission.Resource.DATA, + ResourcePermission.Operation.READ))); + operationContexts.put(RequestAPICase.GETREQUEST, new OperationContext<>(ClientProtocol.Request::getGetRequest, new GetRequestOperationHandler(), diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/AuthenticationLookupService.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/AuthenticationLookupService.java index f61a300..5d3f04d 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/AuthenticationLookupService.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/AuthenticationLookupService.java @@ -26,7 +26,7 @@ public class AuthenticationLookupService { } if (securityService.isPeerSecurityRequired() || securityService.isClientSecurityRequired()) { // Failing authentication...legacy security - return new InvalidConfigAuthenticator(securityService); + return new InvalidConfigAuthenticator(); } else { // Noop authenticator...no security return new NoOpAuthenticator(); diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/Authenticator.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/Authenticator.java index f4234cd..42dd22b 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/Authenticator.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/Authenticator.java @@ -14,13 +14,7 @@ */ package org.apache.geode.internal.protocol.security; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import org.apache.geode.internal.security.SecurityService; import org.apache.geode.security.AuthenticationFailedException; -import org.apache.geode.security.AuthenticationRequiredException; /** * Implementers of this interface do some message passing over a socket to authenticate a client, @@ -29,14 +23,12 @@ import org.apache.geode.security.AuthenticationRequiredException; * If authentication fails, an implementor may continue to wait for another valid authentication * exchange. */ -public interface Authenticator { +public interface Authenticator<SecurityProperties, AuthenticationToken> { /** - * - * @param inputStream to read auth messages from. - * @param outputStream to send messages to. + * @param securityProperties a generic object that is required for authentication dependent on + * implementation * @return authenticated principal - * @throws IOException if EOF or if invalid input is received. */ - Object authenticate(InputStream inputStream, OutputStream outputStream) - throws IOException, AuthenticationFailedException; + AuthenticationToken authenticate(SecurityProperties securityProperties) + throws AuthenticationFailedException; } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/NoOpAuthenticator.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/NoOpAuthenticator.java index d4f96e4..9cdeb6e 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/NoOpAuthenticator.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/NoOpAuthenticator.java @@ -19,16 +19,16 @@ import java.io.InputStream; import java.io.OutputStream; import org.apache.geode.internal.security.SecurityService; +import org.apache.geode.security.AuthenticationFailedException; /** * An implementation of {@link Authenticator} that doesn't use its parameters and always returns * true. */ -public class NoOpAuthenticator implements Authenticator { +public class NoOpAuthenticator implements Authenticator<Object, Object> { + @Override - public Object authenticate(InputStream inputStream, OutputStream outputStream) - throws IOException { - // this method needs to do nothing as it is a pass-through implementation + public Object authenticate(Object inputObject) throws AuthenticationFailedException { return new Object(); } } diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Result.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/SecurityProcessor.java similarity index 67% rename from geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Result.java rename to geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/SecurityProcessor.java index bada098..40d5e9e 100644 --- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/Result.java +++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/security/SecurityProcessor.java @@ -12,18 +12,12 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package org.apache.geode.internal.protocol.protobuf; +package org.apache.geode.internal.protocol.security; -import java.util.function.Function; +import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; +import org.apache.geode.internal.protocol.OperationContext; -import org.apache.geode.annotations.Experimental; - -@Experimental -public interface Result<SuccessType> { - <T> T map(Function<SuccessType, T> successFunction, - Function<ClientProtocol.ErrorResponse, T> errorFunction); - - SuccessType getMessage(); - - ClientProtocol.ErrorResponse getErrorMessage(); +public interface SecurityProcessor<RequestMessage> { + boolean validateOperation(RequestMessage request, MessageExecutionContext messageExecutionContext, + OperationContext operationContext); } diff --git a/geode-protobuf/src/main/proto/clientProtocol.proto b/geode-protobuf/src/main/proto/clientProtocol.proto index b4c0f56..4d8b94a 100644 --- a/geode-protobuf/src/main/proto/clientProtocol.proto +++ b/geode-protobuf/src/main/proto/clientProtocol.proto @@ -48,7 +48,7 @@ message Request { GetRegionNamesRequest getRegionNamesRequest = 43; GetRegionRequest getRegionRequest = 44; - AuthenticationRequest simpleAuthenticationRequest = 100; + AuthenticationRequest authenticationRequest = 100; } } @@ -67,7 +67,7 @@ message Response { GetRegionNamesResponse getRegionNamesResponse = 43; GetRegionResponse getRegionResponse = 44; - AuthenticationResponse simpleAuthenticationResponse = 100; + AuthenticationResponse authenticationResponse = 100; } } diff --git a/geode-protobuf/src/main/proto/handshake_API.proto b/geode-protobuf/src/main/proto/handshake_API.proto index 17f7d40..b11ae03 100644 --- a/geode-protobuf/src/main/proto/handshake_API.proto +++ b/geode-protobuf/src/main/proto/handshake_API.proto @@ -31,4 +31,9 @@ message HandshakeRequest { message HandshakeResponse { bool ok = 1; Error error = 2; // only set if not OK. +} + +message Semver{ + int32 major = 1; + int32 minor = 2; } \ No newline at end of file diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthenticationIntegrationTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthenticationIntegrationTest.java index adbe906..124abbb 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthenticationIntegrationTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthenticationIntegrationTest.java @@ -15,7 +15,7 @@ package org.apache.geode.internal.protocol; import static junit.framework.TestCase.fail; -import static org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode.AUTHENTICATION_FAILED; +import static org.apache.geode.internal.protocol.ProtocolErrorCode.AUTHENTICATION_FAILED; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -29,7 +29,6 @@ import java.net.Socket; import java.util.Properties; import java.util.concurrent.TimeUnit; -import org.apache.geode.internal.protocol.exception.InvalidProtocolMessageException; import org.awaitility.Awaitility; import org.junit.After; import org.junit.Before; @@ -204,7 +203,7 @@ public class AuthenticationIntegrationTest { ClientProtocol.Message authenticationRequest = ClientProtocol.Message.newBuilder() .setRequest(ClientProtocol.Request.newBuilder() - .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder() + .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder() .putCredentials(ResourceConstants.USER_NAME, TEST_USERNAME) .putCredentials(ResourceConstants.PASSWORD, TEST_PASSWORD))) .build(); @@ -232,7 +231,7 @@ public class AuthenticationIntegrationTest { ClientProtocol.Message authenticationRequest = ClientProtocol.Message.newBuilder() .setRequest(ClientProtocol.Request.newBuilder() - .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder())) + .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder())) .build(); authenticationRequest.writeDelimitedTo(outputStream); @@ -249,7 +248,7 @@ public class AuthenticationIntegrationTest { ClientProtocol.Message authenticationRequest = ClientProtocol.Message.newBuilder() .setRequest(ClientProtocol.Request.newBuilder() - .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder() + .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder() .putCredentials(ResourceConstants.USER_NAME, TEST_USERNAME) .putCredentials(ResourceConstants.PASSWORD, "wrong password"))) .build(); @@ -279,7 +278,7 @@ public class AuthenticationIntegrationTest { ClientProtocol.Message authenticationRequest = ClientProtocol.Message.newBuilder() .setRequest(ClientProtocol.Request.newBuilder() - .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder())) + .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder())) .build(); authenticationRequest.writeDelimitedTo(outputStream); @@ -298,7 +297,7 @@ public class AuthenticationIntegrationTest { ClientProtocol.Message authenticationRequest = ClientProtocol.Message.newBuilder() .setRequest(ClientProtocol.Request.newBuilder() - .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder())) + .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder())) .build(); authenticationRequest.writeDelimitedTo(outputStream); @@ -332,8 +331,8 @@ public class AuthenticationIntegrationTest { ClientProtocol.Message.parseDelimitedFrom(inputStream); assertEquals(ClientProtocol.Message.RESPONSE_FIELD_NUMBER, authenticationResponseMessage.getMessageTypeCase().getNumber()); - assertEquals(ClientProtocol.Response.SIMPLEAUTHENTICATIONRESPONSE_FIELD_NUMBER, + assertEquals(ClientProtocol.Response.AUTHENTICATIONRESPONSE_FIELD_NUMBER, authenticationResponseMessage.getResponse().getResponseAPICase().getNumber()); - return authenticationResponseMessage.getResponse().getSimpleAuthenticationResponse(); + return authenticationResponseMessage.getResponse().getAuthenticationResponse(); } } diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthorizationIntegrationTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthorizationIntegrationTest.java index b41b93c..109e10d 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthorizationIntegrationTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/AuthorizationIntegrationTest.java @@ -43,7 +43,6 @@ import org.apache.geode.internal.AvailablePortHelper; import org.apache.geode.internal.protocol.protobuf.AuthenticationAPI; import org.apache.geode.internal.protocol.protobuf.ClientProtocol; import org.apache.geode.internal.protocol.protobuf.ProtobufSerializationService; -import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode; import org.apache.geode.internal.protocol.protobuf.RegionAPI; import org.apache.geode.internal.protocol.protobuf.serializer.ProtobufProtocolSerializer; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities; @@ -116,7 +115,7 @@ public class AuthorizationIntegrationTest { when(mockSecurityManager.authorize(same(securityPrincipal), any())).thenReturn(false); ClientProtocol.Message authenticationRequest = ClientProtocol.Message.newBuilder() .setRequest(ClientProtocol.Request.newBuilder() - .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder() + .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder() .putCredentials(ResourceConstants.USER_NAME, TEST_USERNAME) .putCredentials(ResourceConstants.PASSWORD, TEST_PASSWORD))) .build(); @@ -125,10 +124,10 @@ public class AuthorizationIntegrationTest { ClientProtocol.Message responseMessage = ClientProtocol.Message.parseDelimitedFrom(inputStream); assertEquals(ClientProtocol.Message.RESPONSE_FIELD_NUMBER, responseMessage.getMessageTypeCase().getNumber()); - assertEquals(ClientProtocol.Response.SIMPLEAUTHENTICATIONRESPONSE_FIELD_NUMBER, + assertEquals(ClientProtocol.Response.AUTHENTICATIONRESPONSE_FIELD_NUMBER, responseMessage.getResponse().getResponseAPICase().getNumber()); AuthenticationAPI.AuthenticationResponse authenticationResponse = - responseMessage.getResponse().getSimpleAuthenticationResponse(); + responseMessage.getResponse().getAuthenticationResponse(); assertTrue(authenticationResponse.getAuthenticated()); } diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/LocatorConnectionDUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/LocatorConnectionDUnitTest.java index 01dac04..3d239b5 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/LocatorConnectionDUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/acceptance/LocatorConnectionDUnitTest.java @@ -37,11 +37,10 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem; import org.apache.geode.internal.cache.InternalCache; import org.apache.geode.internal.protocol.exception.InvalidProtocolMessageException; import org.apache.geode.internal.protocol.protobuf.ClientProtocol; -import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode; +import org.apache.geode.internal.protocol.ProtocolErrorCode; import org.apache.geode.internal.protocol.protobuf.ServerAPI; import org.apache.geode.internal.protocol.protobuf.serializer.ProtobufProtocolSerializer; import org.apache.geode.internal.protocol.protobuf.statistics.ProtobufClientStatisticsImpl; -import org.apache.geode.internal.protocol.statistics.ProtocolClientStatistics; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities; import org.apache.geode.test.dunit.DistributedTestUtils; diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeToSerializationTypeTranslatorJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeToSerializationTypeTranslatorJUnitTest.java index 883b0f6..0a67aff 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeToSerializationTypeTranslatorJUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/EncodingTypeToSerializationTypeTranslatorJUnitTest.java @@ -19,6 +19,7 @@ import static org.junit.Assert.assertSame; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.apache.geode.internal.protocol.EncodingTypeTranslator; import org.apache.geode.internal.serialization.SerializationType; import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException; import org.apache.geode.test.junit.categories.UnitTest; diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/HandshakerTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/HandshakerTest.java index 6eba760..10bfeaf 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/HandshakerTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/HandshakerTest.java @@ -23,18 +23,15 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.util.HashMap; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; -import org.apache.geode.cache.IncompatibleVersionException; +import org.apache.geode.internal.protocol.Handshaker; import org.apache.geode.internal.protocol.security.Authenticator; -import org.apache.geode.internal.protocol.security.Authorizer; import org.apache.geode.security.AuthenticationFailedException; -import org.apache.geode.security.AuthenticationRequiredException; import org.apache.geode.test.junit.categories.UnitTest; @Category(UnitTest.class) @@ -45,9 +42,9 @@ public class HandshakerTest { private static class AuthenticatorMock implements Authenticator { + @Override - public Object authenticate(InputStream inputStream, OutputStream outputStream) - throws IOException, AuthenticationFailedException { + public Object authenticate(Object o) throws AuthenticationFailedException { return null; } } @@ -67,8 +64,7 @@ public class HandshakerTest { @Test public void version1_0IsSupported() throws Exception { HandshakeAPI.HandshakeRequest handshakeRequest = HandshakeAPI.HandshakeRequest.newBuilder() - .setVersion(HandshakeAPI.Semver.newBuilder().setMajor(1).setMinor(1)) - .setAuthenticationMode(HandshakeAPI.AuthenticationMode.SIMPLE).build(); + .setVersion(HandshakeAPI.Semver.newBuilder().setMajor(1).setMinor(1)).build(); ByteArrayInputStream byteArrayInputStream = ProtobufTestUtilities.messageToByteArrayInputStream(handshakeRequest); @@ -85,7 +81,7 @@ public class HandshakerTest { public void version2NotSupported() throws Exception { HandshakeAPI.HandshakeRequest handshakeRequest = HandshakeAPI.HandshakeRequest.newBuilder() .setVersion(HandshakeAPI.Semver.newBuilder().setMajor(2).setMinor(0)) - .setAuthenticationMode(HandshakeAPI.AuthenticationMode.NONE).build(); + .build(); ByteArrayInputStream byteArrayInputStream = ProtobufTestUtilities.messageToByteArrayInputStream(handshakeRequest); @@ -99,7 +95,7 @@ public class HandshakerTest { public void bogusAuthenticationMode() throws Exception { HandshakeAPI.HandshakeRequest handshakeRequest = HandshakeAPI.HandshakeRequest.newBuilder() .setVersion(HandshakeAPI.Semver.newBuilder().setMajor(1).setMinor(0)) - .setAuthenticationModeValue(-1).build(); + .build(); ByteArrayInputStream byteArrayInputStream = ProtobufTestUtilities.messageToByteArrayInputStream(handshakeRequest); @@ -113,7 +109,7 @@ public class HandshakerTest { public void simpleIsSupported() throws Exception { HandshakeAPI.HandshakeRequest handshakeRequest = HandshakeAPI.HandshakeRequest.newBuilder() .setVersion(HandshakeAPI.Semver.newBuilder().setMajor(1).setMinor(0)) - .setAuthenticationMode(HandshakeAPI.AuthenticationMode.SIMPLE).build(); + .build(); ByteArrayInputStream byteArrayInputStream = ProtobufTestUtilities.messageToByteArrayInputStream(handshakeRequest); diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufShiroAuthenticatorJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufShiroAuthenticatorJUnitTest.java index 419d9fe..9b0ea9d 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufShiroAuthenticatorJUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufShiroAuthenticatorJUnitTest.java @@ -16,6 +16,7 @@ package org.apache.geode.internal.protocol.protobuf; import static junit.framework.TestCase.fail; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -52,7 +53,7 @@ public class ProtobufShiroAuthenticatorJUnitTest { public void setUp() throws IOException { ClientProtocol.Message basicAuthenticationRequest = ClientProtocol.Message.newBuilder() .setRequest(ClientProtocol.Request.newBuilder() - .setSimpleAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder() + .setAuthenticationRequest(AuthenticationAPI.AuthenticationRequest.newBuilder() .putCredentials(ResourceConstants.USER_NAME, TEST_USERNAME) .putCredentials(ResourceConstants.PASSWORD, TEST_PASSWORD))) .build(); @@ -75,12 +76,14 @@ public class ProtobufShiroAuthenticatorJUnitTest { @Test public void successfulAuthentication() throws IOException { - protobufShiroAuthenticator.authenticate(byteArrayInputStream, byteArrayOutputStream); - AuthenticationAPI.AuthenticationResponse authenticationResponse = - getSimpleAuthenticationResponse(byteArrayOutputStream); + Properties properties = new Properties(); + properties.setProperty(ResourceConstants.USER_NAME, TEST_USERNAME); + properties.setProperty(ResourceConstants.PASSWORD, TEST_PASSWORD); - assertTrue(authenticationResponse.getAuthenticated()); + Subject authenticate = protobufShiroAuthenticator.authenticate(properties); + + assertNotNull(authenticate); } @Test(expected = AuthenticationFailedException.class) @@ -88,7 +91,11 @@ public class ProtobufShiroAuthenticatorJUnitTest { when(mockSecurityService.login(expectedAuthProperties)) .thenThrow(new AuthenticationFailedException("BOOM!")); - protobufShiroAuthenticator.authenticate(byteArrayInputStream, byteArrayOutputStream); + Properties properties = new Properties(); + properties.setProperty(ResourceConstants.USER_NAME, TEST_USERNAME); + properties.setProperty(ResourceConstants.PASSWORD, TEST_PASSWORD); + + protobufShiroAuthenticator.authenticate(properties); } @Test @@ -97,18 +104,12 @@ public class ProtobufShiroAuthenticatorJUnitTest { when(mockSecurityService.isClientSecurityRequired()).thenReturn(false); when(mockSecurityService.isPeerSecurityRequired()).thenReturn(false); - protobufShiroAuthenticator.authenticate(byteArrayInputStream, byteArrayOutputStream); + Properties properties = new Properties(); + properties.setProperty(ResourceConstants.USER_NAME, TEST_USERNAME); + properties.setProperty(ResourceConstants.PASSWORD, TEST_PASSWORD); - AuthenticationAPI.AuthenticationResponse authenticationResponse = - getSimpleAuthenticationResponse(byteArrayOutputStream); - - assertTrue(authenticationResponse.getAuthenticated()); - } + Subject authenticate = protobufShiroAuthenticator.authenticate(properties); - private AuthenticationAPI.AuthenticationResponse getSimpleAuthenticationResponse( - ByteArrayOutputStream outputStream) throws IOException { - ByteArrayInputStream responseStream = new ByteArrayInputStream(outputStream.toByteArray()); - return ClientProtocol.Message.parseDelimitedFrom(responseStream).getResponse() - .getSimpleAuthenticationResponse(); + assertNotNull(authenticate); } } diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessorTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessorTest.java index a9578ff..e4be893 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessorTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufStreamProcessorTest.java @@ -16,9 +16,12 @@ package org.apache.geode.internal.protocol.protobuf; import org.apache.geode.internal.cache.InternalCache; import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; +import org.apache.geode.internal.protocol.protobuf.security.processors.NoAuthenticationSecurityProcessor; +import org.apache.geode.internal.protocol.security.NoOpAuthenticator; import org.apache.geode.internal.protocol.security.NoOpAuthorizer; import org.apache.geode.internal.protocol.statistics.NoOpStatistics; import org.apache.geode.test.junit.categories.UnitTest; + import org.junit.Test; import org.junit.experimental.categories.Category; @@ -40,6 +43,7 @@ public class ProtobufStreamProcessorTest { ProtobufStreamProcessor protobufStreamProcessor = new ProtobufStreamProcessor(); InternalCache mockInternalCache = mock(InternalCache.class); protobufStreamProcessor.receiveMessage(inputStream, outputStream, new MessageExecutionContext( - mockInternalCache, new NoOpAuthorizer(), new Object(), new NoOpStatistics())); + mockInternalCache, new NoOpAuthenticator(), new NoOpAuthorizer(), new Object(), + new NoOpStatistics(), new NoAuthenticationSecurityProcessor())); } } diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java index 43b1efa..1781865 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestExecutionContext.java @@ -16,12 +16,14 @@ package org.apache.geode.internal.protocol.protobuf; import org.apache.geode.cache.Cache; import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; +import org.apache.geode.internal.protocol.protobuf.security.processors.NoAuthenticationSecurityProcessor; +import org.apache.geode.internal.protocol.security.NoOpAuthenticator; import org.apache.geode.internal.protocol.security.NoOpAuthorizer; import org.apache.geode.internal.protocol.statistics.NoOpStatistics; public class ProtobufTestExecutionContext { public static MessageExecutionContext getNoAuthExecutionContext(Cache cache) { - return new MessageExecutionContext(cache, new NoOpAuthorizer(), new Object(), - new NoOpStatistics()); + return new MessageExecutionContext(cache, new NoOpAuthenticator(), new NoOpAuthorizer(), new Object(), + new NoOpStatistics(), new NoAuthenticationSecurityProcessor()); } } diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestUtilities.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestUtilities.java index 827599f..9a767fd 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestUtilities.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/ProtobufTestUtilities.java @@ -55,6 +55,6 @@ public class ProtobufTestUtilities { HandshakeAPI.AuthenticationMode authenticationMode) { return HandshakeAPI.HandshakeRequest.newBuilder() .setVersion(HandshakeAPI.Semver.newBuilder().setMajor(1).setMinor(0)) - .setAuthenticationMode(authenticationMode).build(); + .build(); } } diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandlerJUnitTest.java index 86ad5af..40b8a7c 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandlerJUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAllRequestOperationHandlerJUnitTest.java @@ -33,12 +33,13 @@ import org.junit.experimental.categories.Category; import org.apache.geode.cache.CacheLoaderException; import org.apache.geode.cache.Region; +import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.exception.InvalidExecutionContextException; import org.apache.geode.internal.protocol.protobuf.BasicTypes; import org.apache.geode.internal.protocol.protobuf.ProtobufTestExecutionContext; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities; import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException; @@ -76,7 +77,7 @@ public class GetAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni @Test public void processReturnsExpectedValuesForValidKeys() throws Exception { - Result<RegionAPI.GetAllResponse> result = + Result<RegionAPI.GetAllResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, generateTestRequest(true, false), ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); @@ -97,7 +98,7 @@ public class GetAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni @Test public void processReturnsNoEntriesForNoKeysRequested() throws UnsupportedEncodingTypeException, CodecNotRegisteredForTypeException, InvalidExecutionContextException { - Result<RegionAPI.GetAllResponse> result = + Result<RegionAPI.GetAllResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, generateTestRequest(false, false), ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); @@ -115,7 +116,7 @@ public class GetAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni NO_VALUE_PRESENT_FOR_THIS_KEY)); RegionAPI.GetAllRequest getAllRequest = ProtobufRequestUtilities.createGetAllRequest(TEST_REGION, testKeys); - Result<RegionAPI.GetAllResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.GetAllResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, getAllRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); assertTrue(result instanceof Success); @@ -130,7 +131,7 @@ public class GetAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni @Test public void multipleKeysWhereOneThrows() throws UnsupportedEncodingTypeException, CodecNotRegisteredForTypeException, InvalidExecutionContextException { - Result<RegionAPI.GetAllResponse> result = + Result<RegionAPI.GetAllResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, generateTestRequest(true, true), ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandlerJUnitTest.java index 393fab8..418191d 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandlerJUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetAvailableServersOperationHandlerJUnitTest.java @@ -21,10 +21,10 @@ import org.apache.geode.distributed.internal.ServerLocator; import org.apache.geode.internal.exception.InvalidExecutionContextException; import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.protocol.protobuf.BasicTypes; -import org.apache.geode.internal.protocol.protobuf.Result; +import org.apache.geode.internal.protocol.Result; import org.apache.geode.internal.protocol.protobuf.ServerAPI; import org.apache.geode.internal.protocol.protobuf.ServerAPI.GetAvailableServersResponse; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.statistics.NoOpStatistics; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities; import org.apache.geode.test.junit.categories.UnitTest; diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandlerJUnitTest.java index 3c0c913..ba42f63 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandlerJUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionNamesRequestOperationHandlerJUnitTest.java @@ -29,10 +29,11 @@ import org.junit.experimental.categories.Category; import org.apache.geode.cache.Cache; import org.apache.geode.cache.Region; +import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.exception.InvalidExecutionContextException; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities; import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException; import org.apache.geode.internal.serialization.registry.exception.CodecNotRegisteredForTypeException; @@ -63,7 +64,7 @@ public class GetRegionNamesRequestOperationHandlerJUnitTest extends OperationHan @Test public void processReturnsCacheRegions() throws UnsupportedEncodingTypeException, CodecNotRegisteredForTypeException, InvalidExecutionContextException { - Result<RegionAPI.GetRegionNamesResponse> result = operationHandler.process( + Result<RegionAPI.GetRegionNamesResponse,MessageExecutionContext> result = operationHandler.process( serializationServiceStub, ProtobufRequestUtilities.createGetRegionNamesRequest(), getNoAuthExecutionContext(cacheStub)); Assert.assertTrue(result instanceof Success); @@ -87,7 +88,7 @@ public class GetRegionNamesRequestOperationHandlerJUnitTest extends OperationHan Cache emptyCache = mock(Cache.class);; when(emptyCache.rootRegions()) .thenReturn(Collections.unmodifiableSet(new HashSet<Region<String, String>>())); - Result<RegionAPI.GetRegionNamesResponse> result = operationHandler.process( + Result<RegionAPI.GetRegionNamesResponse,MessageExecutionContext> result = operationHandler.process( serializationServiceStub, ProtobufRequestUtilities.createGetRegionNamesRequest(), getNoAuthExecutionContext(emptyCache)); Assert.assertTrue(result instanceof Success); diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandlerJUnitTest.java index 2e7979c..f2aebb5 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandlerJUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRegionRequestOperationHandlerJUnitTest.java @@ -31,13 +31,14 @@ import org.apache.geode.cache.DataPolicy; import org.apache.geode.cache.Region; import org.apache.geode.cache.RegionAttributes; import org.apache.geode.cache.Scope; +import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.protocol.MessageUtil; import org.apache.geode.internal.protocol.protobuf.BasicTypes; import org.apache.geode.internal.protocol.protobuf.ClientProtocol; -import org.apache.geode.internal.protocol.protobuf.Failure; -import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode; +import org.apache.geode.internal.protocol.Failure; +import org.apache.geode.internal.protocol.ProtocolErrorCode; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Result; +import org.apache.geode.internal.protocol.Result; import org.apache.geode.test.junit.categories.UnitTest; @Category(UnitTest.class) @@ -69,7 +70,7 @@ public class GetRegionRequestOperationHandlerJUnitTest extends OperationHandlerJ when(regionAttributesStub.getScope()).thenReturn(Scope.DISTRIBUTED_ACK); - Result<RegionAPI.GetRegionResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.GetRegionResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, MessageUtil.makeGetRegionRequest(TEST_REGION1), getNoAuthExecutionContext(cacheStub)); RegionAPI.GetRegionResponse response = result.getMessage(); BasicTypes.Region region = response.getRegion(); @@ -92,7 +93,7 @@ public class GetRegionRequestOperationHandlerJUnitTest extends OperationHandlerJ when(emptyCache.rootRegions()) .thenReturn(Collections.unmodifiableSet(new HashSet<Region<String, String>>())); String unknownRegionName = "UNKNOWN_REGION"; - Result<RegionAPI.GetRegionResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.GetRegionResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, MessageUtil.makeGetRegionRequest(unknownRegionName), getNoAuthExecutionContext(emptyCache)); Assert.assertTrue(result instanceof Failure); Assert.assertEquals(ProtocolErrorCode.REGION_NOT_FOUND.codeValue, diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandlerJUnitTest.java index 8064475..f3e80bf 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandlerJUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/GetRequestOperationHandlerJUnitTest.java @@ -25,13 +25,14 @@ import org.junit.Test; import org.junit.experimental.categories.Category; import org.apache.geode.cache.Region; +import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.protocol.protobuf.BasicTypes; -import org.apache.geode.internal.protocol.protobuf.Failure; +import org.apache.geode.internal.protocol.Failure; import org.apache.geode.internal.protocol.protobuf.ProtobufTestExecutionContext; -import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode; +import org.apache.geode.internal.protocol.ProtocolErrorCode; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities; import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException; @@ -66,7 +67,7 @@ public class GetRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe @Test public void processReturnsTheEncodedValueFromTheRegion() throws Exception { RegionAPI.GetRequest getRequest = generateTestRequest(false, false, false); - Result<RegionAPI.GetResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.GetResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, getRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); Assert.assertTrue(result instanceof Success); @@ -79,7 +80,7 @@ public class GetRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe @Test public void processReturnsUnsucessfulResponseForInvalidRegion() throws Exception { RegionAPI.GetRequest getRequest = generateTestRequest(true, false, false); - Result<RegionAPI.GetResponse> response = operationHandler.process(serializationServiceStub, + Result<RegionAPI.GetResponse,MessageExecutionContext> response = operationHandler.process(serializationServiceStub, getRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); Assert.assertTrue(response instanceof Failure); @@ -90,7 +91,7 @@ public class GetRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe @Test public void processReturnsKeyNotFoundWhenKeyIsNotFound() throws Exception { RegionAPI.GetRequest getRequest = generateTestRequest(false, true, false); - Result<RegionAPI.GetResponse> response = operationHandler.process(serializationServiceStub, + Result<RegionAPI.GetResponse,MessageExecutionContext> response = operationHandler.process(serializationServiceStub, getRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); Assert.assertTrue(response instanceof Success); @@ -99,7 +100,7 @@ public class GetRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe @Test public void processReturnsLookupFailureWhenKeyFoundWithNoValue() throws Exception { RegionAPI.GetRequest getRequest = generateTestRequest(false, false, true); - Result<RegionAPI.GetResponse> response = operationHandler.process(serializationServiceStub, + Result<RegionAPI.GetResponse,MessageExecutionContext> response = operationHandler.process(serializationServiceStub, getRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); Assert.assertTrue(response instanceof Success); @@ -118,7 +119,7 @@ public class GetRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe .setCustomEncodedValue(customEncodedValueBuilder).build(); RegionAPI.GetRequest getRequest = ProtobufRequestUtilities.createGetRequest(TEST_REGION, encodedKey).getGetRequest(); - Result<RegionAPI.GetResponse> response = operationHandler.process(serializationServiceStub, + Result<RegionAPI.GetResponse,MessageExecutionContext> response = operationHandler.process(serializationServiceStub, getRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); Assert.assertTrue(response instanceof Failure); diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandlerJUnitTest.java index 9e1d7a5..9e3e406 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandlerJUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutAllRequestOperationHandlerJUnitTest.java @@ -31,10 +31,11 @@ import org.junit.Test; import org.junit.experimental.categories.Category; import org.apache.geode.cache.Region; +import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.protocol.protobuf.BasicTypes; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities; import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException; @@ -70,7 +71,7 @@ public class PutAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni public void processInsertsMultipleValidEntriesInCache() throws Exception { PutAllRequestOperationHandler operationHandler = new PutAllRequestOperationHandler(); - Result<RegionAPI.PutAllResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.PutAllResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, generateTestRequest(false, true), getNoAuthExecutionContext(cacheStub)); Assert.assertTrue(result instanceof Success); @@ -84,7 +85,7 @@ public class PutAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni public void processWithInvalidEntrySucceedsAndReturnsFailedKey() throws Exception { PutAllRequestOperationHandler operationHandler = new PutAllRequestOperationHandler(); - Result<RegionAPI.PutAllResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.PutAllResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, generateTestRequest(true, true), getNoAuthExecutionContext(cacheStub)); assertTrue(result instanceof Success); @@ -103,7 +104,7 @@ public class PutAllRequestOperationHandlerJUnitTest extends OperationHandlerJUni public void processWithNoEntriesPasses() throws Exception { PutAllRequestOperationHandler operationHandler = new PutAllRequestOperationHandler(); - Result<RegionAPI.PutAllResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.PutAllResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, generateTestRequest(false, false), getNoAuthExecutionContext(cacheStub)); assertTrue(result instanceof Success); diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandlerJUnitTest.java index b90982c..4dec3f0 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandlerJUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/PutRequestOperationHandlerJUnitTest.java @@ -29,13 +29,14 @@ import org.junit.Test; import org.junit.experimental.categories.Category; import org.apache.geode.cache.Region; +import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.protocol.protobuf.BasicTypes; -import org.apache.geode.internal.protocol.protobuf.Failure; +import org.apache.geode.internal.protocol.Failure; import org.apache.geode.internal.protocol.protobuf.ProtobufTestExecutionContext; -import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode; +import org.apache.geode.internal.protocol.ProtocolErrorCode; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities; import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException; @@ -62,7 +63,7 @@ public class PutRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe @Test public void test_puttingTheEncodedEntryIntoRegion() throws Exception { PutRequestOperationHandler operationHandler = new PutRequestOperationHandler(); - Result<RegionAPI.PutResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.PutResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, generateTestRequest(), ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); assertTrue(result instanceof Success); @@ -91,7 +92,7 @@ public class PutRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe BasicTypes.Entry testEntry = ProtobufUtilities.createEntry(encodedKey, testValue); RegionAPI.PutRequest putRequest = ProtobufRequestUtilities.createPutRequest(TEST_REGION, testEntry).getPutRequest(); - Result<RegionAPI.PutResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.PutResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, putRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); assertTrue(result instanceof Failure); @@ -103,7 +104,7 @@ public class PutRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe public void test_RegionNotFound() throws Exception { when(cacheStub.getRegion(TEST_REGION)).thenReturn(null); PutRequestOperationHandler operationHandler = new PutRequestOperationHandler(); - Result<RegionAPI.PutResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.PutResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, generateTestRequest(), ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); assertTrue(result instanceof Failure); @@ -116,7 +117,7 @@ public class PutRequestOperationHandlerJUnitTest extends OperationHandlerJUnitTe when(regionMock.put(any(), any())).thenThrow(ClassCastException.class); PutRequestOperationHandler operationHandler = new PutRequestOperationHandler(); - Result<RegionAPI.PutResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.PutResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, generateTestRequest(), ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); assertTrue(result instanceof Failure); diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandlerJUnitTest.java index 5bfad23..e5166d0 100644 --- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandlerJUnitTest.java +++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/operations/RemoveRequestOperationHandlerJUnitTest.java @@ -27,14 +27,15 @@ import org.junit.Test; import org.junit.experimental.categories.Category; import org.apache.geode.cache.Region; +import org.apache.geode.internal.cache.tier.sockets.MessageExecutionContext; import org.apache.geode.internal.protocol.protobuf.BasicTypes; import org.apache.geode.internal.protocol.protobuf.ClientProtocol; -import org.apache.geode.internal.protocol.protobuf.Failure; +import org.apache.geode.internal.protocol.Failure; import org.apache.geode.internal.protocol.protobuf.ProtobufTestExecutionContext; -import org.apache.geode.internal.protocol.protobuf.ProtocolErrorCode; +import org.apache.geode.internal.protocol.ProtocolErrorCode; import org.apache.geode.internal.protocol.protobuf.RegionAPI; -import org.apache.geode.internal.protocol.protobuf.Result; -import org.apache.geode.internal.protocol.protobuf.Success; +import org.apache.geode.internal.protocol.Result; +import org.apache.geode.internal.protocol.Success; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufRequestUtilities; import org.apache.geode.internal.protocol.protobuf.utilities.ProtobufUtilities; import org.apache.geode.internal.serialization.exception.UnsupportedEncodingTypeException; @@ -67,7 +68,7 @@ public class RemoveRequestOperationHandlerJUnitTest extends OperationHandlerJUni @Test public void processValidKeyRemovesTheEntryAndReturnSuccess() throws Exception { RegionAPI.RemoveRequest removeRequest = generateTestRequest(false, false).getRemoveRequest(); - Result<RegionAPI.RemoveResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.RemoveResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, removeRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); assertTrue(result instanceof Success); @@ -77,7 +78,7 @@ public class RemoveRequestOperationHandlerJUnitTest extends OperationHandlerJUni @Test public void processReturnsUnsucessfulResponseForInvalidRegion() throws Exception { RegionAPI.RemoveRequest removeRequest = generateTestRequest(true, false).getRemoveRequest(); - Result<RegionAPI.RemoveResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.RemoveResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, removeRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); assertTrue(result instanceof Failure); @@ -88,7 +89,7 @@ public class RemoveRequestOperationHandlerJUnitTest extends OperationHandlerJUni @Test public void processReturnsSuccessWhenKeyIsNotFound() throws Exception { RegionAPI.RemoveRequest removeRequest = generateTestRequest(false, true).getRemoveRequest(); - Result<RegionAPI.RemoveResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.RemoveResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, removeRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); assertTrue(result instanceof Success); @@ -108,7 +109,7 @@ public class RemoveRequestOperationHandlerJUnitTest extends OperationHandlerJUni RegionAPI.RemoveRequest removeRequest = ProtobufRequestUtilities.createRemoveRequest(TEST_REGION, encodedKey).getRemoveRequest();; - Result<RegionAPI.RemoveResponse> result = operationHandler.process(serializationServiceStub, + Result<RegionAPI.RemoveResponse,MessageExecutionContext> result = operationHandler.process(serializationServiceStub, removeRequest, ProtobufTestExecutionContext.getNoAuthExecutionContext(cacheStub)); assertTrue(result instanceof Failure); -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
