@@ -822,53 +822,6 @@ func (fw flushWriter) Write(p []byte) (n int, err error) {
822822 return
823823}
824824
825- type clientTester struct {
826- t * testing.T
827- tr * Transport
828- sc , cc net.Conn // server and client conn
829- fr * Framer // server's framer
830- settings * SettingsFrame
831- client func () error
832- server func () error
833- }
834-
835- func newClientTester (t * testing.T ) * clientTester {
836- var dialOnce struct {
837- sync.Mutex
838- dialed bool
839- }
840- ct := & clientTester {
841- t : t ,
842- }
843- ct .tr = & Transport {
844- TLSClientConfig : tlsConfigInsecure ,
845- DialTLS : func (network , addr string , cfg * tls.Config ) (net.Conn , error ) {
846- dialOnce .Lock ()
847- defer dialOnce .Unlock ()
848- if dialOnce .dialed {
849- return nil , errors .New ("only one dial allowed in test mode" )
850- }
851- dialOnce .dialed = true
852- return ct .cc , nil
853- },
854- }
855-
856- ln := newLocalListener (t )
857- cc , err := net .Dial ("tcp" , ln .Addr ().String ())
858- if err != nil {
859- t .Fatal (err )
860- }
861- sc , err := ln .Accept ()
862- if err != nil {
863- t .Fatal (err )
864- }
865- ln .Close ()
866- ct .cc = cc
867- ct .sc = sc
868- ct .fr = NewFramer (sc , sc )
869- return ct
870- }
871-
872825func newLocalListener (t * testing.T ) net.Listener {
873826 ln , err := net .Listen ("tcp4" , "127.0.0.1:0" )
874827 if err == nil {
@@ -881,154 +834,6 @@ func newLocalListener(t *testing.T) net.Listener {
881834 return ln
882835}
883836
884- func (ct * clientTester ) greet (settings ... Setting ) {
885- buf := make ([]byte , len (ClientPreface ))
886- _ , err := io .ReadFull (ct .sc , buf )
887- if err != nil {
888- ct .t .Fatalf ("reading client preface: %v" , err )
889- }
890- f , err := ct .fr .ReadFrame ()
891- if err != nil {
892- ct .t .Fatalf ("Reading client settings frame: %v" , err )
893- }
894- var ok bool
895- if ct .settings , ok = f .(* SettingsFrame ); ! ok {
896- ct .t .Fatalf ("Wanted client settings frame; got %v" , f )
897- }
898- if err := ct .fr .WriteSettings (settings ... ); err != nil {
899- ct .t .Fatal (err )
900- }
901- if err := ct .fr .WriteSettingsAck (); err != nil {
902- ct .t .Fatal (err )
903- }
904- }
905-
906- func (ct * clientTester ) readNonSettingsFrame () (Frame , error ) {
907- for {
908- f , err := ct .fr .ReadFrame ()
909- if err != nil {
910- return nil , err
911- }
912- if _ , ok := f .(* SettingsFrame ); ok {
913- continue
914- }
915- return f , nil
916- }
917- }
918-
919- // writeReadPing sends a PING and immediately reads the PING ACK.
920- // It will fail if any other unread data was pending on the connection,
921- // aside from SETTINGS frames.
922- func (ct * clientTester ) writeReadPing () error {
923- data := [8 ]byte {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 }
924- if err := ct .fr .WritePing (false , data ); err != nil {
925- return fmt .Errorf ("Error writing PING: %v" , err )
926- }
927- f , err := ct .readNonSettingsFrame ()
928- if err != nil {
929- return err
930- }
931- p , ok := f .(* PingFrame )
932- if ! ok {
933- return fmt .Errorf ("got a %v, want a PING ACK" , f )
934- }
935- if p .Flags & FlagPingAck == 0 {
936- return fmt .Errorf ("got a PING, want a PING ACK" )
937- }
938- if p .Data != data {
939- return fmt .Errorf ("got PING data = %x, want %x" , p .Data , data )
940- }
941- return nil
942- }
943-
944- func (ct * clientTester ) inflowWindow (streamID uint32 ) int32 {
945- pool := ct .tr .connPoolOrDef .(* clientConnPool )
946- pool .mu .Lock ()
947- defer pool .mu .Unlock ()
948- if n := len (pool .keys ); n != 1 {
949- ct .t .Errorf ("clientConnPool contains %v keys, expected 1" , n )
950- return - 1
951- }
952- for cc := range pool .keys {
953- cc .mu .Lock ()
954- defer cc .mu .Unlock ()
955- if streamID == 0 {
956- return cc .inflow .avail + cc .inflow .unsent
957- }
958- cs := cc .streams [streamID ]
959- if cs == nil {
960- ct .t .Errorf ("no stream with id %v" , streamID )
961- return - 1
962- }
963- return cs .inflow .avail + cs .inflow .unsent
964- }
965- return - 1
966- }
967-
968- func (ct * clientTester ) cleanup () {
969- ct .tr .CloseIdleConnections ()
970-
971- // close both connections, ignore the error if its already closed
972- ct .sc .Close ()
973- ct .cc .Close ()
974- }
975-
976- func (ct * clientTester ) run () {
977- var errOnce sync.Once
978- var wg sync.WaitGroup
979-
980- run := func (which string , fn func () error ) {
981- defer wg .Done ()
982- if err := fn (); err != nil {
983- errOnce .Do (func () {
984- ct .t .Errorf ("%s: %v" , which , err )
985- ct .cleanup ()
986- })
987- }
988- }
989-
990- wg .Add (2 )
991- go run ("client" , ct .client )
992- go run ("server" , ct .server )
993- wg .Wait ()
994-
995- errOnce .Do (ct .cleanup ) // clean up if no error
996- }
997-
998- func (ct * clientTester ) readFrame () (Frame , error ) {
999- return ct .fr .ReadFrame ()
1000- }
1001-
1002- func (ct * clientTester ) firstHeaders () (* HeadersFrame , error ) {
1003- for {
1004- f , err := ct .readFrame ()
1005- if err != nil {
1006- return nil , fmt .Errorf ("ReadFrame while waiting for Headers: %v" , err )
1007- }
1008- switch f .(type ) {
1009- case * WindowUpdateFrame , * SettingsFrame :
1010- continue
1011- }
1012- hf , ok := f .(* HeadersFrame )
1013- if ! ok {
1014- return nil , fmt .Errorf ("Got %T; want HeadersFrame" , f )
1015- }
1016- return hf , nil
1017- }
1018- }
1019-
1020- type countingReader struct {
1021- n * int64
1022- }
1023-
1024- func (r countingReader ) Read (p []byte ) (n int , err error ) {
1025- for i := range p {
1026- p [i ] = byte (i )
1027- }
1028- atomic .AddInt64 (r .n , int64 (len (p )))
1029- return len (p ), err
1030- }
1031-
1032837func TestTransportReqBodyAfterResponse_200 (t * testing.T ) { testTransportReqBodyAfterResponse (t , 200 ) }
1033838func TestTransportReqBodyAfterResponse_403 (t * testing.T ) { testTransportReqBodyAfterResponse (t , 403 ) }
1034839
0 commit comments