Skip to content

Commit 674704e

Browse files
Use testcontainers to test MongoDB stuff (#5234)
* Use testcontainers to test MongoDB stuff * Use compile in gradle for consistency * Add google repositories * checking * Recreate client when config is changed
1 parent cbdcfe5 commit 674704e

File tree

6 files changed

+29
-17
lines changed

6 files changed

+29
-17
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
buildscript {
1919
repositories {
20+
google()
2021
jcenter()
2122
}
2223
dependencies {

common/scala/src/main/scala/org/apache/openwhisk/core/database/mongodb/MongoDBArtifactStoreProvider.scala

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,16 @@ case class MongoDBConfig(uri: String, database: String) {
3737
}
3838

3939
object MongoDBClient {
40-
private var _client: Option[MongoClient] = None
40+
private var _clientWithConfig: Option[(MongoClient, MongoDBConfig)] = None
4141

4242
def client(config: MongoDBConfig): MongoClient = {
43-
_client.getOrElse {
44-
val client = MongoClient(config.uri)
45-
_client = Some(client)
46-
client
43+
_clientWithConfig match {
44+
case Some((client, oldConfig)) if oldConfig == config =>
45+
client
46+
case _ =>
47+
val client = MongoClient(config.uri)
48+
_clientWithConfig = Some(client, config)
49+
client
4750
}
4851
}
4952
}

tests/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,8 @@ dependencies {
230230
compile "io.fabric8:kubernetes-server-mock:${gradle.kube_client.version}"
231231

232232
compile "com.amazonaws:aws-java-sdk-s3:1.11.295"
233-
compile "org.testcontainers:elasticsearch:1.15.3"
233+
compile 'org.testcontainers:elasticsearch:1.17.1'
234+
compile 'org.testcontainers:mongodb:1.17.1'
234235

235236
compile project(':common:scala')
236237
compile project(':core:controller')

tests/src/test/resources/application.conf.j2

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ whisk {
7171
}
7272

7373
mongodb {
74-
uri = ${?MONGODB_CONNECT_STRING}
75-
database = ${?MONGODB_DATABASE}
74+
docker-image = "{{ 'mongo:' ~ mongodb.version }}"
7675
}
7776

7877
controller {

tests/src/test/scala/org/apache/openwhisk/core/database/mongodb/MongoDBStoreBehaviorBase.scala

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,37 @@
1717

1818
package org.apache.openwhisk.core.database.mongodb
1919

20-
import org.apache.openwhisk.core.ConfigKeys
2120
import org.apache.openwhisk.core.database.test.behavior.ArtifactStoreBehaviorBase
2221
import org.apache.openwhisk.core.database.{ArtifactStore, AttachmentStore, DocumentSerializer}
2322
import org.apache.openwhisk.core.entity._
2423
import org.scalatest.FlatSpec
24+
import org.testcontainers.containers.MongoDBContainer
2525
import pureconfig.loadConfigOrThrow
2626
import pureconfig.generic.auto._
2727

28-
import scala.reflect.{classTag, ClassTag}
29-
import scala.util.Try
28+
import scala.reflect.{ClassTag, classTag}
3029

3130
trait MongoDBStoreBehaviorBase extends FlatSpec with ArtifactStoreBehaviorBase {
32-
override def storeType = "MongoDB"
31+
val imageName = loadConfigOrThrow[String]("whisk.mongodb.docker-image")
32+
val container = new MongoDBContainer(imageName)
33+
container.start()
34+
35+
override def afterAll = {
36+
container.close()
37+
super.afterAll()
38+
}
3339

34-
override lazy val storeAvailableCheck: Try[Any] = storeConfigTry
40+
override def storeType = "MongoDB"
3541

36-
val storeConfigTry = Try { loadConfigOrThrow[MongoDBConfig](ConfigKeys.mongodb) }
42+
val storeConfig = MongoDBConfig(container.getReplicaSetUrl, "unittest")
3743

3844
override lazy val authStore = {
3945
implicit val docReader: DocumentReader = WhiskDocumentReader
40-
MongoDBArtifactStoreProvider.makeArtifactStore[WhiskAuth](storeConfigTry.get, getAttachmentStore[WhiskAuth]())
46+
MongoDBArtifactStoreProvider.makeArtifactStore[WhiskAuth](storeConfig, getAttachmentStore[WhiskAuth]())
4147
}
4248

4349
override lazy val entityStore =
44-
MongoDBArtifactStoreProvider.makeArtifactStore[WhiskEntity](storeConfigTry.get, getAttachmentStore[WhiskEntity]())(
50+
MongoDBArtifactStoreProvider.makeArtifactStore[WhiskEntity](storeConfig, getAttachmentStore[WhiskEntity]())(
4551
classTag[WhiskEntity],
4652
WhiskEntityJsonFormat,
4753
WhiskDocumentReader,
@@ -51,7 +57,7 @@ trait MongoDBStoreBehaviorBase extends FlatSpec with ArtifactStoreBehaviorBase {
5157
override lazy val activationStore = {
5258
implicit val docReader: DocumentReader = WhiskDocumentReader
5359
MongoDBArtifactStoreProvider
54-
.makeArtifactStore[WhiskActivation](storeConfigTry.get, getAttachmentStore[WhiskActivation]())
60+
.makeArtifactStore[WhiskActivation](storeConfig, getAttachmentStore[WhiskActivation]())
5561
}
5662

5763
override protected def getAttachmentStore(store: ArtifactStore[_]) =

tests/src/test/scala/org/apache/openwhisk/core/scheduler/grpc/test/ActivationServiceImplTests.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ class ActivationServiceImplTests
6464

6565
private def await[T](awaitable: Future[T], timeout: FiniteDuration = 10.seconds) = Await.result(awaitable, timeout)
6666

67+
implicit val timeoutConfig = PatienceConfig(5.seconds)
68+
6769
behavior of "ActivationService"
6870

6971
implicit val ec = system.dispatcher

0 commit comments

Comments
 (0)