-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathconnect_test.go
62 lines (58 loc) · 1.41 KB
/
connect_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
package scanner
import (
"runtime"
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestConnectScanner(t *testing.T) {
start := time.Now()
targets := "8.8.8.8-8.8.8.10, 2606:4700:4700::1001-2606:4700:4700::1003"
ports := "53,54,55-57"
opt := Options{
Method: MethodConnect,
Timeout: 3 * time.Second,
}
scanner, err := New(targets, ports, &opt)
require.NoError(t, err)
err = scanner.Start()
require.NoError(t, err)
result := make(map[string]struct{})
for address := range scanner.Result {
result[address] = struct{}{}
t.Log(address)
}
expected := []string{
"8.8.8.8:53",
"[2606:4700:4700::1001]:53",
}
for i := 0; i < len(expected); i++ {
if _, ok := result[expected[i]]; !ok {
t.Fatal(expected[i], "is lost")
}
}
t.Log("result:", len(result), "time:", time.Since(start))
require.Equal(t, scanner.HostNum().String(), "30")
require.Equal(t, scanner.Scanned().String(), "30")
}
func TestConnectScanner_Stop(t *testing.T) {
targets := "8.8.8.8/16"
ports := "53,54,55-57"
opt := Options{
Method: MethodConnect,
Timeout: 3 * time.Second,
}
scanner, err := New(targets, ports, &opt)
require.NoError(t, err)
err = scanner.Start()
require.NoError(t, err)
go func() {
err = scanner.Start()
require.Error(t, err)
}()
time.Sleep(2 * time.Second)
scanner.Stop()
go func() { scanner.Stop() }()
time.Sleep(250 * time.Millisecond)
require.Equal(t, 2, runtime.NumGoroutine())
}