github.com/simonmittag/ws@v1.1.0-rc.5.0.20210419231947-82b846128245/http_test.go (about) 1 package ws 2 3 import ( 4 "bufio" 5 "io/ioutil" 6 "net/url" 7 "testing" 8 9 "github.com/gobwas/httphead" 10 ) 11 12 type httpVersionCase struct { 13 in []byte 14 major int 15 minor int 16 ok bool 17 } 18 19 var httpVersionCases = []httpVersionCase{ 20 {[]byte("HTTP/1.1"), 1, 1, true}, 21 {[]byte("HTTP/1.0"), 1, 0, true}, 22 {[]byte("HTTP/1.2"), 1, 2, true}, 23 {[]byte("HTTP/42.1092"), 42, 1092, true}, 24 } 25 26 func TestParseHttpVersion(t *testing.T) { 27 for _, c := range httpVersionCases { 28 t.Run(string(c.in), func(t *testing.T) { 29 major, minor, ok := httpParseVersion(c.in) 30 if major != c.major || minor != c.minor || ok != c.ok { 31 t.Errorf( 32 "parseHttpVersion([]byte(%q)) = %v, %v, %v; want %v, %v, %v", 33 string(c.in), major, minor, ok, c.major, c.minor, c.ok, 34 ) 35 } 36 }) 37 } 38 } 39 40 func BenchmarkParseHttpVersion(b *testing.B) { 41 for _, c := range httpVersionCases { 42 b.Run(string(c.in), func(b *testing.B) { 43 for i := 0; i < b.N; i++ { 44 _, _, _ = httpParseVersion(c.in) 45 } 46 }) 47 } 48 } 49 50 func BenchmarkHttpWriteUpgradeRequest(b *testing.B) { 51 for _, test := range []struct { 52 url *url.URL 53 protocols []string 54 extensions []httphead.Option 55 headers HandshakeHeaderFunc 56 }{ 57 { 58 url: makeURL("ws://example.org"), 59 }, 60 } { 61 bw := bufio.NewWriter(ioutil.Discard) 62 nonce := make([]byte, nonceSize) 63 initNonce(nonce) 64 65 var headers HandshakeHeader 66 if test.headers != nil { 67 headers = test.headers 68 } 69 70 b.ResetTimer() 71 b.Run("", func(b *testing.B) { 72 for i := 0; i < b.N; i++ { 73 httpWriteUpgradeRequest(bw, 74 test.url, 75 nonce, 76 test.protocols, 77 test.extensions, 78 headers, 79 ) 80 } 81 }) 82 } 83 } 84 85 func makeURL(s string) *url.URL { 86 ret, err := url.Parse(s) 87 if err != nil { 88 panic(err) 89 } 90 return ret 91 }