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

markusthoemmes pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk.git


The following commit(s) were added to refs/heads/master by this push:
     new b00a3be  Enable running basic system tests without requiring 
whisk.properties. (#4004)
b00a3be is described below

commit b00a3be2b62743a74773c86fb3b14fa7184fce58
Author: Chetan Mehrotra <chet...@apache.org>
AuthorDate: Tue Sep 18 18:31:19 2018 +0530

    Enable running basic system tests without requiring whisk.properties. 
(#4004)
---
 .travis.yml                                        |  7 ++-
 tests/README.md                                    | 14 +++++
 tests/build.gradle                                 | 23 ++++++--
 tests/src/test/scala/common/WhiskProperties.java   | 62 +++++++++++++++++++---
 tests/src/test/scala/common/WskOperations.scala    |  2 +-
 .../scala/system/basic/WskConductorTests.scala     |  3 +-
 tests/src/test/scala/system/rest/RestUtil.scala    | 32 +++++++----
 7 files changed, 114 insertions(+), 29 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index b9056cd..5f06f6c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -68,11 +68,11 @@ jobs:
     - script:
         - ./tools/travis/runUnitTests.sh
         - ./tools/travis/checkAndUploadLogs.sh unit db
-      env: DESCRIPTION="Unit Tests"
+      name: "Unit Tests"
     - script:
        - ./tools/travis/runSystemTests.sh
        - ./tools/travis/checkAndUploadLogs.sh system
-      env: DESCRIPTION="System Tests"
+      name: "System Tests"
     - script:
         - ./tests/performance/preparation/deploy.sh
         - TERM=dumb ./tests/performance/wrk_tests/latency.sh 
"https://172.17.0.1:10001"; "$(cat ansible/files/auth.guest)" 2m
@@ -82,5 +82,4 @@ jobs:
         - OPENWHISK_HOST="172.17.0.1" API_KEY="$(cat 
ansible/files/auth.guest)" CONNECTIONS="100" REQUESTS_PER_SEC="1" ./gradlew 
gatlingRun-BlockingInvokeOneActionSimulation
         # The following configuration does not make much sense. But we do not 
have enough users. But it's good to verify, that the test is still working.
         - OPENWHISK_HOST="172.17.0.1" USERS="1" REQUESTS_PER_SEC="1" ./gradlew 
gatlingRun-ColdBlockingInvokeSimulation
-      env:
-        - DESCRIPTION="Execute wrk-performance test suite."
+      name: "Performance Tests"
diff --git a/tests/README.md b/tests/README.md
index e2c37eb..a6fbb91 100644
--- a/tests/README.md
+++ b/tests/README.md
@@ -34,3 +34,17 @@ To just run the unit tests
 
     $ ansible-playbook -i ansible/environments/local ansible/properties.yml
     $ ./gradlew tests:testUnit
+
+## Running System Basic Tests
+
+To just run system basic test against an existing running setup you can pass 
on the server details and auth via system properties
+
+    $ ./gradlew :tests:testSystemBasic 
-Dwhisk.auth="23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP"
 -Dwhisk.server=https://localhost -Dopenwhisk.home=`pwd`
+
+Here
+
+* `whisk.auth` - Auth key for a test user account. For a setup using default 
credentials it can be `guest` key. (env `WHISK_AUTH`)
+* `whisk.server` - Edge Host Url of the OpenWhisk setup. (env `WHISK_SERVER`)
+* `opnewhisk.home` - Base directory of your OpenWhisk source tree. (env 
`OPENWHISK_HOME`)
+
+If required you can relax the SSL check by passing `-Dwhisk.ssl.relax=true`. 
All these properties can also be provided via env variables.
diff --git a/tests/build.gradle b/tests/build.gradle
index 15dd333..4be83ca 100644
--- a/tests/build.gradle
+++ b/tests/build.gradle
@@ -83,6 +83,11 @@ ext.testSets = [
     ],
     "LEAN" : [
         "excludes" : leanExcludes
+    ],
+    "REQUIRE_SYSTEM_BASIC" : [
+        "includes" : [
+            "system/basic/**"
+        ]
     ]
 ]
 
@@ -117,6 +122,11 @@ task testLean(type: Test) {
     include getPattern(testSetName, "includes")
 }
 
+task testSystemBasic(type: Test) {
+    exclude getPattern("REQUIRE_SYSTEM_BASIC", "excludes")
+    include getPattern("REQUIRE_SYSTEM_BASIC", "includes")
+}
+
 task testUnit(type: Test) {
     systemProperty("whisk.spi.ArtifactStoreProvider", 
"whisk.core.database.memory.MemoryArtifactStoreProvider")
     exclude getPattern("REQUIRE_ONLY_DB", "excludes")
@@ -177,11 +187,14 @@ task deleteKeystore(type: Delete) {
 }
 task createKeystore(dependsOn: deleteKeystore) {
     doLast {
-        Properties props = new Properties()
-        props.load(new FileInputStream(file('../whisk.properties')))
-        keystorePath.parentFile.mkdirs()
-        def cmd = ['keytool', '-import', '-alias', 'Whisk', '-noprompt', 
'-trustcacerts', '-file', file(props['whisk.ssl.cert']), '-keystore', 
keystorePath, '-storepass', 'openwhisk']
-        cmd.execute().waitForProcessOutput(System.out, System.err)
+        def propsFile = file('../whisk.properties')
+        if (propsFile.exists()) {
+            Properties props = new Properties()
+            props.load(new FileInputStream(propsFile))
+            keystorePath.parentFile.mkdirs()
+            def cmd = ['keytool', '-import', '-alias', 'Whisk', '-noprompt', 
'-trustcacerts', '-file', file(props['whisk.ssl.cert']), '-keystore', 
keystorePath, '-storepass', 'openwhisk']
+            cmd.execute().waitForProcessOutput(System.out, System.err)
+        }
     }
 }
 
diff --git a/tests/src/test/scala/common/WhiskProperties.java 
b/tests/src/test/scala/common/WhiskProperties.java
index 4971797..c1a316c 100644
--- a/tests/src/test/scala/common/WhiskProperties.java
+++ b/tests/src/test/scala/common/WhiskProperties.java
@@ -32,6 +32,16 @@ import static org.junit.Assert.assertTrue;
 public class WhiskProperties {
 
     /**
+     * System property key which refers to OpenWhisk Edge Host url
+     */
+    private static final String WHISK_SERVER = "whisk.server";
+
+    /**
+     * System property key which refers to authentication key to be used for 
testing
+     */
+    private static final String WHISK_AUTH = "whisk.auth";
+
+    /**
      * The name of the properties file.
      */
     protected static final String WHISK_PROPS_FILE = "whisk.properties";
@@ -87,14 +97,19 @@ public class WhiskProperties {
 
         assertTrue("could not determine openwhisk home", wskdir != null);
 
-        File wskpropsFile = new File(wskdir, WHISK_PROPS_FILE);
-        assertTrue(String.format("'%s' does not exists but required", 
wskpropsFile), wskpropsFile.exists());
+        if (isWhiskPropertiesRequired()) {
+            File wskpropsFile = new File(wskdir, WHISK_PROPS_FILE);
+            assertTrue(String.format("'%s' does not exists but required", 
wskpropsFile), wskpropsFile.exists());
 
-        // loads properties from file
-        whiskProperties = loadProperties(wskpropsFile);
+            // loads properties from file
+            whiskProperties = loadProperties(wskpropsFile);
 
-        // set whisk home from read properties
-        whiskHome = whiskProperties.getProperty("openwhisk.home");
+            // set whisk home from read properties
+            whiskHome = whiskProperties.getProperty("openwhisk.home");
+        } else {
+            whiskProperties = new Properties();
+            whiskHome = wskdir;
+        }
 
         System.out.format("test router? %s\n", testRouter);
     }
@@ -157,6 +172,10 @@ public class WhiskProperties {
         return getInvokerHosts().length;
     }
 
+    public static boolean isSSLCheckRelaxed() {
+        return Boolean.valueOf(getPropFromSystemOrEnv("whisk.ssl.relax"));
+    }
+
     public static String getSslCertificateChallenge() {
         return whiskProperties.getProperty("whisk.ssl.challenge");
     }
@@ -166,6 +185,10 @@ public class WhiskProperties {
      * host.
      */
     public static String getEdgeHost() {
+        String server = getPropFromSystemOrEnv(WHISK_SERVER);
+        if (server != null) {
+            return server;
+        }
         return testRouter ? getRouterHost() : 
whiskProperties.getProperty("edge.host");
     }
 
@@ -285,6 +308,17 @@ public class WhiskProperties {
     }
 
     /**
+     * Returns auth key to be used for testing
+     */
+    public static String getAuthKeyForTesting() {
+        String authKey = getPropFromSystemOrEnv(WHISK_AUTH);
+        if (authKey == null) {
+            authKey = readAuthKey(getAuthFileForTesting());
+        }
+        return authKey;
+    }
+
+    /**
      * @return the path to a file holding the VCAP_SERVICES used during junit
      *         testing
      */
@@ -358,4 +392,20 @@ public class WhiskProperties {
         }
         return props;
     }
+
+    private static boolean isWhiskPropertiesRequired() {
+        return getPropFromSystemOrEnv(WHISK_SERVER) == null;
+    }
+
+    private static String getPropFromSystemOrEnv(String key) {
+        String value = System.getProperty(key);
+        if (value == null) {
+            value = System.getenv(toEnvName(key));
+        }
+        return value;
+    }
+
+    private static String toEnvName(String p) {
+        return p.replace('.', '_').toUpperCase();
+    }
 }
diff --git a/tests/src/test/scala/common/WskOperations.scala 
b/tests/src/test/scala/common/WskOperations.scala
index a36745c..bd089d0 100644
--- a/tests/src/test/scala/common/WskOperations.scala
+++ b/tests/src/test/scala/common/WskOperations.scala
@@ -32,7 +32,7 @@ import whisk.core.entity.ByteSize
 import scala.util.Try
 
 case class WskProps(
-  authKey: String = 
WhiskProperties.readAuthKey(WhiskProperties.getAuthFileForTesting),
+  authKey: String = WhiskProperties.getAuthKeyForTesting,
   cert: String =
     
WhiskProperties.getFileRelativeToWhiskHome("ansible/roles/nginx/files/openwhisk-client-cert.pem").getAbsolutePath,
   key: String =
diff --git a/tests/src/test/scala/system/basic/WskConductorTests.scala 
b/tests/src/test/scala/system/basic/WskConductorTests.scala
index f708b4f..0c8d318 100644
--- a/tests/src/test/scala/system/basic/WskConductorTests.scala
+++ b/tests/src/test/scala/system/basic/WskConductorTests.scala
@@ -41,8 +41,7 @@ class WskConductorTests extends TestHelpers with 
WskTestHelpers with JsHelpers w
   val invalid = "invalid#Action"
   val missing = "missingAction"
 
-  val whiskConfig = new WhiskConfig(Map(WhiskConfig.actionSequenceMaxLimit -> 
null))
-  assert(whiskConfig.isValid)
+  val whiskConfig = new WhiskConfig(Map(WhiskConfig.actionSequenceMaxLimit -> 
"50"))
   val limit = whiskConfig.actionSequenceLimit.toInt
 
   behavior of "Whisk conductor actions"
diff --git a/tests/src/test/scala/system/rest/RestUtil.scala 
b/tests/src/test/scala/system/rest/RestUtil.scala
index b844039..a33814c 100644
--- a/tests/src/test/scala/system/rest/RestUtil.scala
+++ b/tests/src/test/scala/system/rest/RestUtil.scala
@@ -17,12 +17,12 @@
 
 package system.rest
 
-import scala.util.Try
+import akka.http.scaladsl.model.Uri
 
+import scala.util.Try
 import com.jayway.restassured.RestAssured
 import com.jayway.restassured.config.RestAssuredConfig
 import com.jayway.restassured.config.SSLConfig
-
 import common.WhiskProperties
 import spray.json._
 
@@ -31,16 +31,18 @@ import spray.json._
  */
 trait RestUtil {
 
-  private val skipKeyStore = false // set this to true for convenient local 
testing
+  private val skipKeyStore = WhiskProperties.isSSLCheckRelaxed
   private val trustStorePassword = WhiskProperties.getSslCertificateChallenge
 
   // force RestAssured to allow all hosts in SSL certificates
-  protected val sslconfig = {
-    new RestAssuredConfig().sslConfig(if (!skipKeyStore) {
-      new SSLConfig().keystore("keystore", 
trustStorePassword).allowAllHostnames()
+  val sslconfig = {
+    val inner = new SSLConfig().allowAllHostnames()
+    val config = if (!skipKeyStore && trustStorePassword != null) {
+      inner.keystore("keystore", trustStorePassword)
     } else {
-      new SSLConfig().relaxedHTTPSValidation().allowAllHostnames()
-    })
+      inner.relaxedHTTPSValidation()
+    }
+    new RestAssuredConfig().sslConfig(config)
   }
 
   /**
@@ -54,9 +56,17 @@ trait RestUtil {
    * @return the URL and port for the whisk service using the main router or 
the edge router ip address
    */
   def getServiceURL(): String = {
-    val apiPort = WhiskProperties.getEdgeHostApiPort()
-    val protocol = if (apiPort == 443) "https" else "http"
-    protocol + "://" + WhiskProperties.getEdgeHost() + ":" + apiPort
+    val host = WhiskProperties.getEdgeHost
+    val uri = Uri(host)
+    //Ensure that port is explicitly include in the returned URL
+    val absolute = if (uri.isAbsolute) {
+      uri.withPort(uri.effectivePort)
+    } else {
+      val apiPort = WhiskProperties.getEdgeHostApiPort
+      val protocol = if (apiPort == 443) "https" else "http"
+      Uri.from(scheme = protocol, host = host, port = apiPort)
+    }
+    absolute.toString()
   }
 
   /**

Reply via email to