diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | .scalafmt | 24 | ||||
-rw-r--r-- | build.sbt | 40 | ||||
-rw-r--r-- | project/plugins.sbt | 2 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/app.scala (renamed from src/main/scala/com/drivergrp/core/app.scala) | 74 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/auth.scala (renamed from src/main/scala/com/drivergrp/core/auth.scala) | 18 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/config.scala (renamed from src/main/scala/com/drivergrp/core/config.scala) | 2 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/core.scala (renamed from src/main/scala/com/drivergrp/core/core.scala) | 2 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/crypto.scala (renamed from src/main/scala/com/drivergrp/core/crypto.scala) | 4 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/database.scala (renamed from src/main/scala/com/drivergrp/core/database.scala) | 4 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/file.scala (renamed from src/main/scala/com/drivergrp/core/file.scala) | 16 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/generators.scala (renamed from src/main/scala/com/drivergrp/core/generators.scala) | 6 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/json.scala (renamed from src/main/scala/com/drivergrp/core/json.scala) | 7 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/logging.scala (renamed from src/main/scala/com/drivergrp/core/logging.scala) | 4 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/messages.scala (renamed from src/main/scala/com/drivergrp/core/messages.scala) | 4 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/rest.scala (renamed from src/main/scala/com/drivergrp/core/rest.scala) | 14 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/stats.scala (renamed from src/main/scala/com/drivergrp/core/stats.scala) | 6 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/time.scala (renamed from src/main/scala/com/drivergrp/core/time.scala) | 2 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/AuthTest.scala (renamed from src/test/scala/com/drivergrp/core/AuthTest.scala) | 60 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/CoreTest.scala (renamed from src/test/scala/com/drivergrp/core/CoreTest.scala) | 6 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/FileTest.scala (renamed from src/test/scala/com/drivergrp/core/FileTest.scala) | 14 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/GeneratorsTest.scala (renamed from src/test/scala/com/drivergrp/core/GeneratorsTest.scala) | 6 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/JsonTest.scala (renamed from src/test/scala/com/drivergrp/core/JsonTest.scala) | 24 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/MessagesTest.scala (renamed from src/test/scala/com/drivergrp/core/MessagesTest.scala) | 20 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/StatsTest.scala (renamed from src/test/scala/com/drivergrp/core/StatsTest.scala) | 10 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/TimeTest.scala (renamed from src/test/scala/com/drivergrp/core/TimeTest.scala) | 12 |
26 files changed, 181 insertions, 201 deletions
@@ -18,4 +18,5 @@ project/plugins/project/ .idea/ .idea .scalafmt +.scalafmt.conf scalastyle-config.xml diff --git a/.scalafmt b/.scalafmt deleted file mode 100644 index 5226b38..0000000 --- a/.scalafmt +++ /dev/null @@ -1,24 +0,0 @@ -# scalafmt sbt plugin config -# refer to https://olafurpg.github.io/scalafmt/#Configuration for properties - ---style defaultWithAlign # For pretty alignment. ---maxColumn 120 # For my wide 30" display. - ---reformatDocstrings true ---scalaDocs - ---continuationIndentCallSite 4 ---continuationIndentDefnSite 4 - ---rewriteTokens ⇒;=>,←;<- ---danglingParentheses false ---spaceAfterTripleEquals true ---alignByArrowEnumeratorGenerator true ---binPackParentConstructors true ---allowNewlineBeforeColonInMassiveReturnTypes true ---spacesInImportCurlyBraces false - -# --alignByOpenParenCallSite <value> -# --alignByOpenParenDefnSite <value> - -
\ No newline at end of file @@ -3,26 +3,26 @@ import Keys._ lazy val akkaHttpV = "2.4.8" -lazy val core = (project in file(".")). - settings(name := "core"). - settings( +lazy val core = (project in file(".")) + .settings(name := "core") + .settings( libraryDependencies ++= Seq( - "com.typesafe.akka" %% "akka-http-core" % akkaHttpV, - "com.typesafe.akka" %% "akka-http-experimental" % akkaHttpV, - "com.typesafe.akka" %% "akka-http-jackson-experimental" % akkaHttpV, - "com.typesafe.akka" %% "akka-http-spray-json-experimental" % akkaHttpV, - "com.typesafe.akka" %% "akka-http-testkit" % akkaHttpV, - "org.scalatest" % "scalatest_2.11" % "2.2.6" % "test", - "org.scalacheck" %% "scalacheck" % "1.12.5" % "test", - "org.mockito" % "mockito-core" % "1.9.5" % "test", - "com.amazonaws" % "aws-java-sdk-s3" % "1.11.26", - "com.typesafe.slick" %% "slick" % "3.1.1", - "com.typesafe" % "config" % "1.2.1", - "com.typesafe.scala-logging" %% "scala-logging" % "3.1.0", - "ch.qos.logback" % "logback-classic" % "1.1.3", - "org.slf4j" % "slf4j-nop" % "1.6.4", - "com.github.swagger-akka-http" %% "swagger-akka-http" % "0.7.1" + "com.typesafe.akka" %% "akka-http-core" % akkaHttpV, + "com.typesafe.akka" %% "akka-http-experimental" % akkaHttpV, + "com.typesafe.akka" %% "akka-http-jackson-experimental" % akkaHttpV, + "com.typesafe.akka" %% "akka-http-spray-json-experimental" % akkaHttpV, + "com.typesafe.akka" %% "akka-http-testkit" % akkaHttpV, + "org.scalatest" % "scalatest_2.11" % "2.2.6" % "test", + "org.scalacheck" %% "scalacheck" % "1.12.5" % "test", + "org.mockito" % "mockito-core" % "1.9.5" % "test", + "com.amazonaws" % "aws-java-sdk-s3" % "1.11.26", + "com.typesafe.slick" %% "slick" % "3.1.1", + "com.typesafe" % "config" % "1.2.1", + "com.typesafe.scala-logging" %% "scala-logging" % "3.1.0", + "ch.qos.logback" % "logback-classic" % "1.1.3", + "org.slf4j" % "slf4j-nop" % "1.6.4", + "com.github.swagger-akka-http" %% "swagger-akka-http" % "0.7.1" )) .gitPluginConfiguration - .settings (lintingSettings ++ formatSettings) - .settings (repositoriesSettings ++ publicationSettings ++ releaseSettings) + .settings(lintingSettings ++ formatSettings) + .settings(repositoriesSettings ++ publicationSettings ++ releaseSettings) diff --git a/project/plugins.sbt b/project/plugins.sbt index dde5a53..637ac2d 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,4 +1,4 @@ resolvers += "releases" at "https://drivergrp.jfrog.io/drivergrp/releases" credentials += Credentials("Artifactory Realm", "drivergrp.jfrog.io", "sbt-publisher", "ANC-d8X-Whm-USS") -addSbtPlugin("xyz.driver" % "sbt-settings" % "0.5.16") +addSbtPlugin("xyz.driver" % "sbt-settings" % "0.5.26") diff --git a/src/main/scala/com/drivergrp/core/app.scala b/src/main/scala/xyz/driver/core/app.scala index f6100f0..e080e1b 100644 --- a/src/main/scala/com/drivergrp/core/app.scala +++ b/src/main/scala/xyz/driver/core/app.scala @@ -1,4 +1,4 @@ -package com.drivergrp.core +package xyz.driver.core import akka.actor.ActorSystem import akka.http.scaladsl.Http @@ -9,14 +9,15 @@ import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.RouteResult._ import akka.http.scaladsl.server.{ExceptionHandler, Route, RouteConcatenation} import akka.stream.ActorMaterializer -import com.drivergrp.core.logging.{Logger, TypesafeScalaLogger} -import com.drivergrp.core.rest.Swagger -import com.drivergrp.core.stats.SystemStats -import com.drivergrp.core.time.Time -import com.drivergrp.core.time.provider.{SystemTimeProvider, TimeProvider} import com.typesafe.config.Config import org.slf4j.LoggerFactory import spray.json.DefaultJsonProtocol +import xyz.driver.core +import xyz.driver.core.logging.{Logger, TypesafeScalaLogger} +import xyz.driver.core.rest.Swagger +import xyz.driver.core.stats.SystemStats +import xyz.driver.core.time.Time +import xyz.driver.core.time.provider.{SystemTimeProvider, TimeProvider} import scala.compat.Platform.ConcurrentModificationException import scala.concurrent.duration._ @@ -29,8 +30,8 @@ object app { modules: Seq[Module], time: TimeProvider = new SystemTimeProvider(), log: Logger = new TypesafeScalaLogger( - com.typesafe.scalalogging.Logger(LoggerFactory.getLogger(classOf[DriverApp]))), - config: Config = com.drivergrp.core.config.loadDefaultConfig, + com.typesafe.scalalogging.Logger(LoggerFactory.getLogger(classOf[DriverApp]))), + config: Config = core.config.loadDefaultConfig, interface: String = "::0", baseUrl: String = "localhost:8080", port: Int = 8080) { @@ -71,8 +72,8 @@ object app { log.debug(s"Request is not allowed to $uri ($requestUuid)", is) complete( - HttpResponse(BadRequest, - entity = s"""{ "requestUuid": "$requestUuid", "message": "${is.getMessage}" }""")) + HttpResponse(BadRequest, + entity = s"""{ "requestUuid": "$requestUuid", "message": "${is.getMessage}" }""")) } case cm: ConcurrentModificationException => @@ -82,8 +83,7 @@ object app { log.debug(s"Concurrent modification of the resource $uri ($requestUuid)", cm) complete( - HttpResponse(Conflict, - entity = s"""{ "requestUuid": "$requestUuid", "message": "${cm.getMessage}" }""")) + HttpResponse(Conflict, entity = s"""{ "requestUuid": "$requestUuid", "message": "${cm.getMessage}" }""")) } case t: Throwable => @@ -93,8 +93,8 @@ object app { log.error(s"Request to $uri could not be handled normally ($requestUuid)", t) complete( - HttpResponse(InternalServerError, - entity = s"""{ "requestUuid": "$requestUuid", "message": "${t.getMessage}" }""")) + HttpResponse(InternalServerError, + entity = s"""{ "requestUuid": "$requestUuid", "message": "${t.getMessage}" }""")) } } @@ -112,14 +112,14 @@ object app { path("version") { val currentTime = time.currentTime().millis complete( - Map( - "version" -> version, - "gitHash" -> gitHash, - "modules" -> modules.map(_.name).mkString(", "), - "startupTime" -> startupTime.millis.toString, - "serverTime" -> currentTime.toString, - "uptime" -> (currentTime - startupTime.millis).toString - )) + Map( + "version" -> version, + "gitHash" -> gitHash, + "modules" -> modules.map(_.name).mkString(", "), + "startupTime" -> startupTime.millis.toString, + "serverTime" -> currentTime.toString, + "uptime" -> (currentTime - startupTime.millis).toString + )) } } @@ -133,25 +133,25 @@ object app { path("health") { complete( - Map( - "availableProcessors" -> SystemStats.availableProcessors.toJson, - "memoryUsage" -> Map( - "free" -> memoryUsage.free.toJson, - "total" -> memoryUsage.total.toJson, - "max" -> memoryUsage.max.toJson - ).toJson, - "gcStats" -> Map( - "garbageCollectionTime" -> gcStats.garbageCollectionTime.toJson, - "totalGarbageCollections" -> gcStats.totalGarbageCollections.toJson - ).toJson, - "fileSystemSpace" -> SystemStats.fileSystemSpace.map { f => + Map( + "availableProcessors" -> SystemStats.availableProcessors.toJson, + "memoryUsage" -> Map( + "free" -> memoryUsage.free.toJson, + "total" -> memoryUsage.total.toJson, + "max" -> memoryUsage.max.toJson + ).toJson, + "gcStats" -> Map( + "garbageCollectionTime" -> gcStats.garbageCollectionTime.toJson, + "totalGarbageCollections" -> gcStats.totalGarbageCollections.toJson + ).toJson, + "fileSystemSpace" -> SystemStats.fileSystemSpace.map { f => Map("path" -> f.path.toJson, "freeSpace" -> f.freeSpace.toJson, "totalSpace" -> f.totalSpace.toJson, "usableSpace" -> f.usableSpace.toJson) }.toJson, - "operatingSystem" -> SystemStats.operatingSystemStats.toJson - )) + "operatingSystem" -> SystemStats.operatingSystemStats.toJson + )) } } @@ -206,7 +206,7 @@ object app { } class EmptyModule extends Module { - val name = "Nothing" + val name = "Nothing" def route: Route = complete(StatusCodes.OK) def routeTypes = Seq.empty[Type] } diff --git a/src/main/scala/com/drivergrp/core/auth.scala b/src/main/scala/xyz/driver/core/auth.scala index e857ef0..874f1e1 100644 --- a/src/main/scala/com/drivergrp/core/auth.scala +++ b/src/main/scala/xyz/driver/core/auth.scala @@ -1,4 +1,4 @@ -package com.drivergrp.core +package xyz.driver.core import akka.http.scaladsl.model.headers.HttpChallenges import akka.http.scaladsl.server.AuthenticationFailedRejection.CredentialsRejected @@ -87,21 +87,22 @@ object auth { protected def authStatus(authToken: AuthToken): OptionT[Future, U] - def authorize(permission: Permission): Directive1[(AuthToken, U)] = { + def authorize(permissions: Permission*): Directive1[(AuthToken, U)] = { parameters('authToken.?).flatMap { parameterTokenValue => optionalHeaderValueByName(AuthService.AuthenticationTokenHeader).flatMap { headerTokenValue => - verifyAuthToken(headerTokenValue.orElse(parameterTokenValue), permission) + verifyAuthToken(headerTokenValue.orElse(parameterTokenValue), permissions.toSet) } } } - private def verifyAuthToken(tokenOption: Option[String], permission: Permission): Directive1[(AuthToken, U)] = + private def verifyAuthToken(tokenOption: Option[String], + permissions: Set[Permission]): Directive1[(AuthToken, U)] = tokenOption match { case Some(tokenValue) => val token = AuthToken(Base64[Macaroon](tokenValue)) onComplete(authStatus(token).run).flatMap { tokenUserResult => - checkPermissions(tokenUserResult, permission, token) + checkPermissions(tokenUserResult, permissions, token) } case None => @@ -109,13 +110,14 @@ object auth { } private def checkPermissions(userResult: Try[Option[U]], - permission: Permission, + permissions: Set[Permission], token: AuthToken): Directive1[(AuthToken, U)] = { userResult match { case Success(Some(user)) => - if (user.roles.exists(_.hasPermission(permission))) provide(token -> user) + if (permissions.forall(user.permissions.contains)) provide(token -> user) else { - val challenge = HttpChallenges.basic(s"User does not have the required permission $permission") + val challenge = + HttpChallenges.basic(s"User does not have the required permissions: ${permissions.mkString(", ")}") reject(AuthenticationFailedRejection(CredentialsRejected, challenge)) } diff --git a/src/main/scala/com/drivergrp/core/config.scala b/src/main/scala/xyz/driver/core/config.scala index 29cd9ed..112986e 100644 --- a/src/main/scala/com/drivergrp/core/config.scala +++ b/src/main/scala/xyz/driver/core/config.scala @@ -1,4 +1,4 @@ -package com.drivergrp.core +package xyz.driver.core import java.io.File import com.typesafe.config.{Config, ConfigFactory} diff --git a/src/main/scala/com/drivergrp/core/core.scala b/src/main/scala/xyz/driver/core/core.scala index 158447f..b7fbeb6 100644 --- a/src/main/scala/com/drivergrp/core/core.scala +++ b/src/main/scala/xyz/driver/core/core.scala @@ -1,4 +1,4 @@ -package com.drivergrp +package xyz.driver import scalaz.Equal diff --git a/src/main/scala/com/drivergrp/core/crypto.scala b/src/main/scala/xyz/driver/core/crypto.scala index 5f63eb9..d001e0f 100644 --- a/src/main/scala/com/drivergrp/core/crypto.scala +++ b/src/main/scala/xyz/driver/core/crypto.scala @@ -1,6 +1,6 @@ -package com.drivergrp.core +package xyz.driver.core -import com.drivergrp.core.auth.AuthToken +import xyz.driver.core.auth.AuthToken object crypto { diff --git a/src/main/scala/com/drivergrp/core/database.scala b/src/main/scala/xyz/driver/core/database.scala index 581c5de..1039be4 100644 --- a/src/main/scala/com/drivergrp/core/database.scala +++ b/src/main/scala/xyz/driver/core/database.scala @@ -1,6 +1,6 @@ -package com.drivergrp.core +package xyz.driver.core -import com.drivergrp.core.time.Time +import xyz.driver.core.time.Time import scala.concurrent.Future import slick.backend.DatabaseConfig diff --git a/src/main/scala/com/drivergrp/core/file.scala b/src/main/scala/xyz/driver/core/file.scala index 20bd36e..93715d0 100644 --- a/src/main/scala/com/drivergrp/core/file.scala +++ b/src/main/scala/xyz/driver/core/file.scala @@ -1,4 +1,4 @@ -package com.drivergrp.core +package xyz.driver.core import java.io.File import java.nio.file.{Path, Paths} @@ -6,8 +6,8 @@ import java.util.UUID._ import com.amazonaws.services.s3.AmazonS3 import com.amazonaws.services.s3.model.{Bucket, GetObjectRequest, ListObjectsV2Request} -import com.drivergrp.core.revision.Revision -import com.drivergrp.core.time.Time +import xyz.driver.core.revision.Revision +import xyz.driver.core.time.Time import scala.concurrent.{ExecutionContext, Future} import scalaz.{ListT, OptionT} @@ -15,10 +15,10 @@ import scalaz.{ListT, OptionT} object file { final case class FileLink( - name: Name[File], - location: Path, - revision: Revision[File], - lastModificationDate: Time + name: Name[File], + location: Path, + revision: Revision[File], + lastModificationDate: Time ) trait FileService { @@ -114,7 +114,7 @@ object file { if (localSource.renameTo(destinationFile)) () else { throw new Exception( - s"Failed to move file from `${localSource.getCanonicalPath}` to `${destinationFile.getCanonicalPath}`") + s"Failed to move file from `${localSource.getCanonicalPath}` to `${destinationFile.getCanonicalPath}`") } } else { throw new Exception(s"Failed to create parent directories for file `${destinationFile.getCanonicalPath}`") diff --git a/src/main/scala/com/drivergrp/core/generators.scala b/src/main/scala/xyz/driver/core/generators.scala index 10df7db..bb026a9 100644 --- a/src/main/scala/com/drivergrp/core/generators.scala +++ b/src/main/scala/xyz/driver/core/generators.scala @@ -1,9 +1,9 @@ -package com.drivergrp.core +package xyz.driver.core import java.math.MathContext -import com.drivergrp.core.revision.Revision -import com.drivergrp.core.time.{Time, TimeRange} +import xyz.driver.core.revision.Revision +import xyz.driver.core.time.{Time, TimeRange} import scala.reflect.ClassTag import scala.util.Random diff --git a/src/main/scala/com/drivergrp/core/json.scala b/src/main/scala/xyz/driver/core/json.scala index 9a30161..51679c3 100644 --- a/src/main/scala/com/drivergrp/core/json.scala +++ b/src/main/scala/xyz/driver/core/json.scala @@ -1,12 +1,13 @@ -package com.drivergrp.core +package xyz.driver.core import akka.http.scaladsl.model.Uri.Path import akka.http.scaladsl.server.PathMatcher.Matched import akka.http.scaladsl.server.{PathMatcher, _} import akka.http.scaladsl.unmarshalling.Unmarshaller -import com.drivergrp.core.revision.Revision -import com.drivergrp.core.time.Time +import xyz.driver.core.revision.Revision +import xyz.driver.core.time.Time import spray.json.{DeserializationException, JsNumber, _} +import xyz.driver.core.time.Time import scala.reflect.runtime.universe._ diff --git a/src/main/scala/com/drivergrp/core/logging.scala b/src/main/scala/xyz/driver/core/logging.scala index 2c8c670..599c824 100644 --- a/src/main/scala/com/drivergrp/core/logging.scala +++ b/src/main/scala/xyz/driver/core/logging.scala @@ -1,4 +1,4 @@ -package com.drivergrp.core +package xyz.driver.core import java.text.SimpleDateFormat import java.util.Date @@ -168,7 +168,7 @@ object logging { private def logContext(message: StringBuilder, loggingEvent: ILoggingEvent) = { Option(loggingEvent.getMDCPropertyMap).map(_.asScala).filter(_.nonEmpty).foreach { context => message.append( - context map { case (key, value) => s"$key$FieldSeparator$value" } mkString ("Context: ", " ", newline) + context map { case (key, value) => s"$key$FieldSeparator$value" } mkString ("Context: ", " ", newline) ) } } diff --git a/src/main/scala/com/drivergrp/core/messages.scala b/src/main/scala/xyz/driver/core/messages.scala index 3a97401..94d9889 100644 --- a/src/main/scala/com/drivergrp/core/messages.scala +++ b/src/main/scala/xyz/driver/core/messages.scala @@ -1,9 +1,9 @@ -package com.drivergrp.core +package xyz.driver.core import java.util.Locale -import com.drivergrp.core.logging.Logger import com.typesafe.config.Config +import xyz.driver.core.logging.Logger import scala.collection.JavaConverters._ diff --git a/src/main/scala/com/drivergrp/core/rest.scala b/src/main/scala/xyz/driver/core/rest.scala index d97e13e..c615d99 100644 --- a/src/main/scala/com/drivergrp/core/rest.scala +++ b/src/main/scala/xyz/driver/core/rest.scala @@ -1,4 +1,4 @@ -package com.drivergrp.core +package xyz.driver.core import akka.actor.ActorSystem import akka.http.scaladsl.Http @@ -8,15 +8,15 @@ import akka.http.scaladsl.unmarshalling.Unmarshal import akka.stream.ActorMaterializer import akka.stream.scaladsl.Flow import akka.util.ByteString -import com.drivergrp.core.auth.{AuthService, AuthToken} -import com.drivergrp.core.crypto.Crypto -import com.drivergrp.core.logging.Logger -import com.drivergrp.core.stats.Stats -import com.drivergrp.core.time.TimeRange -import com.drivergrp.core.time.provider.TimeProvider import com.github.swagger.akka.model._ import com.github.swagger.akka.{HasActorSystem, SwaggerHttpService} import com.typesafe.config.Config +import xyz.driver.core.auth.{AuthService, AuthToken} +import xyz.driver.core.crypto.Crypto +import xyz.driver.core.logging.Logger +import xyz.driver.core.stats.Stats +import xyz.driver.core.time.TimeRange +import xyz.driver.core.time.provider.TimeProvider import scala.concurrent.{ExecutionContext, Future} import scala.util.{Failure, Success} diff --git a/src/main/scala/com/drivergrp/core/stats.scala b/src/main/scala/xyz/driver/core/stats.scala index 2af4b6a..5759012 100644 --- a/src/main/scala/com/drivergrp/core/stats.scala +++ b/src/main/scala/xyz/driver/core/stats.scala @@ -1,11 +1,11 @@ -package com.drivergrp.core +package xyz.driver.core import java.io.File import java.lang.management.ManagementFactory import java.lang.reflect.Modifier -import com.drivergrp.core.logging.Logger -import com.drivergrp.core.time.{Time, TimeRange} +import xyz.driver.core.logging.Logger +import xyz.driver.core.time.{Time, TimeRange} object stats { diff --git a/src/main/scala/com/drivergrp/core/time.scala b/src/main/scala/xyz/driver/core/time.scala index 9bafb00..625d6a2 100644 --- a/src/main/scala/com/drivergrp/core/time.scala +++ b/src/main/scala/xyz/driver/core/time.scala @@ -1,4 +1,4 @@ -package com.drivergrp.core +package xyz.driver.core import java.text.SimpleDateFormat import java.util._ diff --git a/src/test/scala/com/drivergrp/core/AuthTest.scala b/src/test/scala/xyz/driver/core/AuthTest.scala index 42f9155..fef3eda 100644 --- a/src/test/scala/com/drivergrp/core/AuthTest.scala +++ b/src/test/scala/xyz/driver/core/AuthTest.scala @@ -1,6 +1,5 @@ -package com.drivergrp.core +package xyz.driver.core -import com.drivergrp.core.auth._ import akka.http.scaladsl.testkit.ScalatestRouteTest import akka.http.scaladsl.server._ import Directives._ @@ -8,6 +7,7 @@ import akka.http.scaladsl.model.headers.{HttpChallenges, RawHeader} import akka.http.scaladsl.server.AuthenticationFailedRejection.CredentialsRejected import org.scalatest.mock.MockitoSugar import org.scalatest.{FlatSpec, Matchers} +import xyz.driver.core.auth._ import scala.concurrent.Future import scalaz.OptionT @@ -28,14 +28,14 @@ class AuthTest extends FlatSpec with Matchers with MockitoSugar with ScalatestRo "'authorize' directive" should "throw error is auth token is not in the request" in { Get("/naive/attempt") ~> - authorize(CanSignOutReport) { - case (authToken, user) => - complete("Never going to be here") - } ~> - check { - handled shouldBe false - rejections should contain(MissingHeaderRejection("WWW-Authenticate")) - } + authorize(CanSignOutReport) { + case (authToken, user) => + complete("Never going to be here") + } ~> + check { + handled shouldBe false + rejections should contain(MissingHeaderRejection("WWW-Authenticate")) + } } it should "throw error is authorized user is not having the requested permission" in { @@ -43,19 +43,19 @@ class AuthTest extends FlatSpec with Matchers with MockitoSugar with ScalatestRo val referenceAuthToken = AuthToken(Base64("I am a pathologist's token")) Post("/administration/attempt").addHeader( - RawHeader(AuthService.AuthenticationTokenHeader, referenceAuthToken.value.value) + RawHeader(AuthService.AuthenticationTokenHeader, referenceAuthToken.value.value) ) ~> - authorize(CanAssignRoles) { - case (authToken, user) => - complete("Never going to get here") - } ~> - check { - handled shouldBe false - rejections should contain( + authorize(CanAssignRoles) { + case (authToken, user) => + complete("Never going to get here") + } ~> + check { + handled shouldBe false + rejections should contain( AuthenticationFailedRejection( - CredentialsRejected, - HttpChallenges.basic("User does not have the required permission CanAssignRoles"))) - } + CredentialsRejected, + HttpChallenges.basic("User does not have the required permissions: CanAssignRoles"))) + } } it should "pass and retrieve the token to client code, if token is in request and user has permission" in { @@ -63,15 +63,15 @@ class AuthTest extends FlatSpec with Matchers with MockitoSugar with ScalatestRo val referenceAuthToken = AuthToken(Base64("I am token")) Get("/valid/attempt/?a=2&b=5").addHeader( - RawHeader(AuthService.AuthenticationTokenHeader, referenceAuthToken.value.value) + RawHeader(AuthService.AuthenticationTokenHeader, referenceAuthToken.value.value) ) ~> - authorize(CanSignOutReport) { - case (authToken, user) => - complete("Alright, \"" + authToken.value.value + "\" is handled") - } ~> - check { - handled shouldBe true - responseAs[String] shouldBe "Alright, \"I am token\" is handled" - } + authorize(CanSignOutReport) { + case (authToken, user) => + complete("Alright, \"" + authToken.value.value + "\" is handled") + } ~> + check { + handled shouldBe true + responseAs[String] shouldBe "Alright, \"I am token\" is handled" + } } } diff --git a/src/test/scala/com/drivergrp/core/CoreTest.scala b/src/test/scala/xyz/driver/core/CoreTest.scala index 19e685c..f9a1aab 100644 --- a/src/test/scala/com/drivergrp/core/CoreTest.scala +++ b/src/test/scala/xyz/driver/core/CoreTest.scala @@ -1,11 +1,11 @@ -package com.drivergrp.core +package xyz.driver.core import java.io.ByteArrayOutputStream -import com.drivergrp.core.revision.Revision +import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FlatSpec, Matchers} -import org.mockito.Mockito._ +import xyz.driver.core.revision.Revision class CoreTest extends FlatSpec with Matchers with MockitoSugar { diff --git a/src/test/scala/com/drivergrp/core/FileTest.scala b/src/test/scala/xyz/driver/core/FileTest.scala index 2c9c2c9..aba79f7 100644 --- a/src/test/scala/com/drivergrp/core/FileTest.scala +++ b/src/test/scala/xyz/driver/core/FileTest.scala @@ -1,15 +1,15 @@ -package com.drivergrp.core +package xyz.driver.core import java.io.File import java.nio.file.Paths import com.amazonaws.services.s3.AmazonS3 import com.amazonaws.services.s3.model._ -import com.drivergrp.core.file.{FileSystemStorage, S3Storage} +import org.mockito.Matchers._ +import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FlatSpec, Matchers} -import org.mockito.Mockito._ -import org.mockito.Matchers._ +import xyz.driver.core.file.{FileSystemStorage, S3Storage} import scala.concurrent.Await import scala.concurrent.duration._ @@ -44,9 +44,9 @@ class FileTest extends FlatSpec with Matchers with MockitoSugar { false, // after file is uploaded it contains this one file (one page) false) // after file is deleted it is empty (zero pages) again when(s3ResultsMock.getObjectSummaries).thenReturn( - // before file created it is empty, `getObjectSummaries` is never called - List[S3ObjectSummary](s3ObjectSummaryMock).asJava, // after file is uploaded it contains this one file - List.empty[S3ObjectSummary].asJava) // after file is deleted it is empty again + // before file created it is empty, `getObjectSummaries` is never called + List[S3ObjectSummary](s3ObjectSummaryMock).asJava, // after file is uploaded it contains this one file + List.empty[S3ObjectSummary].asJava) // after file is deleted it is empty again val s3ObjectMetadataMock = mock[ObjectMetadata] val amazonS3Mock = mock[AmazonS3] diff --git a/src/test/scala/com/drivergrp/core/GeneratorsTest.scala b/src/test/scala/xyz/driver/core/GeneratorsTest.scala index 631149e..0432b2a 100644 --- a/src/test/scala/com/drivergrp/core/GeneratorsTest.scala +++ b/src/test/scala/xyz/driver/core/GeneratorsTest.scala @@ -1,4 +1,4 @@ -package com.drivergrp.core +package xyz.driver.core import org.scalatest.{Assertions, FlatSpec, Matchers} @@ -86,7 +86,7 @@ class GeneratorsTest extends FlatSpec with Matchers with Assertions { generatedPair._2.length should be > 0 nextPair(nextId[Int](), nextName[Int]()) should not be - nextPair(nextId[Int](), nextName[Int]()) + nextPair(nextId[Int](), nextName[Int]()) } it should "be able to generate a triad of two generated values" in { @@ -103,7 +103,7 @@ class GeneratorsTest extends FlatSpec with Matchers with Assertions { generatedTriad._3 should be >= BigDecimal(0.00) nextTriad(nextId[Int](), nextName[Int](), nextBigDecimal()) should not be - nextTriad(nextId[Int](), nextName[Int](), nextBigDecimal()) + nextTriad(nextId[Int](), nextName[Int](), nextBigDecimal()) } it should "be able to generate a time value" in { diff --git a/src/test/scala/com/drivergrp/core/JsonTest.scala b/src/test/scala/xyz/driver/core/JsonTest.scala index 125e97c..bcdcd5d 100644 --- a/src/test/scala/com/drivergrp/core/JsonTest.scala +++ b/src/test/scala/xyz/driver/core/JsonTest.scala @@ -1,9 +1,9 @@ -package com.drivergrp.core +package xyz.driver.core -import com.drivergrp.core.json.{EnumJsonFormat, ValueClassFormat} -import com.drivergrp.core.revision.Revision -import com.drivergrp.core.time.provider.SystemTimeProvider import org.scalatest.{FlatSpec, Matchers} +import xyz.driver.core.json.{EnumJsonFormat, ValueClassFormat} +import xyz.driver.core.revision.Revision +import xyz.driver.core.time.provider.SystemTimeProvider class JsonTest extends FlatSpec with Matchers { @@ -11,10 +11,10 @@ class JsonTest extends FlatSpec with Matchers { val referenceId = Id[String](1312L) - val writtenJson = com.drivergrp.core.json.idFormat.write(referenceId) + val writtenJson = json.idFormat.write(referenceId) writtenJson.prettyPrint should be("1312") - val parsedId = com.drivergrp.core.json.idFormat.read(writtenJson) + val parsedId = json.idFormat.read(writtenJson) parsedId should be(referenceId) } @@ -22,10 +22,10 @@ class JsonTest extends FlatSpec with Matchers { val referenceName = Name[String]("Homer") - val writtenJson = com.drivergrp.core.json.nameFormat.write(referenceName) + val writtenJson = json.nameFormat.write(referenceName) writtenJson.prettyPrint should be("\"Homer\"") - val parsedName = com.drivergrp.core.json.nameFormat.read(writtenJson) + val parsedName = json.nameFormat.read(writtenJson) parsedName should be(referenceName) } @@ -33,10 +33,10 @@ class JsonTest extends FlatSpec with Matchers { val referenceTime = new SystemTimeProvider().currentTime() - val writtenJson = com.drivergrp.core.json.timeFormat.write(referenceTime) + val writtenJson = json.timeFormat.write(referenceTime) writtenJson.prettyPrint should be("{\n \"timestamp\": " + referenceTime.millis + "\n}") - val parsedTime = com.drivergrp.core.json.timeFormat.read(writtenJson) + val parsedTime = json.timeFormat.read(writtenJson) parsedTime should be(referenceTime) } @@ -44,10 +44,10 @@ class JsonTest extends FlatSpec with Matchers { val referenceRevision = Revision[String]("037e2ec0-8901-44ac-8e53-6d39f6479db4") - val writtenJson = com.drivergrp.core.json.revisionFormat.write(referenceRevision) + val writtenJson = json.revisionFormat.write(referenceRevision) writtenJson.prettyPrint should be("\"" + referenceRevision.id + "\"") - val parsedRevision = com.drivergrp.core.json.revisionFormat.read(writtenJson) + val parsedRevision = json.revisionFormat.read(writtenJson) parsedRevision should be(referenceRevision) } diff --git a/src/test/scala/com/drivergrp/core/MessagesTest.scala b/src/test/scala/xyz/driver/core/MessagesTest.scala index 21fe30a..dc44ee1 100644 --- a/src/test/scala/com/drivergrp/core/MessagesTest.scala +++ b/src/test/scala/xyz/driver/core/MessagesTest.scala @@ -1,13 +1,13 @@ -package com.drivergrp.core +package xyz.driver.core import java.util.Locale -import com.drivergrp.core.logging.Logger -import com.drivergrp.core.messages.Messages import com.typesafe.config.{ConfigException, ConfigFactory} import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FlatSpec, Matchers} +import xyz.driver.core.logging.Logger +import xyz.driver.core.messages.Messages import scala.collection.JavaConversions._ @@ -33,11 +33,11 @@ class MessagesTest extends FlatSpec with Matchers with MockitoSugar { val log = mock[Logger] val messagesConfig = ConfigFactory.parseMap( - englishLocaleMessages ++ Map( - "zh.hello" -> "你好,世界!", - "zh.greeting" -> "你好,{0}!", - "zh.greetingFullName" -> "你好,{0} {1} {2}!" - )) + englishLocaleMessages ++ Map( + "zh.hello" -> "你好,世界!", + "zh.greeting" -> "你好,{0}!", + "zh.greetingFullName" -> "你好,{0} {1} {2}!" + )) val englishMessages = Messages.messages(messagesConfig, log, Locale.US) val englishMessagesToo = Messages.messages(messagesConfig, log, Locale.ENGLISH) @@ -50,7 +50,7 @@ class MessagesTest extends FlatSpec with Matchers with MockitoSugar { englishMessagesToo("hello") should be(englishMessages("hello")) englishMessagesToo("greeting", "Homer") should be(englishMessages("greeting", "Homer")) englishMessagesToo("greetingFullName", "Homer", "J", "Simpson") should be( - englishMessages("greetingFullName", "Homer", "J", "Simpson")) + englishMessages("greetingFullName", "Homer", "J", "Simpson")) chineseMessages("hello") should be("你好,世界!") chineseMessages("greeting", "Homer") should be("你好,Homer!") @@ -63,7 +63,7 @@ class MessagesTest extends FlatSpec with Matchers with MockitoSugar { val messagesConfig = ConfigFactory.parseMap(englishLocaleMessages) an[ConfigException.Missing] should be thrownBy - Messages.messages(messagesConfig, log, Locale.GERMAN) + Messages.messages(messagesConfig, log, Locale.GERMAN) } it should "log a problem, when there is no message for key" in { diff --git a/src/test/scala/com/drivergrp/core/StatsTest.scala b/src/test/scala/xyz/driver/core/StatsTest.scala index c4f449b..27ea1bd 100644 --- a/src/test/scala/com/drivergrp/core/StatsTest.scala +++ b/src/test/scala/xyz/driver/core/StatsTest.scala @@ -1,11 +1,11 @@ -package com.drivergrp.core +package xyz.driver.core -import com.drivergrp.core.logging.Logger -import com.drivergrp.core.stats.LogStats -import com.drivergrp.core.time.{Time, TimeRange} +import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FlatSpec, Matchers} -import org.mockito.Mockito._ +import xyz.driver.core.logging.Logger +import xyz.driver.core.stats.LogStats +import xyz.driver.core.time.{Time, TimeRange} class StatsTest extends FlatSpec with Matchers with MockitoSugar { diff --git a/src/test/scala/com/drivergrp/core/TimeTest.scala b/src/test/scala/xyz/driver/core/TimeTest.scala index b928413..76ef42c 100644 --- a/src/test/scala/com/drivergrp/core/TimeTest.scala +++ b/src/test/scala/xyz/driver/core/TimeTest.scala @@ -1,13 +1,13 @@ -package com.drivergrp.core +package xyz.driver.core import java.util.TimeZone -import com.drivergrp.core.time.{Time, _} -import org.scalacheck.{Arbitrary, Gen} -import org.scalatest.{FlatSpec, Matchers} -import org.scalatest.prop.Checkers import org.scalacheck.Arbitrary._ import org.scalacheck.Prop.BooleanOperators +import org.scalacheck.{Arbitrary, Gen} +import org.scalatest.prop.Checkers +import org.scalatest.{FlatSpec, Matchers} +import xyz.driver.core.time.{Time, _} import scala.concurrent.duration._ @@ -56,7 +56,7 @@ class TimeTest extends FlatSpec with Matchers with Checkers { it should "have ordering defined correctly" in { Seq(Time(321L), Time(123L), Time(231L)).sorted should - contain theSameElementsInOrderAs Seq(Time(123L), Time(231L), Time(321L)) + contain theSameElementsInOrderAs Seq(Time(123L), Time(231L), Time(321L)) check { times: List[Time] => times.sorted.sliding(2).filter(_.size == 2).forall { |