// 設定自動リロードのテスト func TestStartAutoReload(t *testing.T) { configPath := ".reload.conf" configDir := "reload.d" os.Mkdir(configDir, 0777) ioutil.WriteFile(configPath, []byte(` [config] notifytype = stdout notifywhen = always webapi = 0.0.0.0:6777 log = "" cronlog = "" `), 0666) defer os.Remove(configPath) defer os.Remove(configDir) conf, err := config.LoadConfig(configPath, configDir) if err != nil { t.Error(err) } // 設定の確認 if conf.Config.NotifyWhen != "always" { t.Errorf("config load failed. notifyWhen: %v", conf.Config.NotifyWhen) } goron, err := NewGorond(conf) if err != nil { t.Error(err) } goron.Start() defer goron.Stop() // 1秒毎に監視 fswatch.WatchInterval = time.Second _, err = StartAutoReload(goron, configPath, configDir) if err != nil { t.Error(err) } // 2秒待って設定を書き換える time.Sleep(time.Second * 2) ioutil.WriteFile(configPath, []byte(` [config] notifytype = stdout notifywhen = onerror webapi = 0.0.0.0:6777 log = "" cronlog = "" `), 0666) // さらに2秒待つ time.Sleep(time.Second * 2) // 書き換わっている事の確認 if goron.Config.Config.NotifyWhen != "onerror" { t.Errorf("config not reloaded. notifyWhen: %v", goron.Config.Config.NotifyWhen) } }
func doMain(configPath string, includeDir string, pidPath string) int { // load config. config, err := config.LoadConfig(configPath, includeDir) if err != nil { log.Println(err) return -1 } // start goron. grn, err := goron.NewGorond(config) if err != nil { log.Println(err) return -1 } // Goronデーモンの開始 grn.Start() // API サーバの開始 if grn.Config.Config.WebApi != "" { webapi.SetLogger(config.Config.ApiLog) server, err := webapi.NewWebApiServer(grn.Config.Config.WebApi, grn) if err != nil { log.Println(err) return -2 } wc := make(chan os.Signal) wsc := make(chan error) signal.Notify(wc, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) err = server.Start(wc, wsc) if err != nil { log.Println(err) return -2 } } // create pid file. err = util.SavePidFile(pidPath) if err != nil { log.Println(err) return -3 } defer os.Remove(pidPath) log.Println("wait for signal") // wait for terminate. c := make(chan os.Signal) sc := make(chan int, 1) signal.Notify(c, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) go goron.WaitSignal(c, sc) return <-sc }
func doConfigTest(configPath string, includeDir string) int { // load config test. _, err := config.LoadConfig(configPath, includeDir) if err != nil { log.Println(err) return -1 } return 0 }
// テスト用のサーバを作成 func createTestServer(t *testing.T) (*WebApiServer, chan os.Signal, chan error) { conf, err := config.LoadConfig("webapi_test.conf", "config_test.d") if err != nil { t.Error(err) } grn, err := goron.NewGorond(conf) if err != nil { t.Error(err) } server, err := NewWebApiServer(grn.Config.Config.WebApi, grn) if err != nil { t.Error(err) os.Exit(-1) } wc := make(chan os.Signal) wsc := make(chan error) signal.Notify(wc, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) return server, wc, wsc }