Skip to content

Instantly share code, notes, and snippets.

@spockz
Created August 17, 2018 18:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spockz/5998c49170f4b32d306916ba9ae4487c to your computer and use it in GitHub Desktop.
Save spockz/5998c49170f4b32d306916ba9ae4487c to your computer and use it in GitHub Desktop.
Always sees only a single transport being created, is there a better way to check (programmaticaly) how many connections were created?
it should "call createTransport only once when sharing sessions" in {
val counter = new AtomicInteger
val spied =
(x: Stack.Params) => {
counter.incrementAndGet()
Http.client.params[HttpImpl].transporter(x)
}
val myClient =
Http.client
.configured(Http.client.params[HttpImpl].copy(transporter = spied))
.withStack(
Http.client.stack
.replace(DefaultPool.Role, module[Request, Response])
.remove(DefaultPool.Role.bufferingPool)
.remove(DefaultPool.Role.cachingPool)
.remove(DefaultPool.Role.watermarkPool)
.remove(StackClient.Role.pool)
)
val service =
Service.const(Future.value(Response()))
val server =
com.twitter.finagle.Http.server.serve(":*", service)
val connection =
myClient.newService(FinagleUtil.socketsToName(server.boundAddress), "single-transport-created")
Await.ready(connection(Request()))
Await.ready(connection(Request()))
counter.get() shouldBe 2
Await.all(server.close(), connection.close())
}
def module[Req, Rep]: Stackable[ServiceFactory[Req, Rep]] =
new Stack.Module[ServiceFactory[Req, Rep]] {
override def make(params: Stack.Params, next: Stack[ServiceFactory[Req, Rep]]): Stack[ServiceFactory[Req, Rep]] = next
override def role: Stack.Role = DefaultPool.Role
override def description: String = "NoOpFactory"
override def parameters: Seq[Stack.Param[_]] = Seq()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment