github.com/rudderlabs/rudder-go-kit@v0.30.0/httputil/client_test.go (about)

     1  package httputil_test
     2  
     3  import (
     4  	"net/http"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  
     9  	"github.com/rudderlabs/rudder-go-kit/httputil"
    10  )
    11  
    12  func TestGetRequestIP(t *testing.T) {
    13  	testCases := []struct {
    14  		name           string
    15  		headerValue    string
    16  		remoteAddr     string
    17  		expectedResult string
    18  	}{
    19  		{
    20  			name:           "X-Forwarded-For provided",
    21  			headerValue:    "192.168.0.1, 192.168.0.2",
    22  			remoteAddr:     "192.168.0.3:8080",
    23  			expectedResult: "192.168.0.1",
    24  		},
    25  		{
    26  			name:           "X-Forwarded-For empty, RemoteAddr provided",
    27  			headerValue:    "",
    28  			remoteAddr:     "192.168.0.4:8080",
    29  			expectedResult: "192.168.0.4",
    30  		},
    31  		{
    32  			name:           "X-Forwarded-For and RemoteAddr both empty",
    33  			headerValue:    "",
    34  			remoteAddr:     "",
    35  			expectedResult: "",
    36  		},
    37  	}
    38  
    39  	for _, testCase := range testCases {
    40  		t.Run(testCase.name, func(t *testing.T) {
    41  			req := &http.Request{
    42  				Header:     http.Header{"X-Forwarded-For": {testCase.headerValue}},
    43  				RemoteAddr: testCase.remoteAddr,
    44  			}
    45  			require.Equal(t, testCase.expectedResult, httputil.GetRequestIP(req))
    46  		})
    47  	}
    48  }