| 69 | } |
| 70 | |
| 71 | func TestWriteFromConn(t *testing.T) { |
| 72 | connInPipeReader, connInPipeWriter := io.Pipe() // in to conn |
| 73 | connOutPipeReader, connOutPipeWriter := io.Pipe() // out from conn |
| 74 | |
| 75 | conn := pipePair{ |
| 76 | connOutPipeReader, |
| 77 | connInPipeWriter, |
| 78 | } |
| 79 | |
| 80 | dt, err := New(conn) |
| 81 | if err != nil { |
| 82 | t.Fatalf("Unexpected error from New(): %s", err) |
| 83 | } |
| 84 | |
| 85 | ctx, cancel := context.WithCancel(context.Background()) |
| 86 | var wg sync.WaitGroup |
| 87 | wg.Add(1) |
| 88 | go func() { |
| 89 | wg.Done() |
| 90 | err := dt.Run(ctx) |
| 91 | if err != nil { |
| 92 | t.Fatalf("Unexpected error from Run(): %s", err) |
| 93 | } |
| 94 | }() |
| 95 | |
| 96 | var ( |
| 97 | message []byte |
| 98 | n int |
| 99 | ) |
| 100 | readBuf := make([]byte, 1024) |
| 101 | |
| 102 | // input |
| 103 | message = []byte("0hello\n") // line buffered canonical mode |
| 104 | n, err = connOutPipeWriter.Write(message) |
| 105 | if err != nil { |
| 106 | t.Fatalf("Unexpected error from Write(): %s", err) |
| 107 | } |
| 108 | if n != len(message) { |
| 109 | t.Fatalf("Write() accepted `%d` for message `%s`", n, message) |
| 110 | } |
| 111 | |
| 112 | n, err = dt.TTY().Read(readBuf) |
| 113 | if err != nil { |
| 114 | t.Fatalf("Unexpected error from Write(): %s", err) |
| 115 | } |
| 116 | if !bytes.Equal(readBuf[:n], message[1:]) { |
| 117 | t.Fatalf("Unexpected message received: `%s`", readBuf[:n]) |
| 118 | } |
| 119 | |
| 120 | // ping |
| 121 | message = []byte("1\n") // line buffered canonical mode |
| 122 | n, err = connOutPipeWriter.Write(message) |
| 123 | if err != nil { |
| 124 | t.Fatalf("Unexpected error from Write(): %s", err) |
| 125 | } |
| 126 | if n != len(message) { |
| 127 | t.Fatalf("Write() accepted `%d` for message `%s`", n, message) |
| 128 | } |