@@ -22,7 +22,7 @@ import (
22
22
"io/ioutil"
23
23
"net"
24
24
"os"
25
- "path"
25
+ "path/filepath "
26
26
"reflect"
27
27
"strings"
28
28
"sync"
@@ -35,37 +35,48 @@ func TestSocketMonitorConnectDisconnect(t *testing.T) {
35
35
done ()
36
36
}
37
37
38
- func TestSocketMonitor_Listen (t * testing.T ) {
39
- dir , err := ioutil .TempDir (os .TempDir (), "qemu-go.tests." )
40
- defer os .Remove (dir )
38
+ func TestSocketMonitorListen (t * testing.T ) {
39
+ dir , err := ioutil .TempDir (os .TempDir (), "go-qemu-test" )
41
40
if err != nil {
42
41
t .Fatalf ("failed to create temporary directory: %v" , err )
43
42
}
44
- sock := path .Join (dir , "sock" )
43
+ defer os .RemoveAll (dir )
44
+
45
+ sock := filepath .Join (dir , "listener.sock" )
46
+
47
+ // Fail the test if the socket takes too long to be ready.
48
+ timer := time .AfterFunc (3 * time .Second , func () {
49
+ panic ("took too long to connect to QMP listener" )
50
+ })
51
+ defer timer .Stop ()
52
+
53
+ // Ensure that goroutine client stops.
54
+ var wg sync.WaitGroup
55
+ wg .Add (1 )
45
56
46
57
go func () {
47
- timer := time . NewTimer ( 50 * time . Millisecond )
58
+ defer wg . Done ( )
48
59
49
- select {
50
- case <- timer . C :
60
+ // Keep waiting for the socket to appear.
61
+ for {
51
62
if _ , err := os .Stat (sock ); err == nil {
52
- _ , err := net .Dial ("unix" , sock )
53
- if err != nil {
54
- t .Fatalf ("failed to connect to socket %s: %v" , sock , err )
55
- }
56
63
break
57
64
}
58
- case <- time .After (time .Second * 3 ):
59
- t .Fatalf ("timed out connecting to socket %s" , sock )
60
- break
65
+
66
+ time .Sleep (100 * time .Millisecond )
67
+ }
68
+
69
+ // Attempt to dial the socket before the timeout expires.
70
+ if _ , err := net .Dial ("unix" , sock ); err != nil {
71
+ panic (fmt .Sprintf ("failed to dial to listener: %v" , err ))
61
72
}
62
- timer .Stop ()
63
73
}()
64
74
65
- _ , err = Listen ("unix" , sock )
66
- if err != nil {
67
- t .Fatalf ("failed to listen with socket %s: %v" , sock , err )
75
+ if _ , err := Listen ("unix" , sock ); err != nil {
76
+ t .Fatalf ("failed to listen with socket %q: %v" , sock , err )
68
77
}
78
+
79
+ wg .Wait ()
69
80
}
70
81
71
82
func TestSocketMonitorEvents (t * testing.T ) {
0 commit comments