You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by du...@apache.org on 2018/03/12 01:40:29 UTC
[incubator-openwhisk-package-cloudant] branch master updated: fix
failing test and other test cleanup (#160)
This is an automated email from the ASF dual-hosted git repository.
dubeejw pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-package-cloudant.git
The following commit(s) were added to refs/heads/master by this push:
new 901c474 fix failing test and other test cleanup (#160)
901c474 is described below
commit 901c4744a164debf1d9b71417f7c3c85f8c40267
Author: Jason Peterson <ja...@us.ibm.com>
AuthorDate: Sun Mar 11 21:40:27 2018 -0400
fix failing test and other test cleanup (#160)
---
.../system/health/CloudantHealthFeedTests.scala | 8 +-
.../packages/CloudantAccountActionsTests.scala | 20 +-
.../system/packages/CloudantBindingTests.scala | 4 +-
.../packages/CloudantDatabaseActionsTests.scala | 2 +-
.../scala/system/packages/CloudantFeedTests.scala | 54 +++--
.../system/packages/CloudantFeedWebTests.scala | 2 +-
.../packages/CloudantMultiWorkersTests.scala | 41 ++--
.../packages/CloudantTriggerPersistencyTest.scala | 100 ----------
.../redundancy/CloudantRedundancyTests.scala | 220 ---------------------
9 files changed, 70 insertions(+), 381 deletions(-)
diff --git a/tests/src/test/scala/system/health/CloudantHealthFeedTests.scala b/tests/src/test/scala/system/health/CloudantHealthFeedTests.scala
index bb342d4..4c9e0b7 100644
--- a/tests/src/test/scala/system/health/CloudantHealthFeedTests.scala
+++ b/tests/src/test/scala/system/health/CloudantHealthFeedTests.scala
@@ -64,8 +64,8 @@ class CloudantHealthFeedTests
(wp, assetHelper) =>
implicit val wskprops = wp // shadow global props and make implicit
val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
- val ruleName = s"dummyAlarmsRule-${System.currentTimeMillis}"
- val actionName = s"dummyAlarmsAction-${System.currentTimeMillis}"
+ val ruleName = s"dummyCloudantRule-${System.currentTimeMillis}"
+ val actionName = s"dummyCloudantAction-${System.currentTimeMillis}"
val packageName = "dummyCloudantPackage"
val feed = "changes"
@@ -134,8 +134,8 @@ class CloudantHealthFeedTests
(wp, assetHelper) =>
implicit val wskprops = wp // shadow global props and make implicit
val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
- val ruleName = s"dummyAlarmsRule-${System.currentTimeMillis}"
- val actionName = s"dummyAlarmsAction-${System.currentTimeMillis}"
+ val ruleName = s"dummyCloudantRule-${System.currentTimeMillis}"
+ val actionName = s"dummyCloudantAction-${System.currentTimeMillis}"
val packageName = "dummyCloudantPackage"
val feed = "changes"
diff --git a/tests/src/test/scala/system/packages/CloudantAccountActionsTests.scala b/tests/src/test/scala/system/packages/CloudantAccountActionsTests.scala
index 3dee996..343de72 100644
--- a/tests/src/test/scala/system/packages/CloudantAccountActionsTests.scala
+++ b/tests/src/test/scala/system/packages/CloudantAccountActionsTests.scala
@@ -62,7 +62,7 @@ class CloudantAccountActionsTests extends FlatSpec
//create database
println("Invoking the create-database action.")
- withActivation(wsk.activation, wsk.action.invoke(s"${packageName}/create-database",
+ withActivation(wsk.activation, wsk.action.invoke(s"$packageName/create-database",
Map("dbname" -> dbName.toJson))) {
activation =>
activation.response.success shouldBe true
@@ -95,7 +95,7 @@ class CloudantAccountActionsTests extends FlatSpec
//create database
println("Invoking the create-database action.")
- withActivation(wsk.activation, wsk.action.invoke(s"${packageName}/create-database")) {
+ withActivation(wsk.activation, wsk.action.invoke(s"$packageName/create-database")) {
activation =>
activation.response.success shouldBe false
val result = activation.response.result.get
@@ -125,7 +125,7 @@ class CloudantAccountActionsTests extends FlatSpec
}
println("Invoking the read-database action.")
- withActivation(wsk.activation, wsk.action.invoke(s"${packageName}/read-database",
+ withActivation(wsk.activation, wsk.action.invoke(s"$packageName/read-database",
Map("dbname" -> credential.dbname.toJson))) {
activation =>
activation.response.success shouldBe true
@@ -157,7 +157,7 @@ class CloudantAccountActionsTests extends FlatSpec
}
println("Invoking the read-database action.")
- withActivation(wsk.activation, wsk.action.invoke(s"${packageName}/read-database",
+ withActivation(wsk.activation, wsk.action.invoke(s"$packageName/read-database",
Map("dbname" -> "doesNotExistDB".toJson))) {
activation =>
activation.response.success shouldBe false
@@ -188,14 +188,14 @@ class CloudantAccountActionsTests extends FlatSpec
}
println("Invoking the delete-database action.")
- withActivation(wsk.activation, wsk.action.invoke(s"${packageName}/delete-database",
+ withActivation(wsk.activation, wsk.action.invoke(s"$packageName/delete-database",
Map("dbname" -> credential.dbname.toJson))) {
activation =>
activation.response.success shouldBe true
}
val response = CloudantUtil.readTestDatabase(credential)
- response.get("error").getAsString() shouldBe "not_found"
- response.get("reason").getAsString() shouldBe "Database does not exist."
+ response.get("error").getAsString shouldBe "not_found"
+ response.get("reason").getAsString shouldBe "Database does not exist."
}
finally {
CloudantUtil.unsetUp(credential)
@@ -224,7 +224,7 @@ class CloudantAccountActionsTests extends FlatSpec
}
println("Invoking the delete-database action.")
- withActivation(wsk.activation, wsk.action.invoke(s"${packageName}/delete-database",
+ withActivation(wsk.activation, wsk.action.invoke(s"$packageName/delete-database",
Map("dbname" -> credential.dbname.toJson))) {
activation =>
activation.response.success shouldBe false
@@ -259,7 +259,7 @@ class CloudantAccountActionsTests extends FlatSpec
}
println("Invoking the list-all-databases action.")
- withActivation(wsk.activation, wsk.action.invoke(s"${packageName}/list-all-databases")) {
+ withActivation(wsk.activation, wsk.action.invoke(s"$packageName/list-all-databases")) {
activation =>
activation.response.success shouldBe true
val result = activation.response.result.get
@@ -299,7 +299,7 @@ class CloudantAccountActionsTests extends FlatSpec
}
println("Invoking the list-all-databases action.")
- withActivation(wsk.activation, wsk.action.invoke(s"${packageName}/list-all-databases")) {
+ withActivation(wsk.activation, wsk.action.invoke(s"$packageName/list-all-databases")) {
activation =>
activation.response.success shouldBe false
val result = activation.response.result.get
diff --git a/tests/src/test/scala/system/packages/CloudantBindingTests.scala b/tests/src/test/scala/system/packages/CloudantBindingTests.scala
index 6110cfe..c619a09 100644
--- a/tests/src/test/scala/system/packages/CloudantBindingTests.scala
+++ b/tests/src/test/scala/system/packages/CloudantBindingTests.scala
@@ -61,7 +61,7 @@ class CloudantBindingTests extends FlatSpec
}
println("Invoking the document-create action.")
- withActivation(wsk.activation, wsk.action.invoke(s"${packageName}/create-document",
+ withActivation(wsk.activation, wsk.action.invoke(s"$packageName/create-document",
Map(
"dbname" -> myCloudantCreds.dbname.toJson,
"doc" -> JsObject("message" -> "I used the url parameter.".toJson)))) {
@@ -100,7 +100,7 @@ class CloudantBindingTests extends FlatSpec
}
println("Invoking the document-create action.")
- withActivation(wsk.activation, wsk.action.invoke(s"${packageName}/create-document",
+ withActivation(wsk.activation, wsk.action.invoke(s"$packageName/create-document",
Map(
"dbname" -> myCloudantCreds.dbname.toJson,
"doc" -> JsObject("message" -> "This time I didn't use the URL param.".toJson)))) {
diff --git a/tests/src/test/scala/system/packages/CloudantDatabaseActionsTests.scala b/tests/src/test/scala/system/packages/CloudantDatabaseActionsTests.scala
index 145250f..3bcbd4e 100644
--- a/tests/src/test/scala/system/packages/CloudantDatabaseActionsTests.scala
+++ b/tests/src/test/scala/system/packages/CloudantDatabaseActionsTests.scala
@@ -490,7 +490,7 @@ class CloudantDatabaseActionsTests extends FlatSpec
response.get("ok").getAsString shouldBe "true"
println("Invoking the delete-document action.")
- withActivation(wsk.activation, wsk.action.invoke(s"${packageName}/delete-document",
+ withActivation(wsk.activation, wsk.action.invoke(s"$packageName/delete-document",
Map("docrev" -> response.get("rev").getAsString.toJson))) {
activation =>
activation.response.success shouldBe false
diff --git a/tests/src/test/scala/system/packages/CloudantFeedTests.scala b/tests/src/test/scala/system/packages/CloudantFeedTests.scala
index e0be2db..987291b 100644
--- a/tests/src/test/scala/system/packages/CloudantFeedTests.scala
+++ b/tests/src/test/scala/system/packages/CloudantFeedTests.scala
@@ -62,7 +62,7 @@ class CloudantFeedTests
}
// create whisk stuff
- var feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
+ val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
(trigger, name) =>
trigger.create(name, feed = Some(s"$packageName/$feed"), parameters = Map(
"username" -> myCloudantCreds.user.toJson,
@@ -93,7 +93,7 @@ class CloudantFeedTests
}
// create whisk stuff
- var feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
+ val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
(trigger, name) =>
trigger.create(name, feed = Some(s"$packageName/$feed"), parameters = Map(
"username" -> myCloudantCreds.user.toJson,
@@ -124,7 +124,7 @@ class CloudantFeedTests
}
// create whisk stuff
- var feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
+ val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
(trigger, name) =>
trigger.create(name, feed = Some(s"$packageName/$feed"), parameters = Map(
"username" -> myCloudantCreds.user.toJson,
@@ -155,7 +155,7 @@ class CloudantFeedTests
}
// create whisk stuff
- var feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
+ val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
(trigger, name) =>
trigger.create(name, feed = Some(s"$packageName/$feed"), parameters = Map(
"password" -> myCloudantCreds.password.toJson,
@@ -204,8 +204,8 @@ class CloudantFeedTests
(wp, assetHelper) =>
implicit val wskprops = wp // shadow global props and make implicit
val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
- val ruleName = s"dummyAlarmsRule-${System.currentTimeMillis}"
- val actionName = s"dummyAlarmsAction-${System.currentTimeMillis}"
+ val ruleName = s"dummyCloudantRule-${System.currentTimeMillis}"
+ val actionName = s"dummyCloudantAction-${System.currentTimeMillis}"
val packageName = "dummyCloudantPackage"
val feed = "changes"
@@ -227,7 +227,7 @@ class CloudantFeedTests
}
println("Creating cloudant trigger feed.")
- val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
+ assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
(trigger, name) =>
trigger.create(name, feed = Some(s"$packageName/$feed"), parameters = Map(
"username" -> myCloudantCreds.user.toJson,
@@ -245,7 +245,7 @@ class CloudantFeedTests
// Create test docs in cloudant and assert that document was inserted successfully
println("Creating a test doc-1 in the cloudant")
val response1 = CloudantUtil.createDocument(myCloudantCreds, "{\"test\":\"test_doc_1\"}")
- response1.get("ok").getAsString() should be("true")
+ response1.get("ok").getAsString should be("true")
println("Checking for activations")
val activations = wsk.activation.pollFor(N = 1, Some(triggerName), retries = 30).length
@@ -254,7 +254,7 @@ class CloudantFeedTests
println("Creating a test doc-2 in the cloudant")
val response2 = CloudantUtil.createDocument(myCloudantCreds, "{\"test\":\"test_doc_2\"}")
- response2.get("ok").getAsString() should be("true")
+ response2.get("ok").getAsString should be("true")
println("No activations should be created for test_doc_2 since trigger is disabled")
val newactivations = wsk.activation.pollFor(N = 2, Some(triggerName)).length
@@ -270,8 +270,8 @@ class CloudantFeedTests
(wp, assetHelper) =>
implicit val wskprops = wp // shadow global props and make implicit
val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
- val ruleName = s"dummyAlarmsRule-${System.currentTimeMillis}"
- val actionName = s"dummyAlarmsAction-${System.currentTimeMillis}"
+ val ruleName = s"dummyCloudantRule-${System.currentTimeMillis}"
+ val actionName = s"dummyCloudantAction-${System.currentTimeMillis}"
val packageName = "dummyCloudantPackage"
val feed = "changes"
@@ -298,7 +298,7 @@ class CloudantFeedTests
getResponse.get("ok").getAsString shouldBe "true"
println("Creating cloudant trigger feed.")
- val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
+ assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
(trigger, name) =>
trigger.create(name, feed = Some(s"$packageName/$feed"), parameters = Map(
"username" -> myCloudantCreds.user.toJson,
@@ -317,7 +317,7 @@ class CloudantFeedTests
// Create test docs in cloudant and assert that document was inserted successfully
println("Creating a test doc-1 in the cloudant")
val response1 = CloudantUtil.createDocument(myCloudantCreds, "{\"kind\":\"fruit\", \"type\":\"apple\"}")
- response1.get("ok").getAsString() should be("true")
+ response1.get("ok").getAsString should be("true")
println("Checking for activations")
val activations = wsk.activation.pollFor(N = 1, Some(triggerName), retries = 30).length
@@ -326,7 +326,7 @@ class CloudantFeedTests
println("Creating a test doc-2 in the cloudant")
val response2 = CloudantUtil.createDocument(myCloudantCreds, "{\"kind\":\"dairy\",\"type\":\"butter\"}")
- response2.get("ok").getAsString() should be("true")
+ response2.get("ok").getAsString should be("true")
println("checking for new activations (not expected since it should be filtered out)")
val noNewActivations = wsk.activation.pollFor(N = 2, Some(triggerName)).length
@@ -335,7 +335,7 @@ class CloudantFeedTests
println("Creating a test doc-3 in the cloudant")
val response3 = CloudantUtil.createDocument(myCloudantCreds, "{\"kind\":\"debatable\", \"type\":\"tomato\"}")
- response3.get("ok").getAsString() should be("true")
+ response3.get("ok").getAsString should be("true")
println("Checking for new activations (should now have 2)")
val newActivations = wsk.activation.pollFor(N = 3, Some(triggerName), retries = 30).length
@@ -349,8 +349,6 @@ class CloudantFeedTests
}
it should "not return fields in configuration that are not passed in during trigger create" in withAssetCleaner(wskprops) {
- val currentTime = s"${System.currentTimeMillis}"
-
(wp, assetHelper) =>
implicit val wskProps = wp
val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
@@ -360,7 +358,7 @@ class CloudantFeedTests
try {
CloudantUtil.setUp(myCloudantCreds)
- // the package alarms should be there
+ // the package cloudant should be there
val packageGetResult = wsk.pkg.get("/whisk.system/cloudant")
println("fetched package cloudant")
packageGetResult.stdout should include("ok")
@@ -422,8 +420,6 @@ class CloudantFeedTests
}
it should "reject trigger update without passing in any updatable parameters" in withAssetCleaner(wskprops) {
- val currentTime = s"${System.currentTimeMillis}"
-
(wp, assetHelper) =>
implicit val wskProps = wp
val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
@@ -433,7 +429,7 @@ class CloudantFeedTests
try {
CloudantUtil.setUp(myCloudantCreds)
- // the package alarms should be there
+ // the package cloudant should be there
val packageGetResult = wsk.pkg.get("/whisk.system/cloudant")
println("fetched package cloudant")
packageGetResult.stdout should include("ok")
@@ -477,8 +473,6 @@ class CloudantFeedTests
}
it should "reject trigger update when query_params is passed in and no filter is defined" in withAssetCleaner(wskprops) {
- val currentTime = s"${System.currentTimeMillis}"
-
(wp, assetHelper) =>
implicit val wskProps = wp
val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
@@ -488,7 +482,7 @@ class CloudantFeedTests
try {
CloudantUtil.setUp(myCloudantCreds)
- // the package alarms should be there
+ // the package cloudant should be there
val packageGetResult = wsk.pkg.get("/whisk.system/cloudant")
println("fetched package cloudant")
packageGetResult.stdout should include("ok")
@@ -536,8 +530,8 @@ class CloudantFeedTests
(wp, assetHelper) =>
implicit val wskProps = wp // shadow global props and make implicit
val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
- val ruleName = s"dummyAlarmsRule-${System.currentTimeMillis}"
- val actionName = s"dummyAlarmsAction-${System.currentTimeMillis}"
+ val ruleName = s"dummyCloudantRule-${System.currentTimeMillis}"
+ val actionName = s"dummyCloudantAction-${System.currentTimeMillis}"
val packageName = "dummyCloudantPackage"
val feed = "changes"
@@ -564,7 +558,7 @@ class CloudantFeedTests
getResponse.get("ok").getAsString shouldBe "true"
println("Creating cloudant trigger feed.")
- val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
+ assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
(trigger, name) =>
trigger.create(name, feed = Some(s"$packageName/$feed"), parameters = Map(
"username" -> myCloudantCreds.user.toJson,
@@ -583,7 +577,7 @@ class CloudantFeedTests
// Create test docs in cloudant and assert that document was inserted successfully
println("Creating a test doc-1 in the cloudant")
val response1 = CloudantUtil.createDocument(myCloudantCreds, "{\"kind\":\"fruit\", \"type\":\"apple\"}")
- response1.get("ok").getAsString() should be("true")
+ response1.get("ok").getAsString should be("true")
println("Checking for activations")
val activations = wsk.activation.pollFor(N = 1, Some(triggerName), retries = 30).length
@@ -592,7 +586,7 @@ class CloudantFeedTests
println("Creating a test doc-2 in the cloudant")
val response2 = CloudantUtil.createDocument(myCloudantCreds, "{\"kind\":\"dairy\",\"type\":\"butter\"}")
- response2.get("ok").getAsString() should be("true")
+ response2.get("ok").getAsString should be("true")
println("checking for new activations (not expected since it should be filtered out)")
val noNewActivations = wsk.activation.pollFor(N = 2, Some(triggerName)).length
@@ -636,7 +630,7 @@ class CloudantFeedTests
println("Creating a test doc-3 in the cloudant")
val response3 = CloudantUtil.createDocument(myCloudantCreds, "{\"kind\":\"berry\", \"type\":\"avocado\"}")
- response3.get("ok").getAsString() should be("true")
+ response3.get("ok").getAsString should be("true")
println("Checking for new activations (should now have 2)")
val newActivations = wsk.activation.pollFor(N = 3, Some(triggerName), retries = 30).length
diff --git a/tests/src/test/scala/system/packages/CloudantFeedWebTests.scala b/tests/src/test/scala/system/packages/CloudantFeedWebTests.scala
index 63dc28c..da9d518 100644
--- a/tests/src/test/scala/system/packages/CloudantFeedWebTests.scala
+++ b/tests/src/test/scala/system/packages/CloudantFeedWebTests.scala
@@ -35,7 +35,7 @@ class CloudantFeedWebTests
val wskprops = WskProps()
val webAction = "/whisk.system/cloudantWeb/changesWebAction"
- val webActionURL = s"https://${wskprops.apihost}/api/v1/web${webAction}.http"
+ val webActionURL = s"https://${wskprops.apihost}/api/v1/web$webAction.http"
val requiredParams = JsObject(
"triggerName" -> JsString("/invalidNamespace/invalidTrigger"),
diff --git a/tests/src/test/scala/system/packages/CloudantMultiWorkersTests.scala b/tests/src/test/scala/system/packages/CloudantMultiWorkersTests.scala
index 6280d25..42f3ed2 100644
--- a/tests/src/test/scala/system/packages/CloudantMultiWorkersTests.scala
+++ b/tests/src/test/scala/system/packages/CloudantMultiWorkersTests.scala
@@ -27,8 +27,12 @@ import org.scalatest.{FlatSpec, Matchers}
import spray.json.DefaultJsonProtocol.{StringJsonFormat, _}
import spray.json.{pimpAny, _}
import system.CloudantUtil
-import whisk.core.database.test.DatabaseScriptTestUtils
-import whisk.utils.JsHelpers
+import whisk.core.WhiskConfig
+import whisk.core.database.test.ExtendedCouchDbRestClient
+import whisk.utils.{JsHelpers, retry}
+
+import scala.concurrent.Await
+import scala.concurrent.duration.DurationInt
@RunWith(classOf[JUnitRunner])
@@ -36,8 +40,7 @@ class CloudantMultiWorkersTests extends FlatSpec
with Matchers
with WskActorSystem
with WskTestHelpers
- with StreamLogging
- with DatabaseScriptTestUtils {
+ with StreamLogging {
val wskprops = WskProps()
val wsk = new Wsk
@@ -45,8 +48,15 @@ class CloudantMultiWorkersTests extends FlatSpec
val user = auth.fst
val password = auth.snd
+ val dbProtocol = WhiskProperties.getProperty("db.protocol")
+ val dbHost = WhiskProperties.getProperty("db.host")
+ val dbPort = WhiskProperties.getProperty("db.port").toInt
+ val dbUsername = WhiskProperties.getProperty("db.username")
+ val dbPassword = WhiskProperties.getProperty("db.password")
+ val dbPrefix = WhiskProperties.getProperty(WhiskConfig.dbPrefix)
+
val webAction = "/whisk.system/cloudantWeb/changesWebAction"
- val webActionURL = s"https://${wskprops.apihost}/api/v1/web${webAction}.http"
+ val webActionURL = s"https://${wskprops.apihost}/api/v1/web$webAction.http"
val myCloudantCreds = CloudantUtil.Credential.makeFromVCAPFile("cloudantNoSQLDB", this.getClass.getSimpleName)
@@ -91,14 +101,19 @@ class CloudantMultiWorkersTests extends FlatSpec
makePostCallWithExpectedResult(worker11Params, 200)
val dbName = s"${dbPrefix}cloudanttrigger"
- val documents = getAllDocs(dbName)
-
- val worker1Doc = documents
- .fields("rows")
- .convertTo[List[JsObject]]
- .filter(_.fields("id").convertTo[String].equals(s":_:$worker11Trigger"))
-
- JsHelpers.getFieldPath(worker1Doc(0), "doc", "worker") shouldBe Some(JsString("worker11"))
+ val client = new ExtendedCouchDbRestClient(dbProtocol, dbHost, dbPort, dbUsername, dbPassword, dbName)
+
+ retry({
+ val result = Await.result(client.getAllDocs(includeDocs = Some(true)), 15.seconds)
+ result should be('right)
+ val documents = result.right.get
+ val worker11Doc = documents
+ .fields("rows")
+ .convertTo[List[JsObject]]
+ .filter(_.fields("id").convertTo[String].equals(s":_:$worker11Trigger"))
+
+ JsHelpers.getFieldPath(worker11Doc.head, "doc", "worker") shouldBe Some(JsString("worker11"))
+ })
} finally {
//delete trigger feeds and triggers
makeDeleteCallWithExpectedResult(worker10Params, DONTCARE_EXIT)
diff --git a/tests/src/test/scala/system/packages/CloudantTriggerPersistencyTest.scala b/tests/src/test/scala/system/packages/CloudantTriggerPersistencyTest.scala
deleted file mode 100644
index 0c85987..0000000
--- a/tests/src/test/scala/system/packages/CloudantTriggerPersistencyTest.scala
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package system.packages
-
-import common._
-import org.junit.runner.RunWith
-import org.scalatest.FlatSpec
-import org.scalatest.junit.JUnitRunner
-import spray.json.DefaultJsonProtocol.{IntJsonFormat, StringJsonFormat}
-import spray.json.pimpAny
-import system.CloudantUtil
-
-/**
- * Tests for Cloudant trigger service
- */
-@RunWith(classOf[JUnitRunner])
-class CloudantTriggerPersistencyTest
- extends FlatSpec
- with TestHelpers
- with WskTestHelpers
- with WskActorSystem {
-
- val dbUsername = WhiskProperties.getProperty("db.username")
- val dbPassword = WhiskProperties.getProperty("db.password")
- val dbPrefix = WhiskProperties.getProperty("db.prefix")
-
- val wskprops = WskProps()
- val wsk = new Wsk
-
- val myCloudantCreds = CloudantUtil.Credential.makeFromVCAPFile("cloudantNoSQLDB", this.getClass.getSimpleName)
-
- val cloudantTriggerDBCreds = new CloudantUtil.Credential(dbUsername, dbPassword, dbPrefix + "cloudanttrigger")
-
- behavior of "Cloudant trigger service"
-
-
- ignore should "persist trigger into Cloudant" in withAssetCleaner(wskprops) {
- (wp, assetHelper) =>
- implicit val wskprops = wp // shadow global props and make implicit
- val namespace = wsk.namespace.list().stdout.trim.split("\n").last
- val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
- val trigger = "/" + namespace + "/" + triggerName
- val packageName = "/" + namespace + "/dummyCloudantPackage"
- val feed = "changes"
- try {
- CloudantUtil.setUp(myCloudantCreds)
-
- val packageGetResult = wsk.pkg.get("/whisk.system/cloudant")
- println("Fetching cloudant package.")
- packageGetResult.stdout should include("ok")
-
- println("Creating cloudant package binding.")
- assetHelper.withCleaner(wsk.pkg, packageName) {
- (pkg, name) => pkg.bind("/whisk.system/cloudant", name)
- }
-
- println("Creating cloudant trigger feed.")
- val feedCreationResult = wsk.trigger.create(trigger,
- feed = Some(s"$packageName/$feed"),
- parameters = Map(
- "username" -> myCloudantCreds.user.toJson,
- "password" -> myCloudantCreds.password.toJson,
- "host" -> myCloudantCreds.host().toJson,
- "dbname" -> myCloudantCreds.dbname.toJson,
- "maxTriggers" -> 1.toJson))
- feedCreationResult.stdout should include("ok")
-
- println("Getting cloudanttrigger doc from the cloudant")
- val docId = s":${namespace}:${triggerName}"
- val persistedResponse = CloudantUtil.getDocument(cloudantTriggerDBCreds, docId)
-
- println("Deleting cloudant trigger feed.")
- val feedDeletionResult = wsk.trigger.delete(trigger)
- feedDeletionResult.stdout should include("ok")
-
- println("Getting cloudanttrigger doc from the cloudant")
- val removedResponse = CloudantUtil.getDocument(cloudantTriggerDBCreds, docId)
-
- persistedResponse.get("id").getAsString() should be(docId)
- removedResponse.get("error").getAsString() should be("not_found")
- } finally {
- CloudantUtil.unsetUp(myCloudantCreds)
- }
- }
-
-}
diff --git a/tests/src/test/scala/system/redundancy/CloudantRedundancyTests.scala b/tests/src/test/scala/system/redundancy/CloudantRedundancyTests.scala
deleted file mode 100644
index e78cc24..0000000
--- a/tests/src/test/scala/system/redundancy/CloudantRedundancyTests.scala
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package system.redundancy
-
-import com.jayway.restassured.RestAssured
-import com.jayway.restassured.config.SSLConfig
-import common._
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-import org.scalatest.{BeforeAndAfterAll, FlatSpec, Matchers}
-import spray.json.DefaultJsonProtocol.StringJsonFormat
-import spray.json.{pimpAny, _}
-import system.CloudantUtil
-
-/**
- * These tests verify that a cloudant redundancy (master/slave) configuration
- * works as expected. They will only run properly in an environment with two
- * cloudant containers running concurrently and env var HOST_INDEX set to host0 in
- * one container and host1 in the other. This test also assumes that redis and
- * the active endpoint authorization are configured. For the auth set the
- * ENDPOINT_AUTH env var in your containers to match the testing.auth property
- * found in your whisk.properties. To configure redis simply set the REDIS_URL
- * env var in your containers to point to the openwhisk redis container and make
- * sure the container is deployed. You can run redis.yml to deploy it.
- */
-@RunWith(classOf[JUnitRunner])
-class CloudantRedundancyTests
- extends FlatSpec
- with Matchers
- with BeforeAndAfterAll
- with WskTestHelpers {
-
- val wskprops = WskProps()
- val wsk = new Wsk
- val myCloudantCreds = CloudantUtil.Credential.makeFromVCAPFile("cloudantNoSQLDB", this.getClass.getSimpleName)
- val edgeHost = WhiskProperties.getEdgeHost
- val auth = WhiskProperties.getBasicAuth
- val user = auth.fst
- val password = auth.snd
-
- val endpointPrefix = s"https://$user:$password@$edgeHost/cloudanttrigger/worker0/"
- val defaultAction = Some(TestUtils.getTestActionFilename("hello.js"))
-
- behavior of "Cloudant redundancy tests"
-
- it should "fire cloudant trigger before the swap" in withAssetCleaner(wskprops) {
- (wp, assetHelper) =>
- implicit val wskprops = wp // shadow global props and make implicit
- val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
- val ruleName = s"dummyAlarmsRule-${System.currentTimeMillis}"
- val actionName = s"dummyAlarmsAction-${System.currentTimeMillis}"
- val packageName = "dummyCloudantPackage"
- val feed = "changes"
-
- try {
- CloudantUtil.setUp(myCloudantCreds)
-
- // the package cloudant should be there
- val packageGetResult = wsk.pkg.get("/whisk.system/cloudant")
- println("fetched package cloudant")
- packageGetResult.stdout should include("ok")
-
- // create package binding
- assetHelper.withCleaner(wsk.pkg, packageName) {
- (pkg, name) => pkg.bind("/whisk.system/cloudant", name)
- }
-
- // create action
- assetHelper.withCleaner(wsk.action, actionName) { (action, name) =>
- action.create(name, defaultAction)
- }
-
- // create whisk stuff
- val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
- (trigger, name) =>
- trigger.create(name, feed = Some(s"$packageName/$feed"), parameters = Map(
- "username" -> myCloudantCreds.user.toJson,
- "password" -> myCloudantCreds.password.toJson,
- "host" -> myCloudantCreds.host().toJson,
- "dbname" -> myCloudantCreds.dbname.toJson))
- }
-
- // create rule
- assetHelper.withCleaner(wsk.rule, ruleName) { (rule, name) =>
- rule.create(name, trigger = triggerName, action = actionName)
- }
-
- Thread.sleep(3000)
-
- // create a test doc in the sample db
- println("create a test doc and wait for trigger")
- CloudantUtil.createDocument(myCloudantCreds, "{\"test\":\"test_doc1\"}")
-
- // get activation list of the trigger, expecting exactly 1
- val activations = wsk.activation.pollFor(N = 1, Some(triggerName), retries = 30).length
- println(s"Found activation size (should be exactly 1): $activations")
- withClue("Change feed trigger count: ") { activations should be(1) }
-
- // delete the whisk trigger, which must also delete the feed
- wsk.trigger.delete(triggerName)
- } finally {
- CloudantUtil.unsetUp(myCloudantCreds)
- }
- }
-
- it should "perform active swap by setting host0 active=false" in {
- val endpointURL = endpointPrefix + "0/active?active=false"
- val expectedResult = "{\"worker\":\"worker0\",\"host\":\"host0\",\"active\":\"swapping\"}".parseJson.asJsObject
-
- makeGetCallWithExpectedResult(endpointURL, expectedResult)
- }
-
- it should "verify active swap by checking for host0 active=false" in {
- val endpointURL = endpointPrefix + "0/active"
- val expectedResult = "{\"worker\":\"worker0\",\"host\":\"host0\",\"active\":false}".parseJson.asJsObject
-
- Thread.sleep(3000)
- makeGetCallWithExpectedResult(endpointURL, expectedResult)
- }
-
- it should "verify active swap by checking for host1 active=true" in {
- val endpointURL = endpointPrefix + "1/active"
- val expectedResult = "{\"worker\":\"worker0\",\"host\":\"host1\",\"active\":true}".parseJson.asJsObject
-
- makeGetCallWithExpectedResult(endpointURL, expectedResult)
- }
-
- it should "fire cloudant trigger again after the swap" in withAssetCleaner(wskprops) {
- (wp, assetHelper) =>
- implicit val wskprops = wp // shadow global props and make implicit
- val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
- val ruleName = s"dummyAlarmsRule-${System.currentTimeMillis}"
- val actionName = s"dummyAlarmsAction-${System.currentTimeMillis}"
- val packageName = "dummyCloudantPackage"
- val feed = "changes"
-
- try {
- CloudantUtil.setUp(myCloudantCreds)
-
- // the package cloudant should be there
- val packageGetResult = wsk.pkg.get("/whisk.system/cloudant")
- println("fetched package cloudant")
- packageGetResult.stdout should include("ok")
-
- // create package binding
- assetHelper.withCleaner(wsk.pkg, packageName) {
- (pkg, name) => pkg.bind("/whisk.system/cloudant", name)
- }
-
- // create action
- assetHelper.withCleaner(wsk.action, actionName) { (action, name) =>
- action.create(name, defaultAction)
- }
-
- // create whisk stuff
- val feedCreationResult = assetHelper.withCleaner(wsk.trigger, triggerName, confirmDelete = false) {
- (trigger, name) =>
- trigger.create(name, feed = Some(s"$packageName/$feed"), parameters = Map(
- "username" -> myCloudantCreds.user.toJson,
- "password" -> myCloudantCreds.password.toJson,
- "host" -> myCloudantCreds.host().toJson,
- "dbname" -> myCloudantCreds.dbname.toJson))
- }
-
- // create rule
- assetHelper.withCleaner(wsk.rule, ruleName) { (rule, name) =>
- rule.create(name, trigger = triggerName, action = actionName)
- }
-
- Thread.sleep(3000)
-
- // create a test doc in the sample db
- println("create a test doc and wait for trigger")
- CloudantUtil.createDocument(myCloudantCreds, "{\"test\":\"test_doc1\"}")
-
- // get activation list of the trigger, expecting exactly 1
- val activations = wsk.activation.pollFor(N = 1, Some(triggerName), retries = 30).length
- println(s"Found activation size (should be exactly 1): $activations")
- withClue("Change feed trigger count: ") { activations should be(1) }
-
- // delete the whisk trigger, which must also delete the feed
- wsk.trigger.delete(triggerName)
- } finally {
- CloudantUtil.unsetUp(myCloudantCreds)
- }
- }
-
- private def makeGetCallWithExpectedResult(endpointURL: String, expectedResult: JsObject) = {
- val response = RestAssured.
- given().
- config(RestAssured.config().sslConfig(new SSLConfig().relaxedHTTPSValidation())).
- get(endpointURL)
- assert(response.statusCode() == 200)
- var result = response.body.asString.parseJson.asJsObject
- JsObject(result.fields - "hostMachine") shouldBe expectedResult
- }
-
- override def afterAll() {
- //swap back to original configuration
- RestAssured.
- given().
- config(RestAssured.config().sslConfig(new SSLConfig().relaxedHTTPSValidation())).
- get(endpointPrefix + "0/active?active=true")
- }
-
-}
--
To stop receiving notification emails like this one, please contact
dubeejw@apache.org.