@@ -105,46 +105,37 @@ func TestCtrlHandler(t *testing.T) {
105
105
outReader := bufio .NewReader (outPipe )
106
106
107
107
// in a new command window
108
- const CREATE_NEW_CONSOLE = 0x00000010
108
+ const _CREATE_NEW_CONSOLE = 0x00000010
109
109
cmd .SysProcAttr = & syscall.SysProcAttr {
110
- CreationFlags : CREATE_NEW_CONSOLE ,
110
+ CreationFlags : _CREATE_NEW_CONSOLE ,
111
111
}
112
112
if err := cmd .Start (); err != nil {
113
113
t .Fatalf ("Start failed: %v" , err )
114
114
}
115
+ defer func () {
116
+ cmd .Process .Kill ()
117
+ cmd .Wait ()
118
+ }()
115
119
116
- errCh := make (chan error , 1 )
117
- go func () {
118
- // wait for child to be ready to receive signals
119
- if line , err := outReader .ReadString ('\n' ); err != nil {
120
- errCh <- fmt .Errorf ("could not read stdout: %w" , err )
121
- return
122
- } else if strings .TrimSpace (line ) != "ready" {
123
- errCh <- fmt .Errorf ("unexpected message: %v" , line )
124
- return
125
- }
126
-
127
- // gracefully kill pid, this closes the command window
128
- if err := exec .Command ("taskkill.exe" , "/pid" , strconv .Itoa (cmd .Process .Pid )).Run (); err != nil {
129
- errCh <- fmt .Errorf ("failed to kill: %w" , err )
130
- return
131
- }
132
-
133
- // check child received, handled SIGTERM
134
- if line , err := outReader .ReadString ('\n' ); err != nil {
135
- errCh <- fmt .Errorf ("could not read stdout: %w" , err )
136
- return
137
- } else if expected , got := syscall .SIGTERM .String (), strings .TrimSpace (line ); expected != got {
138
- errCh <- fmt .Errorf ("Expected '%s' got: %s" , expected , got )
139
- return
140
- }
120
+ // wait for child to be ready to receive signals
121
+ if line , err := outReader .ReadString ('\n' ); err != nil {
122
+ t .Fatalf ("could not read stdout: %v" , err )
123
+ } else if strings .TrimSpace (line ) != "ready" {
124
+ t .Fatalf ("unexpected message: %s" , line )
125
+ }
141
126
142
- errCh <- nil
143
- }()
127
+ // gracefully kill pid, this closes the command window
128
+ if err := exec .Command ("taskkill.exe" , "/pid" , strconv .Itoa (cmd .Process .Pid )).Run (); err != nil {
129
+ t .Fatalf ("failed to kill: %v" , err )
130
+ }
144
131
145
- if err := <- errCh ; err != nil {
146
- t .Fatal (err )
132
+ // check child received, handled SIGTERM
133
+ if line , err := outReader .ReadString ('\n' ); err != nil {
134
+ t .Fatalf ("could not read stdout: %v" , err )
135
+ } else if expected , got := syscall .SIGTERM .String (), strings .TrimSpace (line ); expected != got {
136
+ t .Fatalf ("Expected '%s' got: %s" , expected , got )
147
137
}
138
+
148
139
// check child exited gracefully, did not timeout
149
140
if err := cmd .Wait (); err != nil {
150
141
t .Fatalf ("Program exited with error: %v\n %s" , err , & stderr )
0 commit comments