...

Source file src/edge-infra.dev/pkg/lib/runtime/manager/signals/signal_test.go

Documentation: edge-infra.dev/pkg/lib/runtime/manager/signals

     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