func StartRunnerAndMakeConnection(manifest *manifest.Manifest, writer execLogger.ExecutionLogger, killChannel chan bool) (*TestRunner, error) { port, err := conn.GetPortFromEnvironmentVariable(common.GaugePortEnvName) if err != nil { port = 0 } gaugeConnectionHandler, connHandlerErr := conn.NewGaugeConnectionHandler(port, nil) if connHandlerErr != nil { return nil, connHandlerErr } testRunner, err := startRunner(manifest, strconv.Itoa(gaugeConnectionHandler.ConnectionPortNumber()), writer, killChannel) if err != nil { return nil, err } runnerConnection, connectionError := gaugeConnectionHandler.AcceptConnection(config.RunnerConnectionTimeout(), testRunner.ErrorChannel) testRunner.Connection = runnerConnection if connectionError != nil { writer.Debug("Runner connection error: %s", connectionError) err := testRunner.killRunner() if err != nil { writer.Debug("Error while killing runner: %s", err) } return nil, connectionError } return testRunner, nil }
func waitAndGetErrorMessage(errChannel chan error, cmd *exec.Cmd, writer execLogger.ExecutionLogger) { go func() { err := cmd.Wait() if err != nil { writer.Debug("Runner exited with error: %s", err) errChannel <- errors.New(fmt.Sprintf("Runner exited with error: %s\n", err.Error())) } }() }