geode-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hiteshkhame...@apache.org
Subject [21/50] [abbrv] geode git commit: GEODE-1965 Create backward-compatibility unit test framework
Date Tue, 14 Feb 2017 19:31:54 GMT
http://git-wip-us.apache.org/repos/asf/geode/blob/be8db8b7/geode-core/src/test/java/org/apache/geode/test/dunit/standalone/VersionManager.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/test/dunit/standalone/VersionManager.java
b/geode-core/src/test/java/org/apache/geode/test/dunit/standalone/VersionManager.java
new file mode 100755
index 0000000..7bda948
--- /dev/null
+++ b/geode-core/src/test/java/org/apache/geode/test/dunit/standalone/VersionManager.java
@@ -0,0 +1,170 @@
+/*
+ * 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.test.dunit.standalone;
+
+import org.apache.geode.test.dunit.Host;
+import org.apache.geode.test.dunit.VM;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * VersionManager loads the class-paths for all of the releases of Geode configured for
+ * backward-compatibility testing in the geode-core build.gradle file.
+ * <p>
+ * Tests may use these versions in launching VMs to run older clients or servers.
+ * 
+ * @see Host#getVM(String, int)
+ */
+public class VersionManager {
+  public static final String CURRENT_VERSION = "000";
+
+  private static VersionManager instance;
+
+  protected static void init() {
+    instance = new VersionManager();
+    instance.findVersions();
+  }
+
+  public static VersionManager getInstance() {
+    if (instance == null) {
+      init();
+    }
+    return instance;
+  }
+
+  /**
+   * classPaths for old versions loaded from a file generated by Gradle
+   */
+  private Map<String, String> classPaths = new HashMap<>();
+
+  private List<String> testVersions = new ArrayList<String>(10);
+
+  private String oldestVersion;
+
+  /**
+   * Test to see if a version string is known to VersionManager. Versions are either CURRENT_VERSION
+   * or one of the versions returned by VersionManager#getVersions()
+   */
+  public boolean isValidVersion(String version) {
+    return version.equals(CURRENT_VERSION) || classPaths.containsKey(version);
+  }
+
+  /**
+   * Returns true if the version is equal to the CURRENT_VERSION constant
+   */
+  public static boolean isCurrentVersion(String version) {
+    return version.equals(CURRENT_VERSION);
+  }
+
+  /**
+   * Returns the classPath for the given version, or null if the version is not valid. Use
+   * CURRENT_VERSION for the version in development.
+   */
+  public String getClasspath(String version) {
+    return classPaths.get(version);
+  }
+
+  /**
+   * Returns a list of older versions available for testing
+   */
+  public List<String> getVersions() {
+    return Collections.unmodifiableList(testVersions);
+  }
+
+  public List<String> getVersionsWithoutCurrent() {
+    List<String> result = new ArrayList<>(testVersions);
+    result.remove(CURRENT_VERSION);
+    return result;
+  }
+
+  /**
+   * returns the oldest version defined in the geodeOldVersionClasspaths.txt file
+   */
+  public String getOldestVersion() {
+    return oldestVersion;
+  }
+
+  private void findVersions() {
+    // this file is created by the gradle task createClasspathsPropertiesFile
+    File propFile = new File("../../../geode-old-versions/build/geodeOldVersionClasspaths.txt");
+    if (!propFile.exists()) {
+      // running under an IDE
+      propFile = new File("../geode-old-versions/build/geodeOldVersionClasspaths.txt");
+    }
+    String oldver = "ZZZ";
+    if (propFile.exists()) {
+      System.out.println("found geodeOldVersionClasspaths.txt - loading properties");
+      Map<String, String> dunitProperties = loadProperties(propFile);
+      for (Map.Entry<String, String> entry : dunitProperties.entrySet()) {
+        String version = entry.getKey();
+        if (version.startsWith("test") && version.length() >= "test".length())
{
+          if (version.equals("test")) {
+            version = CURRENT_VERSION;
+          } else {
+            version = version.substring("test".length());
+            if (version.compareTo(oldver) < 0) {
+              oldver = version;
+            }
+          }
+          classPaths.put(version, entry.getValue());
+          testVersions.add(version);
+        }
+      }
+      if (oldver.equals("ZZZ")) {
+        oldestVersion = CURRENT_VERSION;
+      } else {
+        oldestVersion = oldver;
+      }
+    } else {
+      System.out.println(
+          "WARNING: could not find geodeTestClasspaths.txt - tests will use current version");
+    }
+  }
+
+  /**
+   * Loads properties from a file, returning a Map object. Note: this method cannot use
+   * Properties.load() because that method interprets back-slashes as escape characters,
causing
+   * class-paths on Windows machines to be garbled.
+   */
+  private Map<String, String> loadProperties(File propFile) {
+    Map<String, String> dunitProperties = new HashMap<>();
+    try {
+      String propertyLine;
+      FileReader reader = new FileReader(propFile);
+      BufferedReader breader = new BufferedReader(reader);
+      while ((propertyLine = breader.readLine()) != null) {
+        propertyLine = propertyLine.trim();
+        if (propertyLine.length() != 0 || !propertyLine.startsWith("#")) {
+          String[] split = propertyLine.split("=");
+          dunitProperties.put(split[0], split[1]);
+        }
+      }
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+    return dunitProperties;
+  }
+
+
+
+}


Mime
View raw message