2017-04-12 08:27:57 -04:00
|
|
|
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
|
2016-05-27 08:35:55 -07:00
|
|
|
// See License.txt for license information.
|
|
|
|
|
|
|
|
|
|
package utils
|
|
|
|
|
|
|
|
|
|
import (
|
2017-09-05 20:34:17 +01:00
|
|
|
"net/http"
|
2016-05-27 08:35:55 -07:00
|
|
|
"testing"
|
2017-09-05 20:34:17 +01:00
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
2016-05-27 08:35:55 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestStringArrayIntersection(t *testing.T) {
|
|
|
|
|
a := []string{
|
|
|
|
|
"abc",
|
|
|
|
|
"def",
|
|
|
|
|
"ghi",
|
|
|
|
|
}
|
|
|
|
|
b := []string{
|
|
|
|
|
"jkl",
|
|
|
|
|
}
|
|
|
|
|
c := []string{
|
|
|
|
|
"def",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if len(StringArrayIntersection(a, b)) != 0 {
|
|
|
|
|
t.Fatal("should be 0")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if len(StringArrayIntersection(a, c)) != 1 {
|
|
|
|
|
t.Fatal("should be 1")
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-09-30 11:06:30 -04:00
|
|
|
|
|
|
|
|
func TestRemoveDuplicatesFromStringArray(t *testing.T) {
|
|
|
|
|
a := []string{
|
|
|
|
|
"a",
|
|
|
|
|
"b",
|
|
|
|
|
"a",
|
|
|
|
|
"a",
|
|
|
|
|
"b",
|
|
|
|
|
"c",
|
|
|
|
|
"a",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if len(RemoveDuplicatesFromStringArray(a)) != 3 {
|
|
|
|
|
t.Fatal("should be 3")
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-09-05 20:34:17 +01:00
|
|
|
|
2019-03-15 17:53:53 +00:00
|
|
|
func TestStringSliceDiff(t *testing.T) {
|
|
|
|
|
a := []string{"one", "two", "three", "four", "five", "six"}
|
|
|
|
|
b := []string{"two", "seven", "four", "six"}
|
|
|
|
|
expected := []string{"one", "three", "five"}
|
|
|
|
|
|
|
|
|
|
assert.Equal(t, StringSliceDiff(a, b), expected)
|
|
|
|
|
}
|
|
|
|
|
|
2017-09-05 20:34:17 +01:00
|
|
|
func TestGetIpAddress(t *testing.T) {
|
|
|
|
|
// Test with a single IP in the X-Forwarded-For
|
|
|
|
|
httpRequest1 := http.Request{
|
|
|
|
|
Header: http.Header{
|
|
|
|
|
"X-Forwarded-For": []string{"10.0.0.1"},
|
|
|
|
|
"X-Real-Ip": []string{"10.1.0.1"},
|
|
|
|
|
},
|
|
|
|
|
RemoteAddr: "10.2.0.1:12345",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assert.Equal(t, "10.0.0.1", GetIpAddress(&httpRequest1))
|
|
|
|
|
|
|
|
|
|
// Test with multiple IPs in the X-Forwarded-For
|
|
|
|
|
httpRequest2 := http.Request{
|
|
|
|
|
Header: http.Header{
|
|
|
|
|
"X-Forwarded-For": []string{"10.0.0.1, 10.0.0.2, 10.0.0.3"},
|
|
|
|
|
"X-Real-Ip": []string{"10.1.0.1"},
|
|
|
|
|
},
|
|
|
|
|
RemoteAddr: "10.2.0.1:12345",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assert.Equal(t, "10.0.0.1", GetIpAddress(&httpRequest2))
|
|
|
|
|
|
|
|
|
|
// Test with an empty X-Forwarded-For
|
|
|
|
|
httpRequest3 := http.Request{
|
|
|
|
|
Header: http.Header{
|
|
|
|
|
"X-Forwarded-For": []string{""},
|
|
|
|
|
"X-Real-Ip": []string{"10.1.0.1"},
|
|
|
|
|
},
|
|
|
|
|
RemoteAddr: "10.2.0.1:12345",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assert.Equal(t, "10.1.0.1", GetIpAddress(&httpRequest3))
|
|
|
|
|
|
|
|
|
|
// Test without an X-Fowarded-For
|
|
|
|
|
httpRequest4 := http.Request{
|
|
|
|
|
Header: http.Header{
|
|
|
|
|
"X-Real-Ip": []string{"10.1.0.1"},
|
|
|
|
|
},
|
|
|
|
|
RemoteAddr: "10.2.0.1:12345",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assert.Equal(t, "10.1.0.1", GetIpAddress(&httpRequest4))
|
|
|
|
|
|
|
|
|
|
// Test without any headers
|
|
|
|
|
httpRequest5 := http.Request{
|
|
|
|
|
RemoteAddr: "10.2.0.1:12345",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assert.Equal(t, "10.2.0.1", GetIpAddress(&httpRequest5))
|
|
|
|
|
}
|