package cmd import ( "fmt" "log" "time" "github.com/Jaculabilis/intake/core" "github.com/spf13/cobra" ) var sourceTestCmd = &cobra.Command{ Use: "test [flags] -- argv", Short: "Test a fetch action", Long: fmt.Sprintf(`Execute a command as if it were a feed source's fetch action. Source-level configuration that is normally set via environment variable, such as INTAKE_TTL, will not be applied by --env. %s`, makeFormatHelpText()), Run: func(cmd *cobra.Command, args []string) { sourceTest( stringArrayArg(cmd, "env"), stringArg(cmd, "format"), stringArg(cmd, "timeout"), getArgv(cmd, args), ) }, } func init() { sourceCmd.AddCommand(sourceTestCmd) sourceTestCmd.Flags().StringArrayP("env", "e", nil, "Environment variables to set, in the form KEY=VAL") sourceTestCmd.Flags().StringP("format", "f", "headlines", "Feed format for returned items.") sourceTestCmd.Flags().StringP("timeout", "t", core.DefaultTimeout.String(), fmt.Sprintf("Timeout duration (default: %s)", core.DefaultTimeout.String())) } func sourceTest(env []string, format string, timeout string, cmd []string) { formatter := formatAs(format) duration, err := time.ParseDuration(timeout) if err != nil { log.Fatalf("error: invalid duration: %v", err) } items, state, _, err := core.Execute("test", cmd, env, nil, "", duration, nil) log.Printf("returned %d items", len(items)) log.Printf("wrote %d bytes of state", len(state)) if err != nil { log.Fatal(err) } for _, item := range items { fmt.Println(formatter(item)) } }