blob: 87ad5f1e07abebbfc7da7d527a119b5e9da0b723 [file] [log] [blame]
package main
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/exec"
"go.skia.org/infra/go/testutils/unittest"
"go.skia.org/infra/task_driver/go/td"
)
// TestSubprocessExample_UseWithCommandCollector shows how to properly tell task driver to use
// a mock implementation of exec for its child subprocesses.
func TestSubprocessExample_UseWithCommandCollector(t *testing.T) {
unittest.SmallTest(t)
res := td.RunTestSteps(t, false, func(ctx context.Context) error {
mock := exec.CommandCollector{}
// In other code, this would be exec.NewContext(ctx, mock.Run), but that doesn't work with
// task driver's setup.
// TODO(borenet) Could this be done automatically by teaching taskdriver about RunFn?
ctx = td.WithExecRunFn(ctx, mock.Run)
err := subprocessExample(ctx)
if err != nil {
assert.NoError(t, err)
return err
}
require.Len(t, mock.Commands(), 2)
cmd := mock.Commands()[0]
assert.Equal(t, "llamasay", cmd.Name)
assert.Equal(t, []string{"hello", "world"}, cmd.Args)
cmd = mock.Commands()[1]
assert.Equal(t, "bearsay", cmd.Name)
assert.Equal(t, []string{"good", "night", "moon"}, cmd.Args)
return nil
})
require.Empty(t, res.Errors)
require.Empty(t, res.Exceptions)
}