...
1 package websocket
2
3 import (
4 "bytes"
5 "fmt"
6 "io"
7 "io/ioutil"
8 "testing"
9 )
10
11 type nopCloser struct{ io.Writer }
12
13 func (nopCloser) Close() error { return nil }
14
15 func TestTruncWriter(t *testing.T) {
16 const data = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijlkmnopqrstuvwxyz987654321"
17 for n := 1; n <= 10; n++ {
18 var b bytes.Buffer
19 w := &truncWriter{w: nopCloser{&b}}
20 p := []byte(data)
21 for len(p) > 0 {
22 m := len(p)
23 if m > n {
24 m = n
25 }
26 w.Write(p[:m])
27 p = p[m:]
28 }
29 if b.String() != data[:len(data)-len(w.p)] {
30 t.Errorf("%d: %q", n, b.String())
31 }
32 }
33 }
34
35 func textMessages(num int) [][]byte {
36 messages := make([][]byte, num)
37 for i := 0; i < num; i++ {
38 msg := fmt.Sprintf("planet: %d, country: %d, city: %d, street: %d", i, i, i, i)
39 messages[i] = []byte(msg)
40 }
41 return messages
42 }
43
44 func BenchmarkWriteNoCompression(b *testing.B) {
45 w := ioutil.Discard
46 c := newTestConn(nil, w, false)
47 messages := textMessages(100)
48 b.ResetTimer()
49 for i := 0; i < b.N; i++ {
50 c.WriteMessage(TextMessage, messages[i%len(messages)])
51 }
52 b.ReportAllocs()
53 }
54
55 func BenchmarkWriteWithCompression(b *testing.B) {
56 w := ioutil.Discard
57 c := newTestConn(nil, w, false)
58 messages := textMessages(100)
59 c.enableWriteCompression = true
60 c.newCompressionWriter = compressNoContextTakeover
61 b.ResetTimer()
62 for i := 0; i < b.N; i++ {
63 c.WriteMessage(TextMessage, messages[i%len(messages)])
64 }
65 b.ReportAllocs()
66 }
67
68 func TestValidCompressionLevel(t *testing.T) {
69 c := newTestConn(nil, nil, false)
70 for _, level := range []int{minCompressionLevel - 1, maxCompressionLevel + 1} {
71 if err := c.SetCompressionLevel(level); err == nil {
72 t.Errorf("no error for level %d", level)
73 }
74 }
75 for _, level := range []int{minCompressionLevel, maxCompressionLevel} {
76 if err := c.SetCompressionLevel(level); err != nil {
77 t.Errorf("error for level %d", level)
78 }
79 }
80 }
81
View as plain text