blob: a00495afd76cc37749b40bd10d25f5d44f50dc70 [file] [log] [blame]
/*
* 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.gearpump.integrationtest
import org.scalatest._
import org.apache.gearpump.cluster.MasterToAppMaster
import org.apache.gearpump.cluster.MasterToAppMaster.AppMasterData
import org.apache.gearpump.util.LogUtil
/**
* The abstract test spec
*/
trait TestSpecBase
extends WordSpec with Matchers with BeforeAndAfterEachTestData with BeforeAndAfterAll {
private def LOGGER = LogUtil.getLogger(getClass)
override def beforeAll(): Unit = {
super.beforeAll()
if (!MiniClusterProvider.managed) {
LOGGER.info("Will test with a default standalone mini cluster")
MiniClusterProvider.get.start()
}
}
override def afterAll(): Unit = {
if (!MiniClusterProvider.managed) {
LOGGER.info("Will shutdown the default mini cluster")
MiniClusterProvider.get.shutDown()
}
super.afterAll()
}
lazy val cluster = MiniClusterProvider.get
lazy val commandLineClient = cluster.commandLineClient
lazy val restClient = cluster.restClient
lazy val wordCountJar = cluster.queryBuiltInExampleJars("wordcount_").head
lazy val wordCountName = "wordCount"
lazy val wordCountClass = "org.apache.gearpump.streaming.examples.wordcount.WordCount"
var restartClusterRequired: Boolean = false
override def beforeEach(td: TestData): Unit = {
LOGGER.debug(s">### =============================================================")
LOGGER.debug(s">###1 Prepare test: ${td.name}\n")
assert(cluster != null, "Configure MiniCluster properly in suite spec")
cluster.isAlive shouldBe true
restClient.listPendingOrRunningApps().isEmpty shouldBe true
LOGGER.debug(s">### =============================================================")
LOGGER.debug(s">###2 Start test: ${td.name}\n")
}
override def afterEach(td: TestData): Unit = {
LOGGER.debug(s"<### =============================================================")
LOGGER.debug(s"<###3 End test: ${td.name}\n")
if (restartClusterRequired || !cluster.isAlive) {
restartClusterRequired = false
LOGGER.info("Will restart the cluster for next test case")
cluster.restart()
} else {
restClient.listPendingOrRunningApps().foreach(app => {
commandLineClient.killApp(app.appId) shouldBe true
})
}
}
def expectAppIsRunning(appId: Int, expectedAppName: String): Unit = {
Util.retryUntil(() => {
val app = restClient.queryApp(appId)
app.status == MasterToAppMaster.AppMasterActive && app.appName == expectedAppName
}, s"$expectedAppName is running")
}
}