// Copyright 2012 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package signal import ( "flag" "os" "syscall" "testing" "time" ) var runCtrlBreakTest = flag.Bool("run_ctlbrk_test", false, "force to run Ctrl+Break test") func sendCtrlBreak(t *testing.T) { d, e := syscall.LoadDLL("kernel32.dll") if e != nil { t.Fatalf("LoadDLL: %v\n", e) } p, e := d.FindProc("GenerateConsoleCtrlEvent") if e != nil { t.Fatalf("FindProc: %v\n", e) } r, _, e := p.Call(0, 0) if r == 0 { t.Fatalf("GenerateConsoleCtrlEvent: %v\n", e) } } func TestCtrlBreak(t *testing.T) { if !*runCtrlBreakTest { t.Logf("test disabled; use -run_ctlbrk_test to enable") return } go func() { time.Sleep(1 * time.Second) sendCtrlBreak(t) }() c := make(chan os.Signal, 10) Notify(c) select { case s := <-c: if s != os.Interrupt { t.Fatalf("Wrong signal received: got %q, want %q\n", s, os.Interrupt) } case <-time.After(3 * time.Second): t.Fatalf("Timeout waiting for Ctrl+Break\n") } }