@@ -857,6 +857,91 @@ func TestIgnorePolicyIgnoresIpFromProxyHeader(t *testing.T) {
857857 }
858858}
859859
860+ func TestIgnoreUpstreamPolicyIgnoresIpFromProxyHeader (t * testing.T ) {
861+ l , err := net .Listen ("tcp" , "127.0.0.1:0" )
862+ if err != nil {
863+ t .Fatalf ("err: %v" , err )
864+ }
865+
866+ policyFunc := func (downstream net.Addr ) (Policy , error ) { return IGNORE , nil }
867+
868+ pl := & Listener {Listener : l , DownstreamPolicy : policyFunc }
869+
870+ cliResult := make (chan error )
871+ go func () {
872+ conn , err := net .Dial ("tcp" , pl .Addr ().String ())
873+ if err != nil {
874+ cliResult <- err
875+ return
876+ }
877+ defer conn .Close ()
878+
879+ // Write out the header!
880+ header := & Header {
881+ Version : 2 ,
882+ Command : PROXY ,
883+ TransportProtocol : TCPv4 ,
884+ SourceAddr : & net.TCPAddr {
885+ IP : net .ParseIP ("10.1.1.1" ),
886+ Port : 1000 ,
887+ },
888+ DestinationAddr : & net.TCPAddr {
889+ IP : net .ParseIP ("20.2.2.2" ),
890+ Port : 2000 ,
891+ },
892+ }
893+ if _ , err := header .WriteTo (conn ); err != nil {
894+ cliResult <- err
895+ return
896+ }
897+
898+ if _ , err := conn .Write ([]byte ("ping" )); err != nil {
899+ cliResult <- err
900+ return
901+ }
902+
903+ recv := make ([]byte , 4 )
904+ if _ , err = conn .Read (recv ); err != nil {
905+ cliResult <- err
906+ return
907+ }
908+ if ! bytes .Equal (recv , []byte ("pong" )) {
909+ cliResult <- fmt .Errorf ("bad: %v" , recv )
910+ return
911+ }
912+
913+ close (cliResult )
914+ }()
915+
916+ conn , err := pl .Accept ()
917+ if err != nil {
918+ t .Fatalf ("err: %v" , err )
919+ }
920+ defer conn .Close ()
921+
922+ recv := make ([]byte , 4 )
923+ if _ , err = conn .Read (recv ); err != nil {
924+ t .Fatalf ("err: %v" , err )
925+ }
926+ if ! bytes .Equal (recv , []byte ("ping" )) {
927+ t .Fatalf ("bad: %v" , recv )
928+ }
929+
930+ if _ , err := conn .Write ([]byte ("pong" )); err != nil {
931+ t .Fatalf ("err: %v" , err )
932+ }
933+
934+ // Check the remote addr
935+ addr := conn .RemoteAddr ().(* net.TCPAddr )
936+ if addr .IP .String () != "127.0.0.1" {
937+ t .Fatalf ("bad: %v" , addr )
938+ }
939+ err = <- cliResult
940+ if err != nil {
941+ t .Fatalf ("client error: %v" , err )
942+ }
943+ }
944+
860945func Test_AllOptionsAreRecognized (t * testing.T ) {
861946 recognizedOpt1 := false
862947 opt1 := func (c * Conn ) {
0 commit comments