1 package reverseproxy 2 3 import ( 4 "io" 5 "net" 6 "testing" 7 ) 8 9 func TestRedirect(t *testing.T) { 10 la, err := net.ListenTCP("tcp", nil) 11 if err != nil { 12 t.Fatalf("unexpected error: %s", err) 13 } 14 lb, err := net.ListenTCP("tcp", nil) 15 if err != nil { 16 t.Fatalf("unexpected error: %s", err) 17 } 18 pna := getUnusedPort() 19 pa, err := AddRedirect(HostName(aDomain), pna, la.Addr()) 20 if err != nil { 21 t.Fatalf("unexpected error: %s", err) 22 } 23 pb, err := AddRedirect(HostName(bDomain), pna, lb.Addr()) 24 if err != nil { 25 t.Fatalf("unexpected error: %s", err) 26 } 27 go func() { 28 c, _ := net.DialTCP("tcp", nil, &net.TCPAddr{Port: int(pna)}) 29 c.Write([]byte("GET / HTTP/1.1\r\nHost: " + aDomain + "\r\n\r\nDATA")) 30 c.Close() 31 }() 32 go func() { 33 c, _ := net.DialTCP("tcp", nil, &net.TCPAddr{Port: int(pna)}) 34 c.Write(tlsServerName(bDomain)) 35 c.Write([]byte("ATAD")) 36 c.Close() 37 }() 38 c, err := la.Accept() 39 if err != nil { 40 t.Errorf("test 1: unexpected error: %s", err) 41 return 42 } 43 d, err := lb.Accept() 44 if err != nil { 45 t.Errorf("test 2: unexpected error: %s", err) 46 return 47 } 48 buf, err := io.ReadAll(c) 49 n := len(buf) 50 if err != nil { 51 t.Errorf("test 3: unexpected error: %s", err) 52 return 53 } else if string(buf[n-4:n]) != "DATA" { 54 t.Errorf("test 3: expecting \"DATA\", got %q", buf[n-4:n]) 55 return 56 } 57 c.Close() 58 buf, err = io.ReadAll(d) 59 n = len(buf) 60 if err != nil { 61 t.Errorf("test 4: unexpected error: %s", err) 62 return 63 } else if string(buf[n-4:n]) != "ATAD" { 64 t.Errorf("test 4: expecting \"ATAD\", got %q", buf[n-4:n]) 65 return 66 } 67 d.Close() 68 pa.Close() 69 pb.Close() 70 la.Close() 71 lb.Close() 72 } 73