4
4
_ "embed"
5
5
"flag"
6
6
"fmt"
7
- "github.com/CursedHardware/go-ipv6-test/ipv6test"
7
+ . "github.com/CursedHardware/go-ipv6-test/ipv6test"
8
8
"github.com/fatih/color"
9
9
"net/http"
10
10
"strings"
@@ -23,43 +23,71 @@ func init() {
23
23
}
24
24
25
25
func main () {
26
- tester := & ipv6test. Tester {
26
+ tester := & Tester {
27
27
Client : http .DefaultClient ,
28
28
MTU : 1600 ,
29
29
}
30
30
switch {
31
31
case listAll :
32
32
fmt .Println (strings .Join (knownHosts , "\n " ))
33
33
case testAll :
34
- var wg sync.WaitGroup
35
- var mux sync.Mutex
36
- for _ , knownHost := range knownHosts {
37
- wg .Add (1 )
38
- go func (host string ) {
39
- report := tester .Run (ipv6test .RecordIPv6 , host )
40
- mux .Lock ()
41
- fmt .Printf ("Test for %q\n " , host )
42
- emitReport (report )
43
- mux .Unlock ()
34
+ batchTasks (tester , []Task {RecordIPv6 }, knownHosts )
35
+ default :
36
+ fullTask (tester , host )
37
+ }
38
+ }
39
+
40
+ func invoke (tester * Tester , requests map [string ][]Task ) <- chan * Report {
41
+ var wg sync.WaitGroup
42
+ reports := make (chan * Report )
43
+ for taskHost , tasks := range requests {
44
+ wg .Add (len (tasks ))
45
+ for _ , task := range tasks {
46
+ go func (task Task , taskHost string ) {
47
+ if task == RecordASN4 || task == RecordASN6 {
48
+ taskHost = "lookup.test-ipv6.com"
49
+ }
50
+ reports <- tester .Run (task , taskHost )
44
51
wg .Done ()
45
- }(knownHost )
52
+ }(task , taskHost )
46
53
}
54
+ }
55
+ go func () {
47
56
wg .Wait ()
48
- default :
49
- for _ , taskType := range tasks {
50
- emitReport (tester .Run (taskType , host ))
51
- }
52
- emitReport (tester .Run (ipv6test .RecordASN4 , "ipv4.lookup.test-ipv6.com" ))
53
- emitReport (tester .Run (ipv6test .RecordASN6 , "ipv6.lookup.test-ipv6.com" ))
57
+ close (reports )
58
+ }()
59
+ return reports
60
+ }
61
+
62
+ func fullTask (tester * Tester , host string ) {
63
+ requests := make (map [string ][]Task )
64
+ requests [host ] = []Task {
65
+ RecordIPv4 , RecordIPv6 , RecordDualStack , RecordDualStackMTU ,
66
+ RecordIPv6MTU , RecordIPv6NS , RecordASN4 , RecordASN6 ,
67
+ }
68
+ for report := range invoke (tester , requests ) {
69
+ emitReport (report )
70
+ }
71
+ }
72
+
73
+ func batchTasks (tester * Tester , tasks []Task , hosts []string ) {
74
+ requests := make (map [string ][]Task )
75
+ for _ , testHost := range hosts {
76
+ requests [testHost ] = tasks
77
+ }
78
+ for report := range invoke (tester , requests ) {
79
+ fmt .Printf ("Test for %q\n " , report .Host )
80
+ emitReport (report )
54
81
}
55
82
}
56
83
57
- func emitReport (r * ipv6test. Report ) {
84
+ func emitReport (r * Report ) {
58
85
var ok = color .GreenString ("ok" )
59
86
var bad = color .BlueString ("bad" )
60
87
fmt .Println (r .Task .Name ())
61
88
if r .Failed {
62
89
fmt .Printf ("%s (%s)\n " , bad , r .Elapsed )
90
+ fmt .Println ()
63
91
return
64
92
}
65
93
status := bad
0 commit comments