You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2017/11/20 21:43:47 UTC

[geode] branch develop updated: commit dade94b3b5a3a3b2178a62e31edab27ccca40aa8 Merge: 526bcfc 73be2d9 Author: Bruce Schuchardt Date: Mon Nov 20 11:39:19 2017 -0800

This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new bdc8251  commit dade94b3b5a3a3b2178a62e31edab27ccca40aa8 Merge: 526bcfc 73be2d9 Author: Bruce Schuchardt <bs...@pivotal.io> Date:   Mon Nov 20 11:39:19 2017 -0800
bdc8251 is described below

commit bdc8251135a7dccaa3c1f4bb29a2e15f5629c1cb
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Mon Nov 20 11:41:57 2017 -0800

    commit dade94b3b5a3a3b2178a62e31edab27ccca40aa8
    Merge: 526bcfc 73be2d9
    Author: Bruce Schuchardt <bs...@pivotal.io>
    Date:   Mon Nov 20 11:39:19 2017 -0800
    
        GEODE-3793: Refactor version validation into testable class.
    
        Merge branch 'feature/GEODE-3793' of https://github.com/PivotalSarge/geode into PivotalSarge-feature/GEODE-3793
---
 .../HandshakeRequestOperationHandler.java          |  9 ++--
 .../protobuf/v1/operations/VersionValidator.java   | 43 ++++++++++++++++
 .../HandshakeRequestOperationHandlerJUnitTest.java |  4 +-
 .../v1/operations/VersionValidatorJUnitTest.java   | 59 ++++++++++++++++++++++
 4 files changed, 108 insertions(+), 7 deletions(-)

diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/HandshakeRequestOperationHandler.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/HandshakeRequestOperationHandler.java
index 9fd480b..1521fc0 100644
--- a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/HandshakeRequestOperationHandler.java
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/HandshakeRequestOperationHandler.java
@@ -34,6 +34,7 @@ import org.apache.geode.internal.protocol.state.exception.ConnectionStateExcepti
 public class HandshakeRequestOperationHandler implements
     OperationHandler<ConnectionAPI.HandshakeRequest, ConnectionAPI.HandshakeResponse, ClientProtocol.ErrorResponse> {
   private static final Logger logger = LogManager.getLogger();
+  private final VersionValidator validator = new VersionValidator();
 
   @Override
   public Result<ConnectionAPI.HandshakeResponse, ClientProtocol.ErrorResponse> process(
@@ -47,11 +48,9 @@ public class HandshakeRequestOperationHandler implements
       return Failure.of(ProtobufResponseUtilities.makeErrorResponse(e));
     }
 
-    boolean handshakeSucceeded = false;
-    // Require an exact match with our version of the protobuf code for this implementation
-    if (request.getMajorVersion() == ConnectionAPI.MajorVersions.CURRENT_MAJOR_VERSION_VALUE
-        && request.getMinorVersion() == ConnectionAPI.MinorVersions.CURRENT_MINOR_VERSION_VALUE) {
-      handshakeSucceeded = true;
+    final boolean handshakeSucceeded =
+        validator.isValid(request.getMajorVersion(), request.getMinorVersion());
+    if (handshakeSucceeded) {
       ConnectionStateProcessor nextStateProcessor = stateProcessor.handshakeSucceeded();
       messageExecutionContext.setConnectionStateProcessor(nextStateProcessor);
     }
diff --git a/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/VersionValidator.java b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/VersionValidator.java
new file mode 100644
index 0000000..86eea86
--- /dev/null
+++ b/geode-protobuf/src/main/java/org/apache/geode/internal/protocol/protobuf/v1/operations/VersionValidator.java
@@ -0,0 +1,43 @@
+/*
+ * 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.v1.operations;
+
+import org.apache.geode.internal.protocol.protobuf.v1.ConnectionAPI;
+
+public class VersionValidator {
+  private int majorVersion;
+  private int minorVersion;
+
+  public VersionValidator() {
+    this(ConnectionAPI.MajorVersions.CURRENT_MAJOR_VERSION_VALUE,
+        ConnectionAPI.MinorVersions.CURRENT_MINOR_VERSION_VALUE);
+  }
+
+  VersionValidator(int majorVersion, int minorVersion) {
+    this.majorVersion = majorVersion;
+    this.minorVersion = minorVersion;
+  }
+
+  public boolean isValid(int majorVersion, int minorVersion) {
+    if (majorVersion != ConnectionAPI.MajorVersions.INVALID_MAJOR_VERSION_VALUE
+        && majorVersion == this.majorVersion) {
+      if (minorVersion != ConnectionAPI.MinorVersions.INVALID_MINOR_VERSION_VALUE
+          && minorVersion <= this.minorVersion) {
+        return true;
+      }
+    }
+    return false;
+  }
+}
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/operations/HandshakeRequestOperationHandlerJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/operations/HandshakeRequestOperationHandlerJUnitTest.java
index 8b7416f..0641e5d 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/operations/HandshakeRequestOperationHandlerJUnitTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/operations/HandshakeRequestOperationHandlerJUnitTest.java
@@ -167,8 +167,8 @@ public class HandshakeRequestOperationHandlerJUnitTest {
         errorMessage.getError().getErrorCode());
   }
 
-  private ConnectionAPI.HandshakeRequest generateHandshakeRequest(int minorVersion,
-      int majorVersion) {
+  private ConnectionAPI.HandshakeRequest generateHandshakeRequest(int majorVersion,
+      int minorVersion) {
     return ConnectionAPI.HandshakeRequest.newBuilder().setMajorVersion(majorVersion)
         .setMinorVersion(minorVersion).build();
   }
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/operations/VersionValidatorJUnitTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/operations/VersionValidatorJUnitTest.java
new file mode 100644
index 0000000..b59d154
--- /dev/null
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/protocol/protobuf/v1/operations/VersionValidatorJUnitTest.java
@@ -0,0 +1,59 @@
+/*
+ * 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.v1.operations;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import org.apache.geode.internal.protocol.protobuf.v1.ConnectionAPI;
+import org.apache.geode.test.junit.categories.UnitTest;
+
+@Category(UnitTest.class)
+public class VersionValidatorJUnitTest {
+  private static final int MAJOR_VERSION = 3;
+  private static final int MINOR_VERSION = 3;
+  private static final VersionValidator validator =
+      new VersionValidator(MAJOR_VERSION, MINOR_VERSION);
+
+  @Test
+  public void testInvalidVersions() throws Exception {
+    assertFalse(
+        validator.isValid(MAJOR_VERSION, ConnectionAPI.MinorVersions.INVALID_MINOR_VERSION_VALUE));
+    assertFalse(
+        validator.isValid(ConnectionAPI.MajorVersions.INVALID_MAJOR_VERSION_VALUE, MINOR_VERSION));
+    assertFalse(validator.isValid(ConnectionAPI.MajorVersions.INVALID_MAJOR_VERSION_VALUE,
+        ConnectionAPI.MinorVersions.INVALID_MINOR_VERSION_VALUE));
+  }
+
+  @Test
+  public void testCurrentVersions() throws Exception {
+    assertTrue(validator.isValid(MAJOR_VERSION, MINOR_VERSION));
+  }
+
+  @Test
+  public void testPreviousMajorVersions() throws Exception {
+    assertFalse(validator.isValid(MAJOR_VERSION - 1, MINOR_VERSION));
+    assertFalse(validator.isValid(MAJOR_VERSION - 2, MINOR_VERSION));
+  }
+
+  @Test
+  public void testPreviousMinorVersions() throws Exception {
+    assertTrue(validator.isValid(MAJOR_VERSION, MINOR_VERSION - 1));
+    assertTrue(validator.isValid(MAJOR_VERSION, MINOR_VERSION - 2));
+  }
+}

-- 
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <co...@geode.apache.org>'].