Files
acp/report_test.go
T

52 lines
1.2 KiB
Go

package acp
import (
"errors"
"syscall"
"testing"
"github.com/davecgh/go-spew/spew"
"github.com/modern-go/reflect2"
"github.com/sirupsen/logrus"
)
func TestErrorJSONMarshal(t *testing.T) {
m := map[string]error{}
m["test"] = syscall.EROFS
var innerNilErr *Error
m["test-nil"] = innerNilErr
var err error
logrus.Infof("get error type %s", spew.Sdump(reflect2.TypeOfPtr(&err).Elem()))
buf, _ := reportJSON.Marshal(m)
logrus.Infof("get json %s", buf)
}
func TestReportJSONErrorRoundTrip(t *testing.T) {
const message = "copy 100% failed"
want := &Report{
Jobs: []*Job{{
FailTargets: map[string]error{"dst": errors.New(message)},
}},
Errors: []*Error{{Src: "src", Dst: "dst", Err: errors.New(message)}},
}
buf, err := reportJSON.Marshal(want)
if err != nil {
t.Fatalf("marshal report: %v", err)
}
var got Report
if err := reportJSON.Unmarshal(buf, &got); err != nil {
t.Fatalf("unmarshal report: %v", err)
}
if len(got.Errors) != 1 || got.Errors[0].Err.Error() != message {
t.Fatalf("report errors = %+v", got.Errors)
}
if len(got.Jobs) != 1 || got.Jobs[0].FailTargets["dst"].Error() != message {
t.Fatalf("fail targets = %+v", got.Jobs)
}
}