forked from quic-go/quic-go
http3: add ConnContext to the server (#4230)
* Add ConnContext to http3.Server ConnContext can be used to modify the context used by a new http Request. * Make linter happy * Add nil check and integration test * Add the ServerContextKey check to the ConnContext func * Update integrationtests/self/http_test.go Co-authored-by: Marten Seemann <martenseemann@gmail.com> * Update http3/server.go Co-authored-by: Marten Seemann <martenseemann@gmail.com> --------- Co-authored-by: Marten Seemann <martenseemann@gmail.com>
This commit is contained in:
@@ -528,4 +528,35 @@ var _ = Describe("HTTP tests", func() {
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(resp.StatusCode).To(Equal(200))
|
||||
})
|
||||
|
||||
It("sets conn context", func() {
|
||||
type ctxKey int
|
||||
server.ConnContext = func(ctx context.Context, c quic.Connection) context.Context {
|
||||
serv, ok := ctx.Value(http3.ServerContextKey).(*http3.Server)
|
||||
Expect(ok).To(BeTrue())
|
||||
Expect(serv).To(Equal(server))
|
||||
|
||||
ctx = context.WithValue(ctx, ctxKey(0), "Hello")
|
||||
ctx = context.WithValue(ctx, ctxKey(1), c)
|
||||
return ctx
|
||||
}
|
||||
mux.HandleFunc("/conn-context", func(w http.ResponseWriter, r *http.Request) {
|
||||
defer GinkgoRecover()
|
||||
v, ok := r.Context().Value(ctxKey(0)).(string)
|
||||
Expect(ok).To(BeTrue())
|
||||
Expect(v).To(Equal("Hello"))
|
||||
|
||||
c, ok := r.Context().Value(ctxKey(1)).(quic.Connection)
|
||||
Expect(ok).To(BeTrue())
|
||||
Expect(c).ToNot(BeNil())
|
||||
|
||||
serv, ok := r.Context().Value(http3.ServerContextKey).(*http3.Server)
|
||||
Expect(ok).To(BeTrue())
|
||||
Expect(serv).To(Equal(server))
|
||||
})
|
||||
|
||||
resp, err := client.Get(fmt.Sprintf("https://localhost:%d/conn-context", port))
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(resp.StatusCode).To(Equal(200))
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user