package session_test import ( "net/http" "testing" "code.nonshy.com/nonshy/website/pkg/config" "code.nonshy.com/nonshy/website/pkg/session" ) func TestRemoteAddr(t *testing.T) { var tests = []struct { RemoteAddr string XForwardedFor string Expect string }{ { "127.0.0.1:12345", "", "127.0.0.1", }, { "127.0.0.1:22022", "8.8.4.4:12345", "8.8.4.4", }, { "127.0.0.1:11223", "8.8.4.4:12345, 8.8.1.1, 1.1.1.1", "8.8.4.4", }, { "127.0.0.1", "8.8.8.8, 8.8.4.4, 1.1.1.1", "8.8.8.8", }, { "127.0.0.1", "2001:db8:85a3:8d3:1319:8a2e:370:7348", "2001:db8:85a3:8d3:1319:8a2e:370", // acceptable bug }, { "127.0.0.1", "2001:db8:85a3:8d3:1319:8a2e:370:7bee", "2001:db8:85a3:8d3:1319:8a2e:370:7bee", }, { "127.0.0.1", "2001:db8:85a3:8d3:1319:8a2e:370:7bee, 127.0.0.7", "2001:db8:85a3:8d3:1319:8a2e:370:7bee", }, } // Test all cases with X-Forwarded-For enabled. config.Current.UseXForwardedFor = true for _, test := range tests { r, _ := http.NewRequest("GET", "/", nil) r.RemoteAddr = test.RemoteAddr if test.XForwardedFor != "" { r.Header.Set("X-Forwarded-For", test.XForwardedFor) } actual := session.RemoteAddr(r) if actual != test.Expect { t.Errorf("RemoteAddr expected %s but got %s for (RemoteAddr=%s XForwardedFor=%s)", test.Expect, actual, test.RemoteAddr, test.XForwardedFor, ) } } // Test them without X-Forwarded-For -- the expect should always be the RemoteAddr. config.Current.UseXForwardedFor = false for _, test := range tests { r, _ := http.NewRequest("GET", "/", nil) r.RemoteAddr = test.RemoteAddr if test.XForwardedFor != "" { r.Header.Set("X-Forwarded-For", test.XForwardedFor) } actual := session.RemoteAddr(r) if actual != "127.0.0.1" { t.Errorf("Without X-Forwarded-For %+v did not return 127.0.0.1", test) } } }