From 7c1f9dffe4edc2df02f3330e0a97f8823e32afbe Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sun, 2 Jun 2019 01:27:15 +0800 Subject: [PATCH] add an integration test for ALPN --- integrationtests/self/handshake_test.go | 47 +++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/integrationtests/self/handshake_test.go b/integrationtests/self/handshake_test.go index a8567af11..260b2bff2 100644 --- a/integrationtests/self/handshake_test.go +++ b/integrationtests/self/handshake_test.go @@ -280,4 +280,51 @@ var _ = Describe("Handshake tests", func() { }) }) + + Context("ALPN", func() { + It("negotiates an application protocol", func() { + ln, err := quic.ListenAddr("localhost:0", tlsServerConf, serverConfig) + Expect(err).ToNot(HaveOccurred()) + + done := make(chan struct{}) + go func() { + defer GinkgoRecover() + sess, err := ln.Accept() + Expect(err).ToNot(HaveOccurred()) + cs := sess.ConnectionState() + Expect(cs.NegotiatedProtocol).To(Equal(alpn)) + Expect(cs.NegotiatedProtocolIsMutual).To(BeTrue()) + close(done) + }() + + sess, err := quic.DialAddr( + fmt.Sprintf("localhost:%d", ln.Addr().(*net.UDPAddr).Port), + getTLSClientConfig(), + nil, + ) + Expect(err).ToNot(HaveOccurred()) + defer sess.Close() + cs := sess.ConnectionState() + Expect(cs.NegotiatedProtocol).To(Equal(alpn)) + Expect(cs.NegotiatedProtocolIsMutual).To(BeTrue()) + Eventually(done).Should(BeClosed()) + Expect(ln.Close()).To(Succeed()) + }) + + It("errors if application protocol negotiation fails", func() { + server := runServer() + + tlsConf := getTLSClientConfig() + tlsConf.NextProtos = []string{"foobar"} + _, err := quic.DialAddr( + fmt.Sprintf("localhost:%d", server.Addr().(*net.UDPAddr).Port), + tlsConf, + nil, + ) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("CRYPTO_ERROR")) + Expect(err.Error()).To(ContainSubstring("no application protocol")) + Expect(server.Close()).To(Succeed()) + }) + }) })