1414package  org .apache .pekko .http .impl .engine .http2 
1515
1616import  java .time .format .DateTimeFormatter 
17+ 
18+ import  com .typesafe .config .ConfigFactory 
1719import  org .apache .pekko 
1820import  pekko .event .NoLogging 
1921import  pekko .http .impl .engine .rendering .DateHeaderRendering 
2022import  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  }
2625import  org .scalatest .matchers .should .Matchers 
2726import  org .scalatest .wordspec .AnyWordSpec 
2827
28+ import  scala .collection .immutable .VectorBuilder 
29+ import  scala .collection .immutable .Seq 
2930import  scala .collection .immutable 
31+ import  scala .util .Try 
3032
3133object  MyCustomHeader  extends  ModeledCustomHeaderCompanion [MyCustomHeader ] {
3234  override  def  name :  String  =  " custom-header" 
@@ -147,6 +149,22 @@ class HttpMessageRenderingSpec extends AnyWordSpec with Matchers {
147149      value1.exists(_._1 ==  " date"  ) shouldBe false 
148150    }
149151
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+ 
150168  }
151169
152170  private  def  renderClientHeaders (headers : immutable.Seq [HttpHeader ], builder : VectorBuilder [(String , String )],
@@ -158,10 +176,12 @@ class HttpMessageRenderingSpec extends AnyWordSpec with Matchers {
158176      peerIdHeader : Option [(String , String )] =  None ):  Unit  = 
159177    HttpMessageRendering .renderHeaders(headers, builder, peerIdHeader, NoLogging , isServer =  true ,
160178      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+   }
167187}
0 commit comments