@@ -923,6 +923,59 @@ func TestReadingIsRefusedOnErrorWhenLocalAddrRequestedFirst(t *testing.T) {
923923 }
924924}
925925
926+ func TestSkipProxyProtocolPolicy (t * testing.T ) {
927+ l , err := net .Listen ("tcp" , "127.0.0.1:0" )
928+ if err != nil {
929+ t .Fatalf ("err: %v" , err )
930+ }
931+
932+ policyFunc := func (upstream net.Addr ) (Policy , error ) { return SKIP , nil }
933+
934+ pl := & Listener {
935+ Listener : l ,
936+ Policy : policyFunc ,
937+ }
938+
939+ cliResult := make (chan error )
940+ ping := []byte ("ping" )
941+ go func () {
942+ conn , err := net .Dial ("tcp" , pl .Addr ().String ())
943+ if err != nil {
944+ cliResult <- err
945+ return
946+ }
947+ defer conn .Close ()
948+ conn .Write (ping )
949+ close (cliResult )
950+ }()
951+
952+ conn , err := pl .Accept ()
953+ if err != nil {
954+ t .Fatalf ("err: %v" , err )
955+ }
956+ defer conn .Close ()
957+
958+ _ , ok := conn .(* net.TCPConn )
959+ if ! ok {
960+ t .Fatal ("err: should be a tcp connection" )
961+ }
962+ _ = conn .LocalAddr ()
963+ recv := make ([]byte , 4 )
964+ _ , err = conn .Read (recv )
965+ if err != nil {
966+ t .Fatalf ("Unexpected read error: %v" , err )
967+ }
968+
969+ if ! bytes .Equal (ping , recv ) {
970+ t .Fatalf ("Unexpected %s data while expected %s" , recv , ping )
971+ }
972+
973+ err = <- cliResult
974+ if err != nil {
975+ t .Fatalf ("client error: %v" , err )
976+ }
977+ }
978+
926979func Test_ConnectionCasts (t * testing.T ) {
927980 l , err := net .Listen ("tcp" , "127.0.0.1:0" )
928981 if err != nil {
0 commit comments