| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | // 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 websocketimport (	"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)		}	}}
 |