@@ -512,7 +512,7 @@ func (r *noErrorsAllowed) Error(w http.ResponseWriter, req *http.Request, err er
512
512
r .t .Error (err )
513
513
}
514
514
515
- func TestProxyUpgradeErrorResponse (t * testing.T ) {
515
+ func TestProxyUpgradeConnectionErrorResponse (t * testing.T ) {
516
516
var (
517
517
responder * fakeResponder
518
518
expectedErr = errors .New ("EXPECTED" )
@@ -560,7 +560,7 @@ func TestProxyUpgradeErrorResponse(t *testing.T) {
560
560
561
561
func TestProxyUpgradeErrorResponseTerminates (t * testing.T ) {
562
562
for _ , intercept := range []bool {true , false } {
563
- for _ , code := range []int {200 , 400 , 500 } {
563
+ for _ , code := range []int {400 , 500 } {
564
564
t .Run (fmt .Sprintf ("intercept=%v,code=%v" , intercept , code ), func (t * testing.T ) {
565
565
// Set up a backend server
566
566
backend := http .NewServeMux ()
@@ -620,6 +620,49 @@ func TestProxyUpgradeErrorResponseTerminates(t *testing.T) {
620
620
}
621
621
}
622
622
623
+ func TestProxyUpgradeErrorResponse (t * testing.T ) {
624
+ for _ , intercept := range []bool {true , false } {
625
+ for _ , code := range []int {200 , 300 , 302 , 307 } {
626
+ t .Run (fmt .Sprintf ("intercept=%v,code=%v" , intercept , code ), func (t * testing.T ) {
627
+ // Set up a backend server
628
+ backend := http .NewServeMux ()
629
+ backend .Handle ("/hello" , http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
630
+ http .Redirect (w , r , "https://example.com/there" , code )
631
+ }))
632
+ backendServer := httptest .NewServer (backend )
633
+ defer backendServer .Close ()
634
+ backendServerURL , _ := url .Parse (backendServer .URL )
635
+ backendServerURL .Path = "/hello"
636
+
637
+ // Set up a proxy pointing to a specific path on the backend
638
+ proxyHandler := NewUpgradeAwareHandler (backendServerURL , nil , false , false , & fakeResponder {t : t })
639
+ proxyHandler .InterceptRedirects = intercept
640
+ proxyHandler .RequireSameHostRedirects = true
641
+ proxy := httptest .NewServer (proxyHandler )
642
+ defer proxy .Close ()
643
+ proxyURL , _ := url .Parse (proxy .URL )
644
+
645
+ conn , err := net .Dial ("tcp" , proxyURL .Host )
646
+ require .NoError (t , err )
647
+ bufferedReader := bufio .NewReader (conn )
648
+
649
+ // Send upgrade request resulting in a non-101 response from the backend
650
+ req , _ := http .NewRequest ("GET" , "/" , nil )
651
+ req .Header .Set (httpstream .HeaderConnection , httpstream .HeaderUpgrade )
652
+ require .NoError (t , req .Write (conn ))
653
+ // Verify we get the correct response and full message body content
654
+ resp , err := http .ReadResponse (bufferedReader , nil )
655
+ require .NoError (t , err )
656
+ assert .Equal (t , fakeStatusCode , resp .StatusCode )
657
+ resp .Body .Close ()
658
+
659
+ // clean up
660
+ conn .Close ()
661
+ })
662
+ }
663
+ }
664
+ }
665
+
623
666
func TestDefaultProxyTransport (t * testing.T ) {
624
667
tests := []struct {
625
668
name ,
0 commit comments