1 package reverseproxy 2 3 import ( 4 "errors" 5 "io" 6 "testing" 7 8 "vimagination.zapto.org/memio" 9 ) 10 11 type delayReader []byte 12 13 func (d *delayReader) Read(p []byte) (int, error) { 14 if len(*d) == 0 { 15 return 0, io.EOF 16 } 17 p[0] = (*d)[0] 18 *d = (*d)[1:] 19 return 1, nil 20 } 21 22 func TestHTTP(t *testing.T) { 23 stra := "0000000000000000000000000000000000000\r\n111111111111111111111111111111111111\r\nHost\r\nHost: example.com\r\n" 24 data := delayReader(stra[1:]) 25 buf := make([]byte, 1024) 26 buf[0] = '0' 27 name, b, err := readHTTPServerName(&data, buf) 28 if err != nil { 29 t.Errorf("test 1: unexpected error: %s", err) 30 return 31 } else if len(b) != len(stra) { 32 t.Errorf("test 1: expected to read %d bytes, read %d", len(stra), len(b)) 33 return 34 } else if name != "example.com" { 35 t.Errorf("test 1: expected hostname \"example.com\", got %q", name) 36 return 37 } 38 strb := "0000000011111111222222233333344444455555\r\n6666666777777888888999999\r\n\r\nHost: example.com\r\n" 39 data = delayReader(strb[1:]) 40 _, _, err = readHTTPServerName(&data, buf) 41 if !errors.Is(err, errNoServerHeader) { 42 t.Errorf("test 2: expected error errNoServerHeader, got: %s", err) 43 return 44 } 45 datab := memio.Buffer(strb) 46 _, _, err = readHTTPServerName(&datab, buf) 47 if !errors.Is(err, errNoServerHeader) { 48 t.Errorf("test 3: expected error errNoServerHeader, got: %s", err) 49 return 50 } 51 } 52