OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / github.com / gorilla / websocket / compression_test.go
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 }