(t *testing.T)
| 55 | } |
| 56 | |
| 57 | func TestFraming(t *testing.T) { |
| 58 | frameSizes := []int{ |
| 59 | 0, 1, 2, 124, 125, 126, 127, 128, 129, 65534, 65535, |
| 60 | // 65536, 65537 |
| 61 | } |
| 62 | var readChunkers = []struct { |
| 63 | name string |
| 64 | f func(io.Reader) io.Reader |
| 65 | }{ |
| 66 | {"half", iotest.HalfReader}, |
| 67 | {"one", iotest.OneByteReader}, |
| 68 | {"asis", func(r io.Reader) io.Reader { return r }}, |
| 69 | } |
| 70 | writeBuf := make([]byte, 65537) |
| 71 | for i := range writeBuf { |
| 72 | writeBuf[i] = byte(i) |
| 73 | } |
| 74 | var writers = []struct { |
| 75 | name string |
| 76 | f func(w io.Writer, n int) (int, error) |
| 77 | }{ |
| 78 | {"iocopy", func(w io.Writer, n int) (int, error) { |
| 79 | nn, err := io.Copy(w, bytes.NewReader(writeBuf[:n])) |
| 80 | return int(nn), err |
| 81 | }}, |
| 82 | {"write", func(w io.Writer, n int) (int, error) { |
| 83 | return w.Write(writeBuf[:n]) |
| 84 | }}, |
| 85 | {"string", func(w io.Writer, n int) (int, error) { |
| 86 | return io.WriteString(w, string(writeBuf[:n])) |
| 87 | }}, |
| 88 | } |
| 89 | |
| 90 | for _, compress := range []bool{false, true} { |
| 91 | for _, isServer := range []bool{true, false} { |
| 92 | for _, chunker := range readChunkers { |
| 93 | |
| 94 | var connBuf bytes.Buffer |
| 95 | wc := newTestConn(nil, &connBuf, isServer) |
| 96 | rc := newTestConn(chunker.f(&connBuf), nil, !isServer) |
| 97 | if compress { |
| 98 | wc.newCompressionWriter = compressNoContextTakeover |
| 99 | rc.newDecompressionReader = decompressNoContextTakeover |
| 100 | } |
| 101 | for _, n := range frameSizes { |
| 102 | for _, writer := range writers { |
| 103 | name := fmt.Sprintf("z:%v, s:%v, r:%s, n:%d w:%s", compress, isServer, chunker.name, n, writer.name) |
| 104 | |
| 105 | w, err := wc.NextWriter(TextMessage) |
| 106 | if err != nil { |
| 107 | t.Errorf("%s: wc.NextWriter() returned %v", name, err) |
| 108 | continue |
| 109 | } |
| 110 | nn, err := writer.f(w, n) |
| 111 | if err != nil || nn != n { |
| 112 | t.Errorf("%s: w.Write(writeBuf[:n]) returned %d, %v", name, nn, err) |
| 113 | continue |
| 114 | } |
nothing calls this directly
no test coverage detected