@@ -822,53 +822,6 @@ func (fw flushWriter) Write(p []byte) (n int, err error) {
822
822
return
823
823
}
824
824
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
-
872
825
func newLocalListener (t * testing.T ) net.Listener {
873
826
ln , err := net .Listen ("tcp4" , "127.0.0.1:0" )
874
827
if err == nil {
@@ -881,154 +834,6 @@ func newLocalListener(t *testing.T) net.Listener {
881
834
return ln
882
835
}
883
836
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
-
1032
837
func TestTransportReqBodyAfterResponse_200 (t * testing.T ) { testTransportReqBodyAfterResponse (t , 200 ) }
1033
838
func TestTransportReqBodyAfterResponse_403 (t * testing.T ) { testTransportReqBodyAfterResponse (t , 403 ) }
1034
839
0 commit comments