func TestOutputTruncation(t *testing.T) { out := contracts.PluginOutput{ Stdout: "standard output of test case", Stderr: "standard error of test case", ExitCode: 0, Status: "Success", } response := contracts.TruncateOutput(out.Stdout, out.Stderr, 200) fmt.Printf("response=\n%v\n", response) assert.Equal(t, out.String(), response) }
// Execute runs multiple sets of commands and returns their outputs. // res.Output will contain a slice of PluginOutput. func (p *Plugin) Execute(context context.T, config contracts.Configuration, cancelFlag task.CancelFlag) (res contracts.PluginResult) { log := context.Log() log.Infof("%v started with configuration %v", Name(), config) res.StartDateTime = time.Now() defer func() { res.EndDateTime = time.Now() }() //loading Properties as list since aws:applications uses properties as list var properties []interface{} if properties, res = pluginutil.LoadParametersAsList(log, config.Properties); res.Code != 0 { pluginutil.PersistPluginInformationToCurrent(log, Name(), config, res) return res } msiFailureCount := 0 atleastOneRequestedReboot := false finalStdOut := "" finalStdErr := "" out := make([]ApplicationPluginOutput, len(properties)) for i, prop := range properties { // check if a reboot has been requested if rebooter.RebootRequested() { log.Infof("Stopping execution of %v plugin due to an external reboot request.", Name()) return } if cancelFlag.ShutDown() { res.Code = 1 res.Status = contracts.ResultStatusFailed pluginutil.PersistPluginInformationToCurrent(log, Name(), config, res) return } if cancelFlag.Canceled() { res.Code = 1 res.Status = contracts.ResultStatusCancelled pluginutil.PersistPluginInformationToCurrent(log, Name(), config, res) return } out[i] = p.runCommandsRawInput(log, prop, config.OrchestrationDirectory, cancelFlag, config.OutputS3BucketName, config.OutputS3KeyPrefix) if out[i].Status == contracts.ResultStatusFailed { msiFailureCount++ if out[i].Stdout != "" { finalStdOut = fmt.Sprintf("%v\n%v", finalStdOut, out[i].Stdout) } if out[i].Stderr != "" { finalStdErr = fmt.Sprintf("%v\n%v", finalStdErr, out[i].Stderr) } } if out[i].Status == contracts.ResultStatusSuccessAndReboot { atleastOneRequestedReboot = true res.Code = out[i].ExitCode } } if atleastOneRequestedReboot { res.Status = contracts.ResultStatusSuccessAndReboot } else { res.Status = contracts.ResultStatusSuccess res.Code = 0 } if msiFailureCount > 0 { finalStdOut = fmt.Sprintf("Number of Failures: %v\n%v", msiFailureCount, finalStdOut) res.Status = contracts.ResultStatusFailed res.Code = 1 } finalOut := contracts.PluginOutput{ Stdout: finalStdOut, Stderr: finalStdErr, } res.Output = finalOut.String() pluginutil.PersistPluginInformationToCurrent(log, Name(), config, res) return res }