package util

import (
	"testing"

	"github.com/pingcap/wormhole/pkg/whpb"

	"github.com/juju/errors"
	. "github.com/pingcap/check"
)

func Test(t *testing.T) { TestingT(t) }

type utilSuite struct{}

var _ = Suite(&utilSuite{})

func (*utilSuite) TestOriginError(c *C) {
	c.Assert(OriginError(nil), IsNil)

	err1 := errors.New("err1")
	c.Assert(OriginError(err1), DeepEquals, err1)

	err2 := errors.Trace(err1)
	c.Assert(OriginError(err2), DeepEquals, err1)

	err3 := errors.Trace(err2)
	c.Assert(OriginError(err3), DeepEquals, err1)
}

func (*utilSuite) TestCompareBinlogPosition(c *C) {
	cases := []struct {
		a      *whpb.Position
		b      *whpb.Position
		expect int
	}{
		{
			a:      &whpb.Position{MysqlBinlogFile: "aaa-0001", MysqlBinlogPos: 190},
			b:      &whpb.Position{MysqlBinlogFile: "aaa-0002", MysqlBinlogPos: 190},
			expect: -1,
		}, {
			a:      &whpb.Position{MysqlBinlogFile: "aaa-0002", MysqlBinlogPos: 190},
			b:      &whpb.Position{MysqlBinlogFile: "aaa-0001", MysqlBinlogPos: 190},
			expect: 1,
		}, {
			a:      &whpb.Position{MysqlBinlogFile: "aaa-0001", MysqlBinlogPos: 190},
			b:      &whpb.Position{MysqlBinlogFile: "aaa-0001", MysqlBinlogPos: 190},
			expect: 0,
		}, {
			a:      &whpb.Position{MysqlBinlogFile: "aaa-0001", MysqlBinlogPos: 190},
			b:      &whpb.Position{MysqlBinlogFile: "aaa-0001", MysqlBinlogPos: 4},
			expect: 1,
		}, {
			a:      &whpb.Position{MysqlBinlogFile: "aaa-0001", MysqlBinlogPos: 4},
			b:      &whpb.Position{MysqlBinlogFile: "aaa-0001", MysqlBinlogPos: 190},
			expect: -1,
		},
	}
	for _, tt := range cases {
		c.Assert(CompareBinlogPosition(tt.a, tt.b), Equals, tt.expect)
	}
}
