mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: don't invoke t.Fatal* in goroutine in TestLibraryCtrlHandler
Change-Id: I8bb06c360cab3e5a74b0b0f98bb25cca4741d66d Reviewed-on: https://go-review.googlesource.com/c/go/+/221605 Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
33e98326a2
commit
c1abd5ab70
1 changed files with 14 additions and 10 deletions
|
|
@ -5,6 +5,7 @@ package runtime_test
|
|||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"fmt"
|
||||
"internal/testenv"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
|
|
@ -63,19 +64,20 @@ func TestVectoredHandlerDontCrashOnLibrary(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func sendCtrlBreak(t *testing.T, pid int) {
|
||||
func sendCtrlBreak(pid int) error {
|
||||
kernel32, err := syscall.LoadDLL("kernel32.dll")
|
||||
if err != nil {
|
||||
t.Fatalf("LoadDLL: %v\n", err)
|
||||
return fmt.Errorf("LoadDLL: %v\n", err)
|
||||
}
|
||||
generateEvent, err := kernel32.FindProc("GenerateConsoleCtrlEvent")
|
||||
if err != nil {
|
||||
t.Fatalf("FindProc: %v\n", err)
|
||||
return fmt.Errorf("FindProc: %v\n", err)
|
||||
}
|
||||
result, _, err := generateEvent.Call(syscall.CTRL_BREAK_EVENT, uintptr(pid))
|
||||
if result == 0 {
|
||||
t.Fatalf("GenerateConsoleCtrlEvent: %v\n", err)
|
||||
return fmt.Errorf("GenerateConsoleCtrlEvent: %v\n", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// TestLibraryCtrlHandler tests that Go DLL allows calling program to handle console control events.
|
||||
|
|
@ -130,18 +132,20 @@ func TestLibraryCtrlHandler(t *testing.T) {
|
|||
t.Fatalf("Start failed: %v", err)
|
||||
}
|
||||
|
||||
sentCtrl := make(chan bool)
|
||||
errCh := make(chan error, 1)
|
||||
go func() {
|
||||
defer close(sentCtrl)
|
||||
if line, err := outReader.ReadString('\n'); err != nil {
|
||||
t.Fatalf("Could not read stdout: %v", err)
|
||||
errCh <- fmt.Errorf("could not read stdout: %v", err)
|
||||
} else if strings.TrimSpace(line) != "ready" {
|
||||
t.Fatalf("Unexpected message: %v", line)
|
||||
errCh <- fmt.Errorf("unexpected message: %v", line)
|
||||
} else {
|
||||
errCh <- sendCtrlBreak(cmd.Process.Pid)
|
||||
}
|
||||
sendCtrlBreak(t, cmd.Process.Pid)
|
||||
}()
|
||||
|
||||
<-sentCtrl
|
||||
if err := <-errCh; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := cmd.Wait(); err != nil {
|
||||
t.Fatalf("Program exited with error: %v\n%s", err, &stderr)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue