-
-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathtor_test.go
130 lines (116 loc) · 2.75 KB
/
tor_test.go
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package caddywaf
import (
"net/http"
"net/http/httptest"
"os"
"testing"
"github.com/caddyserver/caddy/v2"
"github.com/stretchr/testify/assert"
"go.uber.org/zap"
)
func TestTorConfig_Provision(t *testing.T) {
// Create temp file for testing
tmpFile, err := os.CreateTemp("", "tor_blacklist_*.txt")
if err != nil {
t.Fatal(err)
}
defer os.Remove(tmpFile.Name())
logger := zap.NewNop()
ctx := &caddy.Context{}
tests := []struct {
name string
config TorConfig
wantErr bool
}{
{
name: "disabled config",
config: TorConfig{
Enabled: false,
TORIPBlacklistFile: tmpFile.Name(),
UpdateInterval: "5m",
logger: logger,
},
wantErr: false,
},
{
name: "enabled config",
config: TorConfig{
Enabled: true,
TORIPBlacklistFile: tmpFile.Name(),
UpdateInterval: "5m",
logger: logger,
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := tt.config.Provision(*ctx)
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
}
}
func TestTorConfig_updateTorExitNodes(t *testing.T) {
// Create mock HTTP server
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("1.1.1.1\n2.2.2.2\n3.3.3.3"))
}))
defer ts.Close()
// Override torExitNodeURL for testing
originalURL := torExitNodeURL
torExitNodeURL = ts.URL
defer func() { torExitNodeURL = originalURL }()
// Create temp file
tmpFile, err := os.CreateTemp("", "tor_blacklist_*.txt")
if err != nil {
t.Fatal(err)
}
defer os.Remove(tmpFile.Name())
config := &TorConfig{
Enabled: true,
TORIPBlacklistFile: tmpFile.Name(),
UpdateInterval: "5m",
logger: zap.NewNop(),
}
err = config.updateTorExitNodes()
assert.NoError(t, err)
// Verify file contents
data, err := os.ReadFile(tmpFile.Name())
assert.NoError(t, err)
assert.Contains(t, string(data), "1.1.1.1")
assert.Contains(t, string(data), "2.2.2.2")
assert.Contains(t, string(data), "3.3.3.3")
}
func TestUnique(t *testing.T) {
tests := []struct {
name string
input []string
expected []string
}{
{
name: "empty slice",
input: []string{},
expected: []string{},
},
{
name: "no duplicates",
input: []string{"1.1.1.1", "2.2.2.2", "3.3.3.3"},
expected: []string{"1.1.1.1", "2.2.2.2", "3.3.3.3"},
},
{
name: "with duplicates",
input: []string{"1.1.1.1", "2.2.2.2", "1.1.1.1", "3.3.3.3", "2.2.2.2"},
expected: []string{"1.1.1.1", "2.2.2.2", "3.3.3.3"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := unique(tt.input)
assert.ElementsMatch(t, tt.expected, result)
})
}
}