Skip to content

Commit

Permalink
Merge pull request #6781 from armanbilge/issue/6780
Browse files Browse the repository at this point in the history
`Shutdown#trackConnection` should never be empty
  • Loading branch information
armanbilge committed Nov 1, 2022
2 parents 6807bfa + 62c81cc commit 36372fe
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
Expand Up @@ -100,7 +100,7 @@ private[server] object Shutdown {
override val signal: F[Unit] = unblock.get
override val newConnection: F[Unit] = F.unit
override val removeConnection: F[Unit] = F.unit
override val trackConnection: Stream[F, Unit] = Stream.empty
override val trackConnection: Stream[F, Unit] = Stream.emit(())
}
}

Expand Down
Expand Up @@ -28,6 +28,8 @@ import org.http4s.ember.client.EmberClientBuilder
import org.http4s.implicits._
import org.http4s.server.Server

import scala.concurrent.duration._

class EmberServerSuite extends Http4sSuite {

def service[F[_]](implicit F: Async[F]): HttpApp[F] = {
Expand All @@ -47,12 +49,15 @@ class EmberServerSuite extends Http4sSuite {
def url(address: SocketAddress[Host], path: String = ""): String =
s"http://${Uri.Host.fromIp4sHost(address.host).renderString}:${address.port.value}$path"

val serverResource: Resource[IO, Server] =
EmberServerBuilder
.default[IO]
.withPort(port"0")
.withHttpApp(service[IO])
.build
def serverResource(
f: EmberServerBuilder[IO] => EmberServerBuilder[IO] = identity
): Resource[IO, Server] =
f(
EmberServerBuilder
.default[IO]
.withPort(port"0")
.withHttpApp(service[IO])
).build

private val client = ResourceFunFixture(EmberClientBuilder.default[IO].build)

Expand All @@ -75,13 +80,19 @@ class EmberServerSuite extends Http4sSuite {
}

client.test("server shuts down after exiting resource scope") { client =>
serverResource.use(server => IO.pure(server.addressIp4s)).flatMap { address =>
serverResource().use(server => IO.pure(server.addressIp4s)).flatMap { address =>
client
.get(url(address))(_.status.pure[IO])
.intercept[ConnectException]
}
}

client.test("shutdown timeout of 0 doesn't reset connections") { client =>
serverResource(_.withShutdownTimeout(0.nanos)).use { server =>
client.expect[String](url(server.addressIp4s)).assertEquals("Hello!")
}
}

server().test("server startup fails if address is already in use") { server =>
EmberServerBuilder
.default[IO]
Expand Down

0 comments on commit 36372fe

Please sign in to comment.