OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / github.com / gorilla / websocket / prepared_test.go
diff --git a/vendor/github.com/gorilla/websocket/prepared_test.go b/vendor/github.com/gorilla/websocket/prepared_test.go
new file mode 100644 (file)
index 0000000..2297802
--- /dev/null
@@ -0,0 +1,74 @@
+// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package websocket
+
+import (
+       "bytes"
+       "compress/flate"
+       "math/rand"
+       "testing"
+)
+
+var preparedMessageTests = []struct {
+       messageType            int
+       isServer               bool
+       enableWriteCompression bool
+       compressionLevel       int
+}{
+       // Server
+       {TextMessage, true, false, flate.BestSpeed},
+       {TextMessage, true, true, flate.BestSpeed},
+       {TextMessage, true, true, flate.BestCompression},
+       {PingMessage, true, false, flate.BestSpeed},
+       {PingMessage, true, true, flate.BestSpeed},
+
+       // Client
+       {TextMessage, false, false, flate.BestSpeed},
+       {TextMessage, false, true, flate.BestSpeed},
+       {TextMessage, false, true, flate.BestCompression},
+       {PingMessage, false, false, flate.BestSpeed},
+       {PingMessage, false, true, flate.BestSpeed},
+}
+
+func TestPreparedMessage(t *testing.T) {
+       for _, tt := range preparedMessageTests {
+               var data = []byte("this is a test")
+               var buf bytes.Buffer
+               c := newTestConn(nil, &buf, tt.isServer)
+               if tt.enableWriteCompression {
+                       c.newCompressionWriter = compressNoContextTakeover
+               }
+               c.SetCompressionLevel(tt.compressionLevel)
+
+               // Seed random number generator for consistent frame mask.
+               rand.Seed(1234)
+
+               if err := c.WriteMessage(tt.messageType, data); err != nil {
+                       t.Fatal(err)
+               }
+               want := buf.String()
+
+               pm, err := NewPreparedMessage(tt.messageType, data)
+               if err != nil {
+                       t.Fatal(err)
+               }
+
+               // Scribble on data to ensure that NewPreparedMessage takes a snapshot.
+               copy(data, "hello world")
+
+               // Seed random number generator for consistent frame mask.
+               rand.Seed(1234)
+
+               buf.Reset()
+               if err := c.WritePreparedMessage(pm); err != nil {
+                       t.Fatal(err)
+               }
+               got := buf.String()
+
+               if got != want {
+                       t.Errorf("write message != prepared message for %+v", tt)
+               }
+       }
+}