Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: Run unit and E2E tests separately on Travis #1414

Merged
merged 4 commits into from Aug 30, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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