Skip to content

Commit d03620f

Browse files
authored
Merge pull request #738 from http4s/update/main/http4s-core-1.0.0-M37
Update http4s-client, ... to 1.0.0-M37 in main
2 parents 4882655 + d135093 commit d03620f

File tree

3 files changed

+107
-103
lines changed

3 files changed

+107
-103
lines changed

build.sbt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,14 @@ val catsV = "2.8.0"
3838
val catsEffectV = "3.3.14"
3939
val fs2V = "3.3.0"
4040
val scodecV = "1.1.34"
41-
val http4sV = "1.0.0-M36"
41+
val http4sV = "1.0.0-M37"
4242
val reactiveStreamsV = "1.0.4"
4343
val vaultV = "3.3.0"
4444
val caseInsensitiveV = "1.3.0"
4545

46-
val http4sBlazeV = "1.0-37710b7-SNAPSHOT"
47-
val munitV = "0.7.29"
48-
val munitCatsEffectV = "1.0.7"
46+
val http4sBlazeV = "1.0.0-M36"
47+
val munitV = "1.0.0-M6"
48+
val munitCatsEffectV = "2.0.0-M3"
4949
val javaWebsocketV = "1.5.3"
5050

5151
val blazeServer = Seq(
@@ -70,7 +70,7 @@ val coreDeps = Seq(
7070
"org.http4s" %% "http4s-client-testkit" % http4sV,
7171
"org.java-websocket" % "Java-WebSocket" % javaWebsocketV,
7272
"org.scalameta" %% "munit" % munitV,
73-
"org.typelevel" %% "munit-cats-effect-3" % munitCatsEffectV
73+
"org.typelevel" %% "munit-cats-effect" % munitCatsEffectV
7474
)).map(_ % Test)
7575

7676
val scala213 = "2.13.8"
@@ -91,6 +91,13 @@ ThisBuild / tlSitePublishBranch := Some("main")
9191

9292
ThisBuild / resolvers += "SOSSS".at("https://s01.oss.sonatype.org/content/repositories/snapshots")
9393

94+
ThisBuild / libraryDependencySchemes ++= Seq(
95+
"org.http4s" %% "http4s-core" % "always",
96+
"org.http4s" %% "http4s-server" % "always",
97+
"org.http4s" %% "http4s-blaze-core" % "always",
98+
"org.http4s" %% "http4s-blaze-server" % "always"
99+
)
100+
94101
lazy val docsSettings =
95102
Seq(
96103
tlSiteApiModule := Some((core / projectID).value),

core/src/test/scala/org/http4s/jdkhttpclient/JdkHttpClientSpec.scala

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,12 @@ class JdkHttpClientSpec extends ClientRouteTestBattery("JdkHttpClient") {
3030

3131
// regression test for https://github.com/http4s/http4s-jdk-http-client/issues/395
3232
test("Don't error with empty body and explicit Content-Length: 0") {
33-
serverClient().flatMap { case (server, client) =>
34-
val address = server().addresses.head
35-
val path = GetRoutes.SimplePath
36-
val uri = Uri.fromString(s"http://$address$path").toOption.get
37-
val req: Request[IO] = Request(uri = uri)
38-
.putHeaders(Header.Raw(ci"Content-Length", "0"))
39-
val body = client().expect[String](req)
40-
body.assertEquals("simple path")
41-
}
33+
val address = server().addresses.head
34+
val path = GetRoutes.SimplePath
35+
val uri = Uri.fromString(s"http://$address$path").toOption.get
36+
val req: Request[IO] = Request(uri = uri)
37+
.putHeaders(Header.Raw(ci"Content-Length", "0"))
38+
val body = client().expect[String](req)
39+
body.assertEquals("simple path")
4240
}
4341
}

core/src/test/scala/org/http4s/jdkhttpclient/JdkWSClientSpec.scala

Lines changed: 88 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import cats.effect._
2020
import cats.implicits._
2121
import fs2.Stream
2222
import munit.CatsEffectSuite
23+
import munit.catseffect.IOFixture
2324
import org.http4s._
2425
import org.http4s.blaze.server.BlazeServerBuilder
2526
import org.http4s.client.websocket._
@@ -38,104 +39,102 @@ import scala.concurrent.duration._
3839

3940
class JdkWSClientSpec extends CatsEffectSuite {
4041

41-
val webSocket: Resource[IO, WSClient[IO]] = JdkWSClient.simple[IO]
42-
val echoServer: Resource[IO, Uri] =
43-
BlazeServerBuilder[IO]
44-
.bindAny()
45-
.withHttpWebSocketApp(wsb =>
46-
HttpRoutes
47-
.of[IO] { case GET -> Root => wsb.build(identity) }
48-
.orNotFound
49-
)
50-
.resource
51-
.map(s => httpToWsUri(s.baseUri))
42+
val webSocket: IOFixture[WSClient[IO]] =
43+
ResourceSuiteLocalFixture("webSocket", JdkWSClient.simple[IO])
44+
val echoServerUri: IOFixture[Uri] =
45+
ResourceSuiteLocalFixture(
46+
"echoServerUri",
47+
BlazeServerBuilder[IO]
48+
.bindAny()
49+
.withHttpWebSocketApp { wsb =>
50+
HttpRoutes
51+
.of[IO] { case GET -> Root => wsb.build(identity) }
52+
.orNotFound
53+
}
54+
.resource
55+
.map(s => httpToWsUri(s.baseUri))
56+
)
5257

53-
val webSocketFixture: SyncIO[FunFixture[WSClient[IO]]] =
54-
ResourceFixture(webSocket)
55-
val webSocketEchoFixture: SyncIO[FunFixture[(WSClient[IO], Uri)]] =
56-
ResourceFixture((webSocket, echoServer).tupled)
58+
override def munitFixtures: Seq[IOFixture[_]] = List(webSocket, echoServerUri)
5759

58-
webSocketEchoFixture.test("send and receive frames in low-level mode") {
59-
case (webSocket, echoUri) =>
60-
webSocket
61-
.connect(WSRequest(echoUri))
62-
.use { conn =>
63-
for {
64-
_ <- conn.send(WSFrame.Text("bar"))
65-
_ <- conn.sendMany(List(WSFrame.Binary(ByteVector(3, 99, 12)), WSFrame.Text("foo")))
66-
_ <- conn.send(WSFrame.Close(1000, "goodbye"))
67-
recv <- conn.receiveStream.compile.toList
68-
} yield recv
69-
}
70-
.assertEquals(
71-
List(
72-
WSFrame.Text("bar"),
73-
WSFrame.Binary(ByteVector(3, 99, 12)),
74-
WSFrame.Text("foo"),
75-
WSFrame.Close(1000, "goodbye")
76-
)
60+
test("send and receive frames in low-level mode") {
61+
webSocket()
62+
.connect(WSRequest(echoServerUri()))
63+
.use { conn =>
64+
for {
65+
_ <- conn.send(WSFrame.Text("bar"))
66+
_ <- conn.sendMany(List(WSFrame.Binary(ByteVector(3, 99, 12)), WSFrame.Text("foo")))
67+
_ <- conn.send(WSFrame.Close(1000, "goodbye"))
68+
recv <- conn.receiveStream.compile.toList
69+
} yield recv
70+
}
71+
.assertEquals(
72+
List(
73+
WSFrame.Text("bar"),
74+
WSFrame.Binary(ByteVector(3, 99, 12)),
75+
WSFrame.Text("foo"),
76+
WSFrame.Close(1000, "goodbye")
7777
)
78+
)
7879
}
7980

80-
webSocketEchoFixture.test("send and receive frames in high-level mode") {
81-
case (webSocket, echoUri) =>
82-
webSocket
83-
.connectHighLevel(WSRequest(echoUri))
84-
.use { conn =>
85-
for {
86-
_ <- conn.send(WSFrame.Binary(ByteVector(15, 2, 3)))
87-
_ <- conn.sendMany(List(WSFrame.Text("foo"), WSFrame.Text("bar")))
88-
recv <- conn.receiveStream.take(3).compile.toList
89-
} yield recv
90-
}
91-
.assertEquals(
92-
List(
93-
WSFrame.Binary(ByteVector(15, 2, 3)),
94-
WSFrame.Text("foo"),
95-
WSFrame.Text("bar")
96-
)
81+
test("send and receive frames in high-level mode") {
82+
webSocket()
83+
.connectHighLevel(WSRequest(echoServerUri()))
84+
.use { conn =>
85+
for {
86+
_ <- conn.send(WSFrame.Binary(ByteVector(15, 2, 3)))
87+
_ <- conn.sendMany(List(WSFrame.Text("foo"), WSFrame.Text("bar")))
88+
recv <- conn.receiveStream.take(3).compile.toList
89+
} yield recv
90+
}
91+
.assertEquals(
92+
List(
93+
WSFrame.Binary(ByteVector(15, 2, 3)),
94+
WSFrame.Text("foo"),
95+
WSFrame.Text("bar")
9796
)
97+
)
9898
}
9999

100-
webSocketEchoFixture.test("group frames by their `last` attribute in high-level mode") {
101-
case (webSocket, echoUri) =>
102-
webSocket
103-
.connectHighLevel(WSRequest(echoUri))
104-
.use { conn =>
105-
for {
106-
_ <- conn.sendMany(
107-
List(
108-
WSFrame.Text("1", last = false),
109-
WSFrame.Text("2", last = false),
110-
WSFrame.Text("3"),
111-
WSFrame.Binary(ByteVector(1)),
112-
WSFrame.Binary(ByteVector(2), last = false),
113-
WSFrame.Binary(ByteVector(3), last = false),
114-
WSFrame.Binary(ByteVector(4)),
115-
WSFrame.Text("4", last = false),
116-
WSFrame.Text("5"),
117-
WSFrame.Binary(ByteVector(5), last = false),
118-
WSFrame.Binary(ByteVector(6)),
119-
WSFrame.Text("6"),
120-
WSFrame.Binary(ByteVector(7), last = false)
121-
)
100+
test("group frames by their `last` attribute in high-level mode") {
101+
webSocket()
102+
.connectHighLevel(WSRequest(echoServerUri()))
103+
.use { conn =>
104+
for {
105+
_ <- conn.sendMany(
106+
List(
107+
WSFrame.Text("1", last = false),
108+
WSFrame.Text("2", last = false),
109+
WSFrame.Text("3"),
110+
WSFrame.Binary(ByteVector(1)),
111+
WSFrame.Binary(ByteVector(2), last = false),
112+
WSFrame.Binary(ByteVector(3), last = false),
113+
WSFrame.Binary(ByteVector(4)),
114+
WSFrame.Text("4", last = false),
115+
WSFrame.Text("5"),
116+
WSFrame.Binary(ByteVector(5), last = false),
117+
WSFrame.Binary(ByteVector(6)),
118+
WSFrame.Text("6"),
119+
WSFrame.Binary(ByteVector(7), last = false)
122120
)
123-
recv <- conn.receiveStream.take(6).compile.toList
124-
} yield recv
125-
}
126-
.assertEquals(
127-
List(
128-
WSFrame.Text("123"),
129-
WSFrame.Binary(ByteVector(1)),
130-
WSFrame.Binary(ByteVector(2, 3, 4)),
131-
WSFrame.Text("45"),
132-
WSFrame.Binary(ByteVector(5, 6)),
133-
WSFrame.Text("6")
134121
)
122+
recv <- conn.receiveStream.take(6).compile.toList
123+
} yield recv
124+
}
125+
.assertEquals(
126+
List(
127+
WSFrame.Text("123"),
128+
WSFrame.Binary(ByteVector(1)),
129+
WSFrame.Binary(ByteVector(2, 3, 4)),
130+
WSFrame.Text("45"),
131+
WSFrame.Binary(ByteVector(5, 6)),
132+
WSFrame.Text("6")
135133
)
134+
)
136135
}
137136

138-
webSocketFixture.test("automatically close the connection") { webSocket =>
137+
test("automatically close the connection") {
139138
val frames = for {
140139
ref <- Ref[IO].of(List.empty[WebSocketFrame])
141140
finished <- Deferred[IO, Unit]
@@ -154,9 +153,9 @@ class JdkWSClientSpec extends CatsEffectSuite {
154153
override def onStart() = {
155154
val req = WSRequest(uri"ws://localhost:8080")
156155
val p = for {
157-
_ <- webSocket.connect(req).use(conn => conn.send(WSFrame.Text("hi blaze")))
156+
_ <- webSocket().connect(req).use(conn => conn.send(WSFrame.Text("hi blaze")))
158157
_ <- IO.sleep(1.seconds)
159-
_ <- webSocket.connectHighLevel(req).use { conn =>
158+
_ <- webSocket().connectHighLevel(req).use { conn =>
160159
conn.send(WSFrame.Text("hey blaze"))
161160
}
162161
_ <- IO.sleep(1.seconds)
@@ -178,7 +177,7 @@ class JdkWSClientSpec extends CatsEffectSuite {
178177
)
179178
}
180179

181-
webSocketFixture.test("send headers") { webSocket =>
180+
test("send headers") {
182181
val sentHeaders = Headers(
183182
Header.Raw(ci"foo", "bar"),
184183
Header.Raw(ci"Sec-Websocket-Protocol", "proto"),
@@ -198,7 +197,7 @@ class JdkWSClientSpec extends CatsEffectSuite {
198197
}
199198
.resource
200199
.use { server =>
201-
webSocket
200+
webSocket()
202201
.connect(WSRequest(httpToWsUri(server.baseUri)).withHeaders(sentHeaders))
203202
.use(_ => IO.unit)
204203
} *> ref.get

0 commit comments

Comments
 (0)