Skip to content

Commit

Permalink
test: Run unit and E2E tests separately on Travis (#1414)
Browse files Browse the repository at this point in the history
* test: Run unit and E2E tests separately on Travis.

* test: Fix sbt command-line syntax.
  • Loading branch information
Benjamin Geer committed Aug 30, 2019
1 parent ab1cdff commit 32aaca2
Show file tree
Hide file tree
Showing 41 changed files with 148 additions and 3 deletions.
21 changes: 19 additions & 2 deletions .travis.yml
Expand Up @@ -71,7 +71,7 @@ jobs:
# - sbt knora-graphdb-free/docker:publish
# - sbt knora-upgrade/docker:publish
# - sbt knora-assets/docker:publish
# unit and e2e tests
# unit tests
- stage: test
script:
# prepare needed graphdb-se files
Expand All @@ -85,7 +85,24 @@ jobs:
# hit graphdb with a request "waking-it-up"
- curl http://localhost:7200/rest/repositories
# start the built-in webapi server tests
- cd $TRAVIS_BUILD_DIR/ && sbt webapi/clean coverage webapi/test webapi/coverageReport
- cd $TRAVIS_BUILD_DIR/ && sbt webapi/clean coverage 'webapi/testOnly -- -l org.knora.webapi.testing.tags.E2ETest' webapi/coverageReport
# upload code coverage report
# - sbt codacyCoverage
# e2e tests
- stage: test
script:
# prepare needed graphdb-se files
- mkdir -p $TRAVIS_BUILD_DIR/graphdb
- cp $TRAVIS_BUILD_DIR/travis/graphdb.license $TRAVIS_BUILD_DIR/graphdb/graphdb.license
- cp $TRAVIS_BUILD_DIR/webapi/scripts/KnoraRules.pie $TRAVIS_BUILD_DIR/graphdb
# start and initialize graphdb-se
- docker run -d -p 127.0.0.1:7200:7200 -v $TRAVIS_BUILD_DIR/graphdb:/graphdb -e GDB_HEAP_SIZE=$GDB_HEAP_SIZE ontotext/graphdb:$GRAPHDB_VERSION -Dgraphdb.license.file=/graphdb/graphdb.license
- sleep 15
- cd $TRAVIS_BUILD_DIR/webapi/scripts && ./graphdb-se-docker-init-knora-test-unit.sh
# hit graphdb with a request "waking-it-up"
- curl http://localhost:7200/rest/repositories
# start the built-in webapi server tests
- cd $TRAVIS_BUILD_DIR/ && sbt webapi/clean coverage 'webapi/testOnly -- -n org.knora.webapi.testing.tags.E2ETest' webapi/coverageReport
# upload code coverage report
# - sbt codacyCoverage
# integration tests
Expand Down
Expand Up @@ -31,6 +31,7 @@ import org.knora.webapi.util.FileUtil
import scala.concurrent.duration._
import sys.process._
import org.apache.commons.io.FileUtils
import org.knora.webapi.testing.tags.E2ETest

object ClientApiRouteE2ESpec {
val config: Config = ConfigFactory.parseString(
Expand All @@ -40,6 +41,7 @@ object ClientApiRouteE2ESpec {
""".stripMargin)
}

@E2ETest
class ClientApiRouteE2ESpec extends E2ESpec(ClientApiRouteE2ESpec.config) {
implicit def default(implicit system: ActorSystem): RouteTestTimeout = RouteTestTimeout(settings.defaultTimeout)

Expand Down
Expand Up @@ -23,6 +23,7 @@ import io.gatling.core.Predef._
import io.gatling.http.Predef._
import org.knora.webapi.E2ESimSpec
import org.knora.webapi.messages.store.triplestoremessages.RdfDataObject
import org.knora.webapi.testing.tags.E2ETest

import scala.concurrent.duration._

Expand All @@ -31,7 +32,8 @@ import scala.concurrent.duration._
*
* This simulation scenario accesses the users endpoint with
* 1000 users concurrently.
* */
*/
@E2ETest
class ExampleE2ESimSpec extends E2ESimSpec {

override lazy val rdfDataObjects: Seq[RdfDataObject] = Seq.empty[RdfDataObject]
Expand Down
Expand Up @@ -19,11 +19,13 @@ import akka.http.scaladsl.model._
import akka.http.scaladsl.server.Directives.{get, path, _}
import akka.http.scaladsl.server.Route
import org.knora.webapi._
import org.knora.webapi.testing.tags.E2ETest


/**
* Route (R2R) test specification for testing exception handling.
*/
@E2ETest
class ExceptionHandlerR2RSpec extends R2RSpec {

private val nfe = path( ("v1" | "v2" | "admin") / "nfe") {
Expand Down
Expand Up @@ -21,6 +21,7 @@ import akka.http.scaladsl.testkit.RouteTestTimeout
import com.typesafe.config.ConfigFactory
import org.knora.webapi.E2ESpec
import org.knora.webapi.messages.app.appmessages.{AppState, SetAppState}
import org.knora.webapi.testing.tags.E2ETest


object HealthRouteE2ESpec {
Expand All @@ -34,6 +35,7 @@ object HealthRouteE2ESpec {
/**
* End-to-End (E2E) test specification for testing route rejections.
*/
@E2ETest
class HealthRouteE2ESpec extends E2ESpec(HealthRouteE2ESpec.config) {

implicit def default(implicit system: ActorSystem) = RouteTestTimeout(settings.defaultTimeout)
Expand Down
Expand Up @@ -22,6 +22,7 @@ package org.knora.webapi.e2e
import akka.actor.ActorSystem
import akka.http.scaladsl.testkit.RouteTestTimeout
import com.typesafe.config.{Config, ConfigFactory}
import org.knora.webapi.testing.tags.E2ETest
import org.knora.webapi.util.IriConversions._
import org.knora.webapi.util.StringFormatter
import org.knora.webapi.{AssertionException, E2ESpec}
Expand All @@ -31,6 +32,7 @@ import scala.concurrent.ExecutionContextExecutor
/**
* Tests [[InstanceChecker]].
*/
@E2ETest
class InstanceCheckerSpec extends E2ESpec(InstanceCheckerSpec.config) {
private implicit val stringFormatter: StringFormatter = StringFormatter.getGeneralInstance

Expand Down
Expand Up @@ -20,6 +20,7 @@ import akka.http.scaladsl.model._
import akka.http.scaladsl.testkit.RouteTestTimeout
import com.typesafe.config.ConfigFactory
import org.knora.webapi.E2ESpec
import org.knora.webapi.testing.tags.E2ETest


object RejectingRouteE2ESpec {
Expand All @@ -34,6 +35,7 @@ object RejectingRouteE2ESpec {
/**
* End-to-End (E2E) test specification for testing route rejections.
*/
@E2ETest
class RejectingRouteE2ESpec extends E2ESpec(RejectingRouteE2ESpec.config) {

implicit def default(implicit system: ActorSystem) = RouteTestTimeout(settings.defaultTimeout)
Expand Down
Expand Up @@ -23,6 +23,7 @@ import io.gatling.core.Predef.{forAll, global, rampUsers, scenario, _}
import io.gatling.http.Predef.{http, status}
import org.knora.webapi.E2ESimSpec
import org.knora.webapi.messages.store.triplestoremessages.RdfDataObject
import org.knora.webapi.testing.tags.E2ETest

import scala.concurrent.duration._

Expand All @@ -31,6 +32,7 @@ import scala.concurrent.duration._
*
* This simulation scenario accesses the users, groups, and projects endpoint.
*/
@E2ETest
class AdminMixE2ESimSpec extends E2ESimSpec {

override lazy val rdfDataObjects: Seq[RdfDataObject] = Seq.empty[RdfDataObject]
Expand Down
Expand Up @@ -23,6 +23,7 @@ import io.gatling.core.Predef._
import io.gatling.http.Predef._
import org.knora.webapi.E2ESimSpec
import org.knora.webapi.messages.store.triplestoremessages.RdfDataObject
import org.knora.webapi.testing.tags.E2ETest

import scala.concurrent.duration._

Expand All @@ -32,6 +33,7 @@ import scala.concurrent.duration._
* This simulation scenario accesses the groups endpoint with
* 1000 users concurrently.
*/
@E2ETest
class GroupsADME2ESimSpec extends E2ESimSpec {

override lazy val rdfDataObjects: Seq[RdfDataObject] = Seq.empty[RdfDataObject]
Expand Down
Expand Up @@ -26,6 +26,7 @@ import akka.http.scaladsl.testkit.RouteTestTimeout
import com.typesafe.config.{Config, ConfigFactory}
import org.knora.webapi.messages.admin.responder.groupsmessages.{GroupADM, GroupsADMJsonProtocol}
import org.knora.webapi.messages.v1.responder.sessionmessages.SessionJsonProtocol
import org.knora.webapi.testing.tags.E2ETest
import org.knora.webapi.util.{AkkaHttpUtils, MutableTestIri}
import org.knora.webapi.{E2ESpec, SharedTestDataADM}

Expand All @@ -43,6 +44,7 @@ object GroupsADME2ESpec {
/**
* End-to-End (E2E) test specification for testing groups endpoint.
*/
@E2ETest
class GroupsADME2ESpec extends E2ESpec(GroupsADME2ESpec.config) with GroupsADMJsonProtocol with SessionJsonProtocol {

implicit def default(implicit system: ActorSystem): RouteTestTimeout = RouteTestTimeout(30.seconds)
Expand Down
Expand Up @@ -29,6 +29,7 @@ import org.knora.webapi.messages.admin.responder.listsmessages._
import org.knora.webapi.messages.store.triplestoremessages.{RdfDataObject, StringLiteralV2, TriplestoreJsonProtocol}
import org.knora.webapi.messages.v1.responder.sessionmessages.SessionJsonProtocol
import org.knora.webapi.messages.v1.routing.authenticationmessages.CredentialsADM
import org.knora.webapi.testing.tags.E2ETest
import org.knora.webapi.util.{AkkaHttpUtils, MutableTestIri}
import org.knora.webapi.{E2ESpec, SharedListsTestDataADM, SharedTestDataADM, SharedTestDataV1}

Expand All @@ -45,6 +46,7 @@ object ListsADME2ESpec {
/**
* End-to-End (E2E) test specification for testing users endpoint.
*/
@E2ETest
class ListsADME2ESpec extends E2ESpec(ListsADME2ESpec.config) with SessionJsonProtocol with TriplestoreJsonProtocol with ListADMJsonProtocol {

implicit def default(implicit system: ActorSystem) = RouteTestTimeout(5.seconds)
Expand Down
Expand Up @@ -22,6 +22,7 @@ package org.knora.webapi.e2e.admin
import akka.http.scaladsl.model.StatusCodes
import com.typesafe.config.ConfigFactory
import org.knora.webapi.messages.store.triplestoremessages.TriplestoreJsonProtocol
import org.knora.webapi.testing.tags.E2ETest
import org.knora.webapi.{E2ESpec, OntologyConstants, SharedTestDataV1}

import scala.concurrent.duration._
Expand All @@ -39,6 +40,7 @@ object PermissionsADME2ESpec {
*
* This spec tests the 'v1/store' route.
*/
@E2ETest
class PermissionsADME2ESpec extends E2ESpec(PermissionsADME2ESpec.config) with TriplestoreJsonProtocol {

"The Permissions Route ('admin/permissions/projectIri/groupIri')" should {
Expand Down
Expand Up @@ -23,6 +23,7 @@ import io.gatling.core.Predef._
import io.gatling.http.Predef._
import org.knora.webapi.E2ESimSpec
import org.knora.webapi.messages.store.triplestoremessages.RdfDataObject
import org.knora.webapi.testing.tags.E2ETest

import scala.concurrent.duration._

Expand All @@ -32,6 +33,7 @@ import scala.concurrent.duration._
* This simulation scenario accesses the projects endpoint with
* 1000 users concurrently.
*/
@E2ETest
class ProjectsADME2ESimSpec extends E2ESimSpec {

override lazy val rdfDataObjects: Seq[RdfDataObject] = Seq.empty[RdfDataObject]
Expand Down
Expand Up @@ -34,6 +34,7 @@ import org.knora.webapi.messages.admin.responder.usersmessages.UserADM
import org.knora.webapi.messages.admin.responder.usersmessages.UsersADMJsonProtocol._
import org.knora.webapi.messages.store.triplestoremessages.{StringLiteralV2, TriplestoreJsonProtocol}
import org.knora.webapi.messages.v1.responder.sessionmessages.SessionJsonProtocol
import org.knora.webapi.testing.tags.E2ETest
import org.knora.webapi.util.{AkkaHttpUtils, MutableTestIri}
import org.knora.webapi.{E2ESpec, IRI, SharedTestDataADM}

Expand All @@ -53,6 +54,7 @@ object ProjectsADME2ESpec {
/**
* End-to-End (E2E) test specification for testing groups endpoint.
*/
@E2ETest
class ProjectsADME2ESpec extends E2ESpec(ProjectsADME2ESpec.config) with SessionJsonProtocol with ProjectsADMJsonProtocol with TriplestoreJsonProtocol {

private implicit def default(implicit system: ActorSystem) = RouteTestTimeout(30.seconds)
Expand Down
Expand Up @@ -30,6 +30,7 @@ import org.knora.webapi.messages.admin.responder.sipimessages.SipiResponderRespo
import org.knora.webapi.messages.store.triplestoremessages.{RdfDataObject, TriplestoreJsonProtocol}
import org.knora.webapi.messages.v1.responder.sessionmessages.{SessionJsonProtocol, SessionResponse}
import org.knora.webapi.routing.Authenticator.KNORA_AUTHENTICATION_COOKIE_NAME
import org.knora.webapi.testing.tags.E2ETest
import org.knora.webapi.{E2ESpec, SharedTestDataV1}

import scala.concurrent.Await
Expand All @@ -49,6 +50,7 @@ object SipiADME2ESpec {
*
* This spec tests the 'admin/files'.
*/
@E2ETest
class SipiADME2ESpec extends E2ESpec(SipiADME2ESpec.config) with SessionJsonProtocol with TriplestoreJsonProtocol {

private implicit def default(implicit system: ActorSystem) = RouteTestTimeout(30.seconds)
Expand Down
Expand Up @@ -26,6 +26,7 @@ import com.typesafe.config.ConfigFactory
import org.knora.webapi.E2ESpec
import org.knora.webapi.messages.app.appmessages.SetAllowReloadOverHTTPState
import org.knora.webapi.messages.store.triplestoremessages.TriplestoreJsonProtocol
import org.knora.webapi.testing.tags.E2ETest
import spray.json._

import scala.concurrent.duration._
Expand All @@ -43,6 +44,7 @@ object StoreRouteADME2ESpec {
*
* This spec tests the 'v1/store' route.
*/
@E2ETest
class StoreRouteADME2ESpec extends E2ESpec(StoreRouteADME2ESpec.config) with TriplestoreJsonProtocol {

implicit def default(implicit system: ActorSystem) = RouteTestTimeout(120.seconds)
Expand Down
Expand Up @@ -4,6 +4,7 @@ import io.gatling.core.Predef._
import io.gatling.http.Predef._
import org.knora.webapi.E2ESimSpec
import org.knora.webapi.messages.store.triplestoremessages.RdfDataObject
import org.knora.webapi.testing.tags.E2ETest

import scala.concurrent.duration._
import scala.util.Random
Expand All @@ -16,6 +17,7 @@ import scala.util.Random
* while additional 20 users register themselves. The mean response time should be less
* then 300 ms (according to a quick google search, 200 ms are standard).
*/
@E2ETest
class UsersADME2ESimSpec extends E2ESimSpec {

// need to override this. before each test, the triplestore is automatically reloaded.
Expand Down
Expand Up @@ -32,6 +32,7 @@ import org.knora.webapi.messages.admin.responder.usersmessages.UsersADMJsonProto
import org.knora.webapi.messages.store.triplestoremessages.TriplestoreJsonProtocol
import org.knora.webapi.messages.v1.responder.sessionmessages.SessionJsonProtocol
import org.knora.webapi.messages.v1.routing.authenticationmessages.CredentialsV1
import org.knora.webapi.testing.tags.E2ETest
import org.knora.webapi.util.{AkkaHttpUtils, MutableTestIri}

import scala.concurrent.duration._
Expand All @@ -48,6 +49,7 @@ object UsersADME2ESpec {
/**
* End-to-End (E2E) test specification for testing users endpoint.
*/
@E2ETest
class UsersADME2ESpec extends E2ESpec(UsersADME2ESpec.config) with ProjectsADMJsonProtocol with GroupsADMJsonProtocol with SessionJsonProtocol with TriplestoreJsonProtocol {

implicit def default(implicit system: ActorSystem) = RouteTestTimeout(30.seconds)
Expand Down
Expand Up @@ -28,6 +28,7 @@ import com.typesafe.config.{Config, ConfigFactory}
import org.knora.webapi.messages.store.triplestoremessages.TriplestoreJsonProtocol
import org.knora.webapi.messages.v1.responder.sessionmessages.{SessionJsonProtocol, SessionResponse}
import org.knora.webapi.routing.Authenticator.KNORA_AUTHENTICATION_COOKIE_NAME
import org.knora.webapi.testing.tags.E2ETest
import org.knora.webapi.{E2ESpec, SharedTestDataV1}

import scala.concurrent.Await
Expand All @@ -47,6 +48,7 @@ object AuthenticationV1E2ESpec {
*
* This spec tests the 'v1/authentication' and 'v1/session' route.
*/
@E2ETest
class AuthenticationV1E2ESpec extends E2ESpec(AuthenticationV1E2ESpec.config) with SessionJsonProtocol with TriplestoreJsonProtocol {

private implicit def default(implicit system: ActorSystem) = RouteTestTimeout(30.seconds)
Expand Down
Expand Up @@ -29,6 +29,7 @@ import com.typesafe.config.ConfigFactory
import org.knora.webapi.E2ESpec
import org.knora.webapi.http.CORSSupport
import org.knora.webapi.messages.store.triplestoremessages.{RdfDataObject, TriplestoreJsonProtocol}
import org.knora.webapi.testing.tags.E2ETest

import scala.concurrent.Await
import scala.concurrent.duration._
Expand All @@ -44,6 +45,7 @@ object CORSSupportV1E2ESpec {
/**
* End-to-end test specification for testing [[CORSSupport]].
*/
@E2ETest
class CORSSupportV1E2ESpec extends E2ESpec(CORSSupportV1E2ESpec.config) with TriplestoreJsonProtocol {

/* set the timeout for the route test */
Expand Down
Expand Up @@ -3,12 +3,14 @@ package org.knora.webapi.e2e.v1
import akka.http.scaladsl.model.StatusCodes
import org.knora.webapi.E2ESpec
import org.knora.webapi.messages.store.triplestoremessages.TriplestoreJsonProtocol
import org.knora.webapi.testing.tags.E2ETest

import scala.concurrent.duration._

/**
* Causes an internal server error to see if logging is working correctly.
*/
@E2ETest
class ErrorV1E2ESpec extends E2ESpec with TriplestoreJsonProtocol {

"Make a request that causes an internal server error (unit type message)" in {
Expand Down
Expand Up @@ -26,6 +26,7 @@ import org.knora.webapi.messages.store.triplestoremessages.{RdfDataObject, Tripl
import org.knora.webapi.messages.v1.responder.listmessages._
import org.knora.webapi.messages.v1.responder.sessionmessages.SessionJsonProtocol
import org.knora.webapi.messages.v1.routing.authenticationmessages.CredentialsV1
import org.knora.webapi.testing.tags.E2ETest
import org.knora.webapi.{E2ESpec, SharedTestDataV1}

import scala.concurrent.duration._
Expand All @@ -41,6 +42,7 @@ object ListsV1E2ESpec {
/**
* End-to-End (E2E) test specification for testing users endpoint.
*/
@E2ETest
class ListsV1E2ESpec extends E2ESpec(ListsV1E2ESpec.config) with SessionJsonProtocol with TriplestoreJsonProtocol with ListV1JsonProtocol {

implicit def default(implicit system: ActorSystem) = RouteTestTimeout(5.seconds)
Expand Down
Expand Up @@ -24,6 +24,7 @@ import akka.http.scaladsl.model.headers.BasicHttpCredentials
import com.typesafe.config.ConfigFactory
import org.knora.webapi._
import org.knora.webapi.messages.store.triplestoremessages._
import org.knora.webapi.testing.tags.E2ETest

object PermissionsHandlingV1E2ESpec {
val config = ConfigFactory.parseString(
Expand All @@ -36,6 +37,7 @@ object PermissionsHandlingV1E2ESpec {
/**
* End-to-end test specification for testing the handling of permissions.
*/
@E2ETest
class PermissionsHandlingV1E2ESpec extends E2ESpec(PermissionsHandlingV1E2ESpec.config) with TriplestoreJsonProtocol {

private val rootUser = SharedTestDataV1.rootUser
Expand Down

0 comments on commit 32aaca2

Please sign in to comment.