Index | Examples | Files

package icmd

import ""

Package icmd executes binaries and provides convenient assertions for testing the results.



Package Files

command.go exitcode.go ops.go


const None = "[NOTHING]"

None is a token to inform Result.Assert that the output should be empty


var Success = Expected{}

Success is the default expected result. A Success result is one with a 0 ExitCode.

type Cmd Uses

type Cmd struct {
    Command    []string
    Timeout    time.Duration
    Stdin      io.Reader
    Stdout     io.Writer
    Dir        string
    Env        []string
    ExtraFiles []*os.File

Cmd contains the arguments and options for a process to run as part of a test suite.

func Command Uses

func Command(command string, args ...string) Cmd

Command create a simple Cmd with the specified command and arguments

type CmdOp Uses

type CmdOp func(*Cmd)

CmdOp is an operation which modified a Cmd structure used to execute commands

func Dir Uses

func Dir(path string) CmdOp

Dir sets the working directory of the command

func WithEnv Uses

func WithEnv(env ...string) CmdOp

WithEnv sets the environment variable of the command. Each arguments are in the form of KEY=VALUE

func WithExtraFile Uses

func WithExtraFile(f *os.File) CmdOp

WithExtraFile adds a file descriptor to the command

func WithStdin Uses

func WithStdin(r io.Reader) CmdOp

WithStdin sets the standard input of the command to the specified reader

func WithTimeout Uses

func WithTimeout(timeout time.Duration) CmdOp

WithTimeout sets the timeout duration of the command

type Expected Uses

type Expected struct {
    ExitCode int
    Timeout  bool
    Error    string
    Out      string
    Err      string

Expected is the expected output from a Command. This struct is compared to a Result struct by Result.Assert().

type Result Uses

type Result struct {
    Cmd      *exec.Cmd
    ExitCode int
    Error    error
    // Timeout is true if the command was killed because it ran for too long
    Timeout bool
    // contains filtered or unexported fields

Result stores the result of running a command

func RunCmd Uses

func RunCmd(cmd Cmd, cmdOperators ...CmdOp) *Result

RunCmd runs a command and returns a Result


result := icmd.RunCmd(icmd.Command("cat", "/does/not/exist"))
result.Assert(t, icmd.Expected{
    ExitCode: 1,
    Err:      "cat: /does/not/exist: No such file or directory",

func RunCommand Uses

func RunCommand(command string, args ...string) *Result

RunCommand runs a command with default options, and returns a result


result := icmd.RunCommand("bash", "-c", "echo all good")
result.Assert(t, icmd.Success)

func StartCmd Uses

func StartCmd(cmd Cmd) *Result

StartCmd starts a command, but doesn't wait for it to finish

func WaitOnCmd Uses

func WaitOnCmd(timeout time.Duration, result *Result) *Result

WaitOnCmd waits for a command to complete. If timeout is non-nil then only wait until the timeout.

func (*Result) Assert Uses

func (r *Result) Assert(t assert.TestingT, exp Expected) *Result

Assert compares the Result against the Expected struct, and fails the test if any of the expectations are not met.

This function is equivalent to assert.Assert(t, result.Equal(exp)).

func (*Result) Combined Uses

func (r *Result) Combined() string

Combined returns the stdout and stderr combined into a single string

func (*Result) Compare Uses

func (r *Result) Compare(exp Expected) error

Compare the result to Expected and return an error if they do not match.

func (*Result) Equal Uses

func (r *Result) Equal(exp Expected) cmp.Comparison

Equal compares the result to Expected. If the result doesn't match expected returns a formatted failure message with the command, stdout, stderr, exit code, and any failed expectations.

func (*Result) Stderr Uses

func (r *Result) Stderr() string

Stderr returns the stderr of the process as a string

func (*Result) Stdout Uses

func (r *Result) Stdout() string

Stdout returns the stdout of the process as a string

func (*Result) String Uses

func (r *Result) String() string

Package icmd imports 12 packages (graph) and is imported by 6 packages. Updated 2019-09-02. Refresh now. Tools for package owners.