14
14
package org .apache .pekko .http .impl .engine .http2
15
15
16
16
import java .time .format .DateTimeFormatter
17
+
18
+ import com .typesafe .config .ConfigFactory
17
19
import org .apache .pekko
18
20
import pekko .event .NoLogging
19
21
import pekko .http .impl .engine .rendering .DateHeaderRendering
20
22
import pekko .http .scaladsl .model .headers ._
21
- import pekko .http .scaladsl .model .{ ContentTypes , DateTime , HttpHeader , TransferEncodings }
22
-
23
- import scala .collection .immutable .Seq
24
- import scala .collection .immutable .VectorBuilder
25
- import scala .util .Try
23
+ import pekko .http .scaladsl .model ._
24
+ import pekko .http .scaladsl .settings .{ ClientConnectionSettings , ServerSettings }
26
25
import org .scalatest .matchers .should .Matchers
27
26
import org .scalatest .wordspec .AnyWordSpec
28
27
28
+ import scala .collection .immutable .VectorBuilder
29
+ import scala .collection .immutable .Seq
29
30
import scala .collection .immutable
31
+ import scala .util .Try
30
32
31
33
object MyCustomHeader extends ModeledCustomHeaderCompanion [MyCustomHeader ] {
32
34
override def name : String = " custom-header"
@@ -147,6 +149,22 @@ class HttpMessageRenderingSpec extends AnyWordSpec with Matchers {
147
149
value1.exists(_._1 == " date" ) shouldBe false
148
150
}
149
151
152
+ " handle empty trailer" in {
153
+ val config = ConfigFactory .load(" reference.conf" )
154
+ Try {
155
+ val rendering = new RequestRendering (ClientConnectionSettings (config), NoLogging )
156
+ rendering(HttpRequest ().withAttributes(Map (AttributeKeys .trailer -> Trailer ())))
157
+ }.isSuccess shouldBe true
158
+ Try {
159
+ val rendering = new ResponseRendering (ServerSettings (config), NoLogging , dateHeaderRendering)
160
+ rendering(
161
+ HttpResponse ().withAttributes(
162
+ Map (
163
+ AttributeKeys .trailer -> Trailer (),
164
+ Http2 .streamId -> 0 )))
165
+ }.isSuccess shouldBe true
166
+ }
167
+
150
168
}
151
169
152
170
private def renderClientHeaders (headers : immutable.Seq [HttpHeader ], builder : VectorBuilder [(String , String )],
@@ -158,10 +176,12 @@ class HttpMessageRenderingSpec extends AnyWordSpec with Matchers {
158
176
peerIdHeader : Option [(String , String )] = None ): Unit =
159
177
HttpMessageRendering .renderHeaders(headers, builder, peerIdHeader, NoLogging , isServer = true ,
160
178
shouldRenderAutoHeaders = true ,
161
- dateHeaderRendering = new DateHeaderRendering {
162
- // fake date rendering
163
- override def renderHeaderPair (): (String , String ) = " date" -> DateTime .now.toRfc1123DateTimeString
164
- override def renderHeaderBytes (): Array [Byte ] = ???
165
- override def renderHeaderValue (): String = ???
166
- })
179
+ dateHeaderRendering = dateHeaderRendering)
180
+
181
+ private lazy val dateHeaderRendering : DateHeaderRendering = new DateHeaderRendering {
182
+ // fake date rendering
183
+ override def renderHeaderPair (): (String , String ) = " date" -> DateTime .now.toRfc1123DateTimeString
184
+ override def renderHeaderBytes (): Array [Byte ] = ???
185
+ override def renderHeaderValue (): String = ???
186
+ }
167
187
}
0 commit comments