1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
package main
import (
"net/http"
"testing"
)
func TestMd5Hash(t *testing.T) {
hash := "f9d08276bc85d30d578e8883f3c7e843"
testHash := Md5Hash("md5hash")
if hash != testHash {
t.Fatal("Expected %s as hash. Got %s.", hash, testHash)
}
}
func TestCompareStrings(t *testing.T) {
if !CompareStrings("foo", "foo", "foo") {
t.Fatal("All strings are equal. Expected true.")
}
if CompareStrings("bar", "foo", "hello world", "523") {
t.Fatal("Strings are not equal. Exptected false")
}
}
func TestGetLanguage(t *testing.T) {
// Test language with neither cookie nor Accept-Language header
request, err := http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal("Error creating new http request. (/)", err)
}
lang := GetLanguage(request)
if lang != "" {
t.Log(lang)
t.Fatal("Expected empty string as lang.")
}
// Test language with lang=de
cookie := http.Cookie{Name: "lang", Value: "de"}
request, err = http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal("Error creating new http request. (/) 2nd time.", err)
}
request.AddCookie(&cookie)
lang = GetLanguage(request)
if lang != "de" {
t.Log(lang)
t.Fatal("Expected 'de' as lang.")
}
// Test language with lang=en
cookie = http.Cookie{Name: "lang", Value: "en"}
request, err = http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal("Error creating new http request. (/) 3rd time.", err)
}
request.AddCookie(&cookie)
lang = GetLanguage(request)
if lang != "" {
t.Log(lang)
t.Fatal("Expected empty string as lang.")
}
// Test language with garbage
cookie = http.Cookie{Name: "lang", Value: "foobar"}
request, err = http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal("Error creating new http request. (/) 4th time.", err)
}
request.AddCookie(&cookie)
lang = GetLanguage(request)
if lang != "" {
t.Log(lang)
t.Fatal("Expected empty string as lang.")
}
}
func TestGetIP(t *testing.T) {
// Test with X-Forwarded-For
request, err := http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal("Error creating new http request. (/)", err)
}
request.Header.Add("X-Forwarded-For", "10.0.0.1")
ip := GetIP(request)
if ip != "10.0.0.1" {
t.Fatal("Expected IP '10.0.0.1', got " + ip)
}
// Test with X-Real-Ip
request, err = http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal("Error creating new http request. (/)", err)
}
request.Header.Add("X-Real-Ip", "10.0.0.1")
ip = GetIP(request)
if ip != "10.0.0.1" {
t.Fatal("Expected IP '10.0.0.1', got " + ip)
}
// Test with RemoteAddr
// Since Golang itself doesn't set RemoteAddr '0.0.0.0' is expected
request, err = http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal("Error creating new http request. (/)", err)
}
ip = GetIP(request)
if ip != "0.0.0.0" {
t.Fatal("Expected IP '0.0.0.0', got " + ip)
}
}
|