// REST API instances that are started are killed when the tests end. // When we eventually have a REST API Stop command this can be killed. func startAPI() string { // Start a REST API to talk to rest.StreamingBufferWindow = 0.01 log.SetLevel(LOG_LEVEL) r, _ := rest.New(rest.GetDefaultConfig()) c := control.New(control.GetDefaultConfig()) c.Start() s := scheduler.New(scheduler.GetDefaultConfig()) s.SetMetricManager(c) s.Start() r.BindConfigManager(c.Config) r.BindMetricManager(c) r.BindTaskManager(s) go func(ch <-chan error) { // Block on the error channel. Will return exit status 1 for an error or just return if the channel closes. err, ok := <-ch if !ok { return } log.Fatal(err) }(r.Err()) r.SetAddress("127.0.0.1:0") r.Start() time.Sleep(100 * time.Millisecond) return fmt.Sprintf("http://localhost:%d", r.Port()) }
func getDefaultMockConfig() *mockConfig { return &mockConfig{ LogLevel: 3, GoMaxProcs: 1, LogPath: "", Control: control.GetDefaultConfig(), Scheduler: scheduler.GetDefaultConfig(), RestAPI: GetDefaultConfig(), } }
// get the default snapd configuration func getDefaultConfig() *Config { return &Config{ LogLevel: defaultLogLevel, GoMaxProcs: defaultGoMaxProcs, LogPath: defaultLogPath, Control: control.GetDefaultConfig(), Scheduler: scheduler.GetDefaultConfig(), RestAPI: rest.GetDefaultConfig(), Tribe: tribe.GetDefaultConfig(), } }
func startTribes(count int) []int { seed := "" var wg sync.WaitGroup var mgtPorts []int for i := 0; i < count; i++ { mgtPort := getPort() mgtPorts = append(mgtPorts, mgtPort) tribePort := getPort() conf := tribe.GetDefaultConfig() conf.Name = fmt.Sprintf("member-%v", mgtPort) conf.BindAddr = "127.0.0.1" conf.BindPort = tribePort conf.Seed = seed conf.RestAPIPort = mgtPort conf.MemberlistConfig.PushPullInterval = 5 * time.Second conf.MemberlistConfig.RetransmitMult = conf.MemberlistConfig.RetransmitMult * 2 if seed == "" { seed = fmt.Sprintf("%s:%d", "127.0.0.1", tribePort) } t, err := tribe.New(conf) if err != nil { panic(err) } c := control.New(control.GetDefaultConfig()) c.RegisterEventHandler("tribe", t) c.Start() s := scheduler.New(scheduler.GetDefaultConfig()) s.SetMetricManager(c) s.RegisterEventHandler("tribe", t) s.Start() t.SetPluginCatalog(c) t.SetTaskManager(s) t.Start() r, _ := rest.New(rest.GetDefaultConfig()) r.BindMetricManager(c) r.BindTaskManager(s) r.BindTribeManager(t) r.SetAddress("", mgtPort) r.Start() wg.Add(1) timer := time.After(10 * time.Second) go func(port int) { defer wg.Done() for { select { case <-timer: panic("timed out") default: time.Sleep(100 * time.Millisecond) resp := getMembers(port) if resp.Meta.Code == 200 && len(resp.Body.(*rbody.TribeMemberList).Members) == count { log.Infof("num of members %v", len(resp.Body.(*rbody.TribeMemberList).Members)) return } } } }(mgtPort) } wg.Wait() uris := make([]int, len(mgtPorts)) for idx, port := range mgtPorts { uris[idx] = port } return uris }
// returns an array of the mgtports and the tribe port for the last node func startTribes(count int, seed string) ([]int, int, *listenToSeedEvents) { var wg sync.WaitGroup var tribePort int var mgtPorts []int lpe := newListenToSeedEvents() for i := 0; i < count; i++ { mgtPort := getAvailablePort() mgtPorts = append(mgtPorts, mgtPort) tribePort = getAvailablePort() conf := tribe.GetDefaultConfig() conf.Name = fmt.Sprintf("member-%v", mgtPort) conf.BindAddr = "127.0.0.1" conf.BindPort = tribePort conf.Seed = seed conf.RestAPIPort = mgtPort //conf.MemberlistConfig.PushPullInterval = 5 * time.Second conf.MemberlistConfig.RetransmitMult = conf.MemberlistConfig.RetransmitMult * 2 t, err := tribe.New(conf) if err != nil { panic(err) } if seed == "" { seed = fmt.Sprintf("%s:%d", "127.0.0.1", tribePort) t.EventManager.RegisterHandler("tribe.tests", lpe) } cfg := control.GetDefaultConfig() // get an available port to avoid conflicts (we aren't testing remote workflows here) cfg.ListenPort = getAvailablePort() c := control.New(cfg) c.RegisterEventHandler("tribe", t) c.Start() s := scheduler.New(scheduler.GetDefaultConfig()) s.SetMetricManager(c) s.RegisterEventHandler("tribe", t) s.Start() t.SetPluginCatalog(c) t.SetTaskManager(s) t.Start() r, _ := New(GetDefaultConfig()) r.BindMetricManager(c) r.BindTaskManager(s) r.BindTribeManager(t) r.SetAddress(fmt.Sprintf("127.0.0.1:%d", mgtPort)) r.Start() wg.Add(1) timer := time.After(10 * time.Second) go func(port int) { defer wg.Done() for { select { case <-timer: panic("timed out") default: time.Sleep(100 * time.Millisecond) resp := getMembers(port) if resp.Meta.Code == 200 && len(resp.Body.(*rbody.TribeMemberList).Members) >= count { restLogger.Infof("num of members %v", len(resp.Body.(*rbody.TribeMemberList).Members)) return } } } }(mgtPort) } wg.Wait() return mgtPorts, tribePort, lpe }