Skip to content

Commit

Permalink
Merge 2741eca into 9c27887
Browse files Browse the repository at this point in the history
  • Loading branch information
tototoshi committed Sep 1, 2017
2 parents 9c27887 + 2741eca commit 52083bc
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 18 deletions.
8 changes: 5 additions & 3 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@ version := "0.0.2"

scalaVersion := "2.11.6"

scalacOptions ++= Seq("-deprecation")

resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"

libraryDependencies ++= Seq(
"com.typesafe.play" %% "play" % "2.5.4" % "provided",
"com.typesafe.play" %% "play-test" % "2.5.4" % "test",
"org.scalatest" %% "scalatest" % "2.1.5" % "test"
"com.typesafe.play" %% "play" % "2.6.3" % "provided",
"com.typesafe.play" %% "play-test" % "2.6.3" % "test",
"org.scalatest" %% "scalatest" % "3.0.0" % "test"
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,15 @@ package com.github.edvakf.play.requestcount
import javax.inject.Inject

import play.api.Configuration
import play.api.mvc.{Results, Result, RequestHeader, Filter}
import play.api.mvc.{Filter, RequestHeader, Result, Results}
import java.util.concurrent.atomic.AtomicInteger

import scala.concurrent.Future
import play.api.libs.concurrent.Execution.Implicits._
import scala.concurrent.{ExecutionContext, Future}
import akka.stream.Materializer

class RequestCountFilter @Inject() (configuration: Configuration)(implicit val mat: Materializer) extends Filter {
class RequestCountFilter @Inject() (configuration: Configuration)(implicit val mat: Materializer, executionContext: ExecutionContext) extends Filter {

val maybePath = configuration.getString("requestcount.path")
val maybePath = configuration.getOptional[String]("requestcount.path")

// number of active requests
val count = new AtomicInteger(0)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,43 @@
package com.github.edvakf.play.requestcount

import org.scalatest.FunSuite
import javax.inject.Inject

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import org.scalatest.{BeforeAndAfter, FunSuite}
import play.api.Configuration
import play.api.mvc.{Action, Result, Results}
import play.api.test.{FakeApplication, FakeRequest}
import play.api.inject.guice.GuiceApplicationBuilder
import play.api.mvc._
import play.api.test.FakeRequest
import play.api.test.Helpers._

import scala.concurrent.Promise

class RequestCountFilterTest extends FunSuite {
class TestController @Inject() (cc: ControllerComponents) extends AbstractController(cc) {
def index = Action { Ok("ok") }
def indexP(promise: Promise[Result]) = Action.async {
promise.future
}
}

class RequestCountFilterTest extends FunSuite with BeforeAndAfter {

implicit val actorSystem = ActorSystem()
implicit val executionContext = actorSystem.dispatcher
implicit val materialize = ActorMaterializer()

after {
actorSystem.terminate()
}

val app = new GuiceApplicationBuilder().build()
val controller = app.injector.instanceOf[TestController]

test("returns zero by default") {
implicit val materializer = FakeApplication().materializer
val config = Configuration("requestcount.path" -> "/requestcount")
val filter = new RequestCountFilter(config)

val action = Action(Results.Ok("ok"))
val action = controller.index

val res = filter(action)(FakeRequest(GET, "/requestcount")).run

Expand All @@ -24,12 +46,11 @@ class RequestCountFilterTest extends FunSuite {
}

test("increment and decrement") {
implicit val materializer = FakeApplication().materializer
val config = Configuration("requestcount.path" -> "/requestcount")
val filter = new RequestCountFilter(config)

val promise = Promise[Result]()
val action = Action.async(promise.future)
val action = controller.indexP(promise)

// this request blocks until promise.success is called
val res0 = filter(action)(FakeRequest(GET, "/foo")).run
Expand All @@ -49,11 +70,10 @@ class RequestCountFilterTest extends FunSuite {
}

test("nothing happens if config is not set") {
implicit val materializer = FakeApplication().materializer
val config = Configuration()
val filter = new RequestCountFilter(config)

val action = Action(Results.Ok("ok"))
val action = controller.index

val res = filter(action)(FakeRequest(GET, "/foo")).run

Expand Down

0 comments on commit 52083bc

Please sign in to comment.