mirror of
https://github.com/empayre/fleet.git
synced 2024-11-07 09:18:59 +00:00
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package ctxerr
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/fleetdm/fleet/v4/server/datastore/redis/redistest"
|
|
"github.com/fleetdm/fleet/v4/server/errorstore"
|
|
kitlog "github.com/go-kit/kit/log"
|
|
pkgerrors "github.com/pkg/errors"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestCause(t *testing.T) {
|
|
ctx := context.Background()
|
|
eh := errorstore.NewHandler(ctx, redistest.NopRedis(), kitlog.NewNopLogger(), time.Minute)
|
|
ctx = NewContext(ctx, eh)
|
|
|
|
errNew := errors.New("new")
|
|
fmtWrap := fmt.Errorf("fmt: %w", errNew)
|
|
pkgWrap := pkgerrors.Wrap(errNew, "pkg")
|
|
pkgFmtWrap := pkgerrors.Wrap(fmtWrap, "pkg")
|
|
fmtPkgWrap := fmt.Errorf("fmt: %w", pkgWrap)
|
|
ctxNew := New(ctx, "ctxerr") // this returns an eris error that wraps a standard error
|
|
ctxNewRoot := errors.Unwrap(ctxNew) // this gets the standard error wrapped in ctxNew
|
|
ctxWrap := Wrap(ctx, ctxNew, "wrap")
|
|
ctxDoubleWrap := Wrap(ctx, ctxWrap, "re-wrap")
|
|
pkgFmtCtxWrap := pkgerrors.Wrap(fmt.Errorf("fmt: %w", ctxWrap), "pkg")
|
|
fmtPkgCtxWrap := fmt.Errorf("fmt: %w", pkgerrors.Wrap(ctxWrap, "pkg"))
|
|
|
|
cases := []struct {
|
|
in, out error
|
|
}{
|
|
{nil, nil},
|
|
{io.EOF, io.EOF},
|
|
{errNew, errNew},
|
|
{fmtWrap, errNew},
|
|
{pkgWrap, errNew},
|
|
{pkgFmtWrap, errNew},
|
|
{fmtPkgWrap, errNew},
|
|
{ctxNew, ctxNewRoot},
|
|
{ctxWrap, ctxNewRoot},
|
|
{ctxDoubleWrap, ctxNewRoot},
|
|
{pkgFmtCtxWrap, ctxNewRoot},
|
|
{fmtPkgCtxWrap, ctxNewRoot},
|
|
}
|
|
for _, c := range cases {
|
|
t.Run(fmt.Sprintf("%T: %[1]v", c.in), func(t *testing.T) {
|
|
got := Cause(c.in)
|
|
require.Equal(t, c.out, got)
|
|
})
|
|
}
|
|
}
|