Skip to content

Commit 750e8f9

Browse files
Fix partial match (apache#622)
* fix partial match * add a test for handling empty trailers * fix imports * put back the immutable * add back the Seq import * bundle pekko http imports together * order of imports --------- Co-authored-by: PJ Fanning <pjfanning@users.noreply.github.com>
1 parent 91315b3 commit 750e8f9

File tree

2 files changed

+32
-12
lines changed

2 files changed

+32
-12
lines changed

http-core/src/main/scala/org/apache/pekko/http/impl/engine/http2/HttpMessageRendering.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ private[http2] sealed abstract class MessageRendering[R <: HttpMessage] extends
9999
r.attribute(AttributeKeys.trailer) match {
100100
case Some(trailer) if trailer.headers.nonEmpty =>
101101
OptionVal.Some(ParsedHeadersFrame(streamId, endStream = true, trailer.headers, None))
102-
case None => OptionVal.None
102+
case _ => OptionVal.None
103103
}
104104

105105
Http2SubStream(r.entity, headersFrame, trailingHeadersFrame,

http2-tests/src/test/scala/org/apache/pekko/http/impl/engine/http2/HttpMessageRenderingSpec.scala

+31-11
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,21 @@
1414
package org.apache.pekko.http.impl.engine.http2
1515

1616
import java.time.format.DateTimeFormatter
17+
18+
import com.typesafe.config.ConfigFactory
1719
import org.apache.pekko
1820
import pekko.event.NoLogging
1921
import pekko.http.impl.engine.rendering.DateHeaderRendering
2022
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 }
2625
import org.scalatest.matchers.should.Matchers
2726
import org.scalatest.wordspec.AnyWordSpec
2827

28+
import scala.collection.immutable.VectorBuilder
29+
import scala.collection.immutable.Seq
2930
import scala.collection.immutable
31+
import scala.util.Try
3032

3133
object 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

Comments
 (0)