func TestSighupHandler(t *testing.T) { ranHandler := make(chan bool, 1) handler := func(d daemon.Daemon) { ranHandler <- true } conf, _ := config.New("example.yaml") d, _ := daemon.New(conf) setupSighupHandler(d, handler) // Need to sleep here so that the goroutine has time to set up the signal listener, otherwise // the signal gets missed time.Sleep(1 * time.Second) syscall.Kill(syscall.Getpid(), syscall.SIGHUP) // Give the syscall 1 second to be handled, should be more than enough time timeout := make(chan bool, 1) go func() { time.Sleep(time.Duration(1 * time.Second)) timeout <- true }() select { case <-ranHandler: case <-timeout: t.Fatal("Didn't run handler") } // Try calling again and make sure it still happens syscall.Kill(syscall.Getpid(), syscall.SIGHUP) select { case <-ranHandler: case <-timeout: t.Fatal("Didn't run handler second time") } }
func main() { flag.Parse() conf, err := config.New(*configfile) if err != nil { log.Fatalf("LOAD_CONFIG_FAILED: %s", err.Error()) } sphinxd, err := daemon.New(conf) if err != nil { log.Fatal(err) } setupSighupHandler(sphinxd, sighupHandler) if *validate { print("configuration parsed and Sphinx loaded fine. not starting dameon.") return } sphinxd.Start() }