59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"isle/daemon"
|
|
"isle/toolkit"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"dev.mediocregopher.com/mediocre-go-lib.git/mlog"
|
|
"github.com/stretchr/testify/assert"
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
type runHarness struct {
|
|
ctx context.Context
|
|
logger *mlog.Logger
|
|
daemonRPC *daemon.MockRPC
|
|
stdout *bytes.Buffer
|
|
}
|
|
|
|
func newRunHarness(t *testing.T) *runHarness {
|
|
t.Parallel()
|
|
|
|
var (
|
|
ctx = context.Background()
|
|
logger = toolkit.NewTestLogger(t)
|
|
daemonRPC = daemon.NewMockRPC(t)
|
|
stdout = new(bytes.Buffer)
|
|
)
|
|
|
|
return &runHarness{ctx, logger, daemonRPC, stdout}
|
|
}
|
|
|
|
func (h *runHarness) run(_ *testing.T, args ...string) error {
|
|
return doRootCmd(h.ctx, h.logger, &subCmdCtxOpts{
|
|
args: args,
|
|
daemonRPC: h.daemonRPC,
|
|
stdout: h.stdout,
|
|
})
|
|
}
|
|
|
|
func (h *runHarness) runAssertStdout(
|
|
t *testing.T,
|
|
want any,
|
|
args ...string,
|
|
) {
|
|
var (
|
|
gotType = reflect.ValueOf(want)
|
|
got = reflect.New(gotType.Type())
|
|
)
|
|
|
|
h.stdout.Reset()
|
|
assert.NoError(t, h.run(t, args...))
|
|
assert.NoError(t, yaml.Unmarshal(h.stdout.Bytes(), got.Interface()))
|
|
assert.Equal(t, want, got.Elem().Interface())
|
|
}
|