github.com/x04/go/src@v0.0.0-20200202162449-3d481ceb3525/testing/iotest/reader_test.go (about) 1 // Copyright 2019 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package iotest 6 7 import ( 8 "github.com/x04/go/src/bytes" 9 "github.com/x04/go/src/io" 10 "github.com/x04/go/src/testing" 11 ) 12 13 func TestOneByteReader_nonEmptyReader(t *testing.T) { 14 msg := "Hello, World!" 15 buf := new(bytes.Buffer) 16 buf.WriteString(msg) 17 18 obr := OneByteReader(buf) 19 var b []byte 20 n, err := obr.Read(b) 21 if err != nil || n != 0 { 22 t.Errorf("Empty buffer read returned n=%d err=%v", n, err) 23 } 24 25 b = make([]byte, 3) 26 // Read from obr until EOF. 27 got := new(bytes.Buffer) 28 for i := 0; ; i++ { 29 n, err = obr.Read(b) 30 if err != nil { 31 break 32 } 33 if g, w := n, 1; g != w { 34 t.Errorf("Iteration #%d read %d bytes, want %d", i, g, w) 35 } 36 got.Write(b[:n]) 37 } 38 if g, w := err, io.EOF; g != w { 39 t.Errorf("Unexpected error after reading all bytes\n\tGot: %v\n\tWant: %v", g, w) 40 } 41 if g, w := got.String(), "Hello, World!"; g != w { 42 t.Errorf("Read mismatch\n\tGot: %q\n\tWant: %q", g, w) 43 } 44 } 45 46 func TestOneByteReader_emptyReader(t *testing.T) { 47 r := new(bytes.Buffer) 48 49 obr := OneByteReader(r) 50 var b []byte 51 if n, err := obr.Read(b); err != nil || n != 0 { 52 t.Errorf("Empty buffer read returned n=%d err=%v", n, err) 53 } 54 55 b = make([]byte, 5) 56 n, err := obr.Read(b) 57 if g, w := err, io.EOF; g != w { 58 t.Errorf("Error mismatch\n\tGot: %v\n\tWant: %v", g, w) 59 } 60 if g, w := n, 0; g != w { 61 t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w) 62 } 63 } 64 65 func TestHalfReader_nonEmptyReader(t *testing.T) { 66 msg := "Hello, World!" 67 buf := new(bytes.Buffer) 68 buf.WriteString(msg) 69 // empty read buffer 70 hr := HalfReader(buf) 71 var b []byte 72 n, err := hr.Read(b) 73 if err != nil || n != 0 { 74 t.Errorf("Empty buffer read returned n=%d err=%v", n, err) 75 } 76 // non empty read buffer 77 b = make([]byte, 2) 78 got := new(bytes.Buffer) 79 for i := 0; ; i++ { 80 n, err = hr.Read(b) 81 if err != nil { 82 break 83 } 84 if g, w := n, 1; g != w { 85 t.Errorf("Iteration #%d read %d bytes, want %d", i, g, w) 86 } 87 got.Write(b[:n]) 88 } 89 if g, w := err, io.EOF; g != w { 90 t.Errorf("Unexpected error after reading all bytes\n\tGot: %v\n\tWant: %v", g, w) 91 } 92 if g, w := got.String(), "Hello, World!"; g != w { 93 t.Errorf("Read mismatch\n\tGot: %q\n\tWant: %q", g, w) 94 } 95 } 96 97 func TestHalfReader_emptyReader(t *testing.T) { 98 r := new(bytes.Buffer) 99 100 hr := HalfReader(r) 101 var b []byte 102 if n, err := hr.Read(b); err != nil || n != 0 { 103 t.Errorf("Empty buffer read returned n=%d err=%v", n, err) 104 } 105 106 b = make([]byte, 5) 107 n, err := hr.Read(b) 108 if g, w := err, io.EOF; g != w { 109 t.Errorf("Error mismatch\n\tGot: %v\n\tWant: %v", g, w) 110 } 111 if g, w := n, 0; g != w { 112 t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w) 113 } 114 } 115 116 func TestTimeOutReader_nonEmptyReader(t *testing.T) { 117 msg := "Hello, World!" 118 buf := new(bytes.Buffer) 119 buf.WriteString(msg) 120 // empty read buffer 121 tor := TimeoutReader(buf) 122 var b []byte 123 n, err := tor.Read(b) 124 if err != nil || n != 0 { 125 t.Errorf("Empty buffer read returned n=%d err=%v", n, err) 126 } 127 // Second call should timeout 128 n, err = tor.Read(b) 129 if g, w := err, ErrTimeout; g != w { 130 t.Errorf("Error mismatch\n\tGot: %v\n\tWant: %v", g, w) 131 } 132 if g, w := n, 0; g != w { 133 t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w) 134 } 135 // non empty read buffer 136 tor2 := TimeoutReader(buf) 137 b = make([]byte, 3) 138 if n, err := tor2.Read(b); err != nil || n == 0 { 139 t.Errorf("Empty buffer read returned n=%d err=%v", n, err) 140 } 141 // Second call should timeout 142 n, err = tor2.Read(b) 143 if g, w := err, ErrTimeout; g != w { 144 t.Errorf("Error mismatch\n\tGot: %v\n\tWant: %v", g, w) 145 } 146 if g, w := n, 0; g != w { 147 t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w) 148 } 149 } 150 151 func TestTimeOutReader_emptyReader(t *testing.T) { 152 r := new(bytes.Buffer) 153 // empty read buffer 154 tor := TimeoutReader(r) 155 var b []byte 156 if n, err := tor.Read(b); err != nil || n != 0 { 157 t.Errorf("Empty buffer read returned n=%d err=%v", n, err) 158 } 159 // Second call should timeout 160 n, err := tor.Read(b) 161 if g, w := err, ErrTimeout; g != w { 162 t.Errorf("Error mismatch\n\tGot: %v\n\tWant: %v", g, w) 163 } 164 if g, w := n, 0; g != w { 165 t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w) 166 } 167 // non empty read buffer 168 tor2 := TimeoutReader(r) 169 b = make([]byte, 5) 170 if n, err := tor2.Read(b); err != io.EOF || n != 0 { 171 t.Errorf("Empty buffer read returned n=%d err=%v", n, err) 172 } 173 // Second call should timeout 174 n, err = tor2.Read(b) 175 if g, w := err, ErrTimeout; g != w { 176 t.Errorf("Error mismatch\n\tGot: %v\n\tWant: %v", g, w) 177 } 178 if g, w := n, 0; g != w { 179 t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w) 180 } 181 } 182 183 func TestDataErrReader_nonEmptyReader(t *testing.T) { 184 msg := "Hello, World!" 185 buf := new(bytes.Buffer) 186 buf.WriteString(msg) 187 188 der := DataErrReader(buf) 189 190 b := make([]byte, 3) 191 got := new(bytes.Buffer) 192 var n int 193 var err error 194 for { 195 n, err = der.Read(b) 196 got.Write(b[:n]) 197 if err != nil { 198 break 199 } 200 } 201 if err != io.EOF || n == 0 { 202 t.Errorf("Last Read returned n=%d err=%v", n, err) 203 } 204 if g, w := got.String(), "Hello, World!"; g != w { 205 t.Errorf("Read mismatch\n\tGot: %q\n\tWant: %q", g, w) 206 } 207 } 208 209 func TestDataErrReader_emptyReader(t *testing.T) { 210 r := new(bytes.Buffer) 211 212 der := DataErrReader(r) 213 var b []byte 214 if n, err := der.Read(b); err != io.EOF || n != 0 { 215 t.Errorf("Empty buffer read returned n=%d err=%v", n, err) 216 } 217 218 b = make([]byte, 5) 219 n, err := der.Read(b) 220 if g, w := err, io.EOF; g != w { 221 t.Errorf("Error mismatch\n\tGot: %v\n\tWant: %v", g, w) 222 } 223 if g, w := n, 0; g != w { 224 t.Errorf("Unexpectedly read %d bytes, wanted %d", g, w) 225 } 226 }