...
1 package signals
2
3 import (
4 "fmt"
5 "os"
6 "os/signal"
7 "sync"
8 "testing"
9 "time"
10 )
11
12 func TestSignalHandler(t *testing.T) {
13 ctx := SetupSignalHandler()
14 task := &Task{
15 ticker: time.NewTicker(time.Millisecond * 20),
16 }
17 c := make(chan os.Signal, 1)
18 signal.Notify(c, os.Interrupt)
19 task.wg.Add(1)
20 go func(c chan os.Signal) {
21 defer task.wg.Done()
22 task.Run(c)
23 }(c)
24
25 select {
26 case sig := <-c:
27 fmt.Printf("Got %s signal. Aborting...\n", sig)
28 case _, ok := <-ctx.Done():
29 if ok != false {
30 t.Fatalf("expected ok to be false, was %v", ok)
31 }
32 }
33 }
34
35 type Task struct {
36 wg sync.WaitGroup
37 ticker *time.Ticker
38 }
39
40 func (t *Task) Run(c chan os.Signal) {
41 for {
42 go sendSignal(c)
43 handle()
44 }
45 }
46 func sendSignal(stopChan chan os.Signal) {
47 fmt.Printf("...")
48 time.Sleep(10 * time.Millisecond)
49 stopChan <- os.Interrupt
50 }
51
52 func handle() {
53 for i := 0; i < 5; i++ {
54 fmt.Print("#")
55 time.Sleep(time.Millisecond * 10)
56 }
57 }
58
View as plain text