Ejemplo n.º 1
0
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
}
Ejemplo n.º 2
0
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
}
Ejemplo n.º 3
0
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")
	}

}
Ejemplo n.º 4
0
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")
	}
}
Ejemplo n.º 5
0
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
}
Ejemplo n.º 6
0
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")
	}
}
Ejemplo n.º 7
0
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")
	}

}