func doOneAction()

in runner/main.go [130:176]


func doOneAction(index int, action *specs.Action, status *testStatus, results []testResult) {
	result := testResult{}
	if len(action.Name) <= 0 {
		glog.Fatalf("All actions must have names")
	}
	result.Name = fmt.Sprintf("%3d: %s", index, action.Name)
	glog.Infof(" > %s", result.Name)

	recordResult := func(r *testResult) {
		results[index] = *r
		if r.Passed {
			glog.Infof(" %s", r.Message)
		} else {
			glog.Errorf(" %s", r.Message)
		}
	}
	defer recordResult(&result)

	if action.Condition != nil {
		ok, msg := conditions.Evaluate(action.Condition, status)
		if !ok {
			result.Skip(msg)
			return
		}
	}

	if action.HttpTest != nil {
		msg := tests.RunHttpTest(action.HttpTest, &http.Client{})
		if len(msg) > 0 {
			result.Fail("HTTP test failed", msg)
			return
		}
	} else if action.Gcp != nil {
		msg := gcp.RunAction(action.Gcp)
		if len(msg) > 0 {
			result.Fail("GCP action failed", msg)
			return
		}
	} else if action.BashTest != nil {
		msg := tests.RunBashTest(action.BashTest, &tests.RealExecutor{})
		if len(msg) > 0 {
			result.Fail("Bash test failed", msg)
			return
		}
	}
	result.Pass()
}