func (r *Stop) Run(env *tachyon.CommandEnv) (*tachyon.Result, error) { conn, err := us.Dial() if err != nil { return nil, err } job, err := conn.Job(r.Name) if err != nil { return nil, err } err = job.Stop() if err != nil { if strings.Index(err.Error(), "Unknown instance") == 0 { res := tachyon.NewResult(false) res.Add("name", r.Name) return res, nil } } res := tachyon.NewResult(true) res.Add("name", r.Name) return res, nil }
func (r *Restart) Run(env *tachyon.CommandEnv) (*tachyon.Result, error) { conn, err := us.Dial() if err != nil { return nil, err } job, err := conn.Job(r.Name) if err != nil { return nil, err } inst, err := job.Restart() if err != nil { return nil, err } pid, err := inst.Pid() if err != nil { return nil, err } res := tachyon.NewResult(true) res.Add("name", r.Name) res.Add("pid", pid) return res, nil }
func TestStart(t *testing.T) { if !runUpstartTests { t.SkipNow() } opts := "name=" + jobName u, err := us.Dial() if err != nil { panic(err) } j, err := u.Job(jobName) if err != nil { panic(err) } defer j.Start() err = j.Stop() if err != nil { panic(err) } res, err := tachyon.RunAdhocTask("upstart/start", opts) if err != nil { panic(err) } if !res.Changed { t.Fatal("no change detected") } act, ok := res.Get("pid") if !ok { t.Fatal("pid not set") } pid, err := j.Pid() if err != nil { panic(err) } if pid != act.Read() { t.Fatal("job did not start?") } res, err = tachyon.RunAdhocTask("upstart/start", opts) if err != nil { panic(err) } if res.Changed { t.Fatal("change detected improperly") } }
func TestRestart(t *testing.T) { if !runUpstartTests { t.SkipNow() } opts := "name=" + jobName u, err := us.Dial() if err != nil { panic(err) } j, err := u.Job(jobName) if err != nil { panic(err) } prev, err := j.Pid() if err != nil { panic(err) } res, err := tachyon.RunAdhocTask("upstart/restart", opts) if err != nil { panic(err) } if !res.Changed { t.Fatal("no change detected") } cur, err := j.Pid() if err != nil { panic(err) } if res.Data.Get("pid") != cur { t.Log(res.Data) t.Fatal("pid not set properly") } if prev == cur { t.Fatal("restart did not happen") } }
func (r *Start) Run(env *tachyon.CommandEnv) (*tachyon.Result, error) { conn, err := us.Dial() if err != nil { return nil, err } var ienv []string for k, v := range r.Env { ienv = append(ienv, fmt.Sprintf("%s=%s", k, v)) } job, err := conn.Job(r.Name) if err != nil { return nil, err } inst, err := job.StartWithOptions(ienv, true) if err != nil { if strings.Index(err.Error(), "Job is already running") == 0 { res := tachyon.NewResult(false) res.Add("name", r.Name) return res, nil } return nil, err } pid, err := inst.Pid() if err != nil { return nil, err } res := tachyon.NewResult(true) res.Add("name", r.Name) res.Add("pid", pid) return res, nil }
func TestStop(t *testing.T) { if !runUpstartTests { t.SkipNow() } opts := "name=" + jobName u, err := us.Dial() if err != nil { panic(err) } j, err := u.Job(jobName) if err != nil { panic(err) } defer j.Start() res, err := tachyon.RunAdhocTask("upstart/stop", opts) if err != nil { panic(err) } if !res.Changed { t.Fatal("no change detected") } res, err = tachyon.RunAdhocTask("upstart/stop", opts) if err != nil { panic(err) } if res.Changed { t.Fatal("change detected improperly") } }
func TestStartWithEnv(t *testing.T) { if !runUpstartTests { t.SkipNow() } opts := "name=" + jobName u, err := us.Dial() if err != nil { panic(err) } j, err := u.Job(jobName) if err != nil { panic(err) } defer j.Start() err = j.Stop() if err != nil { panic(err) } td := tachyon.TaskData{ "upstart/start": map[interface{}]interface{}{ "name": jobName, "env": map[interface{}]interface{}{ "BAR": "foo", }, }, } res, err := tachyon.RunAdhocTaskVars(td) if err != nil { panic(err) } if !res.Changed { t.Fatal("no change detected") } act, ok := res.Get("pid") if !ok { t.Fatal("pid not set") } pid, err := j.Pid() if err != nil { panic(err) } if pid != act.Read() { t.Fatal("job did not start?") } res, err = tachyon.RunAdhocTask("upstart/start", opts) if err != nil { panic(err) } if res.Changed { t.Fatal("change detected improperly") } }