@@ -1552,6 +1552,47 @@ func TestCancelRequestWithChannelBeforeDo(t *testing.T) {
1552
1552
}
1553
1553
}
1554
1554
1555
+ // Issue 11020. The returned error message should be errRequestCanceled
1556
+ func TestTransportCancelBeforeResponseHeaders (t * testing.T ) {
1557
+ defer afterTest (t )
1558
+
1559
+ serverConnCh := make (chan net.Conn , 1 )
1560
+ tr := & Transport {
1561
+ Dial : func (network , addr string ) (net.Conn , error ) {
1562
+ cc , sc := net .Pipe ()
1563
+ serverConnCh <- sc
1564
+ return cc , nil
1565
+ },
1566
+ }
1567
+ defer tr .CloseIdleConnections ()
1568
+ errc := make (chan error , 1 )
1569
+ req , _ := NewRequest ("GET" , "http://example.com/" , nil )
1570
+ go func () {
1571
+ _ , err := tr .RoundTrip (req )
1572
+ errc <- err
1573
+ }()
1574
+
1575
+ sc := <- serverConnCh
1576
+ verb := make ([]byte , 3 )
1577
+ if _ , err := io .ReadFull (sc , verb ); err != nil {
1578
+ t .Errorf ("Error reading HTTP verb from server: %v" , err )
1579
+ }
1580
+ if string (verb ) != "GET" {
1581
+ t .Errorf ("server received %q; want GET" , verb )
1582
+ }
1583
+ defer sc .Close ()
1584
+
1585
+ tr .CancelRequest (req )
1586
+
1587
+ err := <- errc
1588
+ if err == nil {
1589
+ t .Fatalf ("unexpected success from RoundTrip" )
1590
+ }
1591
+ if err != ExportErrRequestCanceled {
1592
+ t .Errorf ("RoundTrip error = %v; want ExportErrRequestCanceled" , err )
1593
+ }
1594
+ }
1595
+
1555
1596
// golang.org/issue/3672 -- Client can't close HTTP stream
1556
1597
// Calling Close on a Response.Body used to just read until EOF.
1557
1598
// Now it actually closes the TCP connection.
0 commit comments