235 lines
6.0 KiB
Go
235 lines
6.0 KiB
Go
package mysql
|
|
|
|
import (
|
|
"github.com/pingcap/check"
|
|
)
|
|
|
|
type mariaDBTestSuite struct {
|
|
}
|
|
|
|
var _ = check.Suite(&mariaDBTestSuite{})
|
|
|
|
func (t *mariaDBTestSuite) SetUpSuite(c *check.C) {
|
|
|
|
}
|
|
|
|
func (t *mariaDBTestSuite) TearDownSuite(c *check.C) {
|
|
|
|
}
|
|
|
|
func (t *mariaDBTestSuite) TestParseMariaDBGTID(c *check.C) {
|
|
cases := []struct {
|
|
gtidStr string
|
|
hashError bool
|
|
}{
|
|
{"0-1-1", false},
|
|
{"", false},
|
|
{"0-1-1-1", true},
|
|
{"1", true},
|
|
{"0-1-seq", true},
|
|
}
|
|
|
|
for _, cs := range cases {
|
|
gtid, err := ParseMariadbGTID(cs.gtidStr)
|
|
if cs.hashError {
|
|
c.Assert(err, check.NotNil)
|
|
} else {
|
|
c.Assert(err, check.IsNil)
|
|
c.Assert(gtid.String(), check.Equals, cs.gtidStr)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (t *mariaDBTestSuite) TestMariaDBGTIDConatin(c *check.C) {
|
|
cases := []struct {
|
|
originGTIDStr, otherGTIDStr string
|
|
contain bool
|
|
}{
|
|
{"0-1-1", "0-1-2", false},
|
|
{"0-1-1", "", true},
|
|
{"2-1-1", "1-1-1", false},
|
|
{"1-2-1", "1-1-1", true},
|
|
{"1-2-2", "1-1-1", true},
|
|
}
|
|
|
|
for _, cs := range cases {
|
|
originGTID, err := ParseMariadbGTID(cs.originGTIDStr)
|
|
c.Assert(err, check.IsNil)
|
|
otherGTID, err := ParseMariadbGTID(cs.otherGTIDStr)
|
|
c.Assert(err, check.IsNil)
|
|
|
|
c.Assert(originGTID.Contain(otherGTID), check.Equals, cs.contain)
|
|
}
|
|
}
|
|
|
|
func (t *mariaDBTestSuite) TestMariaDBGTIDClone(c *check.C) {
|
|
gtid, err := ParseMariadbGTID("1-1-1")
|
|
c.Assert(err, check.IsNil)
|
|
|
|
clone := gtid.Clone()
|
|
c.Assert(gtid, check.DeepEquals, clone)
|
|
}
|
|
|
|
func (t *mariaDBTestSuite) TestMariaDBForward(c *check.C) {
|
|
cases := []struct {
|
|
currentGTIDStr, newerGTIDStr string
|
|
hashError bool
|
|
}{
|
|
{"0-1-1", "0-1-2", false},
|
|
{"0-1-1", "", false},
|
|
{"2-1-1", "1-1-1", true},
|
|
{"1-2-1", "1-1-1", false},
|
|
{"1-2-2", "1-1-1", false},
|
|
}
|
|
|
|
for _, cs := range cases {
|
|
currentGTID, err := ParseMariadbGTID(cs.currentGTIDStr)
|
|
c.Assert(err, check.IsNil)
|
|
newerGTID, err := ParseMariadbGTID(cs.newerGTIDStr)
|
|
c.Assert(err, check.IsNil)
|
|
|
|
err = currentGTID.forward(newerGTID)
|
|
if cs.hashError {
|
|
c.Assert(err, check.NotNil)
|
|
c.Assert(currentGTID.String(), check.Equals, cs.currentGTIDStr)
|
|
} else {
|
|
c.Assert(err, check.IsNil)
|
|
c.Assert(currentGTID.String(), check.Equals, cs.newerGTIDStr)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (t *mariaDBTestSuite) TestParseMariaDBGTIDSet(c *check.C) {
|
|
cases := []struct {
|
|
gtidStr string
|
|
subGTIDs map[uint32]string //domain ID => gtid string
|
|
expectedStr []string // test String()
|
|
hasError bool
|
|
}{
|
|
{"0-1-1", map[uint32]string{0: "0-1-1"}, []string{"0-1-1"}, false},
|
|
{"", nil, []string{""}, false},
|
|
{"0-1-1,1-2-3", map[uint32]string{0: "0-1-1", 1: "1-2-3"}, []string{"0-1-1,1-2-3", "1-2-3,0-1-1"}, false},
|
|
{"0-1--1", nil, nil, true},
|
|
}
|
|
|
|
for _, cs := range cases {
|
|
gtidSet, err := ParseMariadbGTIDSet(cs.gtidStr)
|
|
if cs.hasError {
|
|
c.Assert(err, check.NotNil)
|
|
} else {
|
|
c.Assert(err, check.IsNil)
|
|
mariadbGTIDSet, ok := gtidSet.(*MariadbGTIDSet)
|
|
c.Assert(ok, check.IsTrue)
|
|
|
|
// check sub gtid
|
|
c.Assert(mariadbGTIDSet.Sets, check.HasLen, len(cs.subGTIDs))
|
|
for domainID, gtid := range mariadbGTIDSet.Sets {
|
|
c.Assert(mariadbGTIDSet.Sets, check.HasKey, domainID)
|
|
c.Assert(gtid.String(), check.Equals, cs.subGTIDs[domainID])
|
|
}
|
|
|
|
// check String() function
|
|
inExpectedResult := false
|
|
actualStr := mariadbGTIDSet.String()
|
|
for _, str := range cs.expectedStr {
|
|
if str == actualStr {
|
|
inExpectedResult = true
|
|
break
|
|
}
|
|
}
|
|
c.Assert(inExpectedResult, check.IsTrue)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (t *mariaDBTestSuite) TestMariaDBGTIDSetUpdate(c *check.C) {
|
|
cases := []struct {
|
|
isNilGTID bool
|
|
gtidStr string
|
|
subGTIDs map[uint32]string
|
|
}{
|
|
{true, "", map[uint32]string{1: "1-1-1", 2: "2-2-2"}},
|
|
{false, "1-2-2", map[uint32]string{1: "1-2-2", 2: "2-2-2"}},
|
|
{false, "1-2-1", map[uint32]string{1: "1-2-1", 2: "2-2-2"}},
|
|
{false, "3-2-1", map[uint32]string{1: "1-1-1", 2: "2-2-2", 3: "3-2-1"}},
|
|
}
|
|
|
|
for _, cs := range cases {
|
|
gtidSet, err := ParseMariadbGTIDSet("1-1-1,2-2-2")
|
|
c.Assert(err, check.IsNil)
|
|
mariadbGTIDSet, ok := gtidSet.(*MariadbGTIDSet)
|
|
c.Assert(ok, check.IsTrue)
|
|
|
|
if cs.isNilGTID {
|
|
c.Assert(mariadbGTIDSet.AddSet(nil), check.IsNil)
|
|
} else {
|
|
err := gtidSet.Update(cs.gtidStr)
|
|
c.Assert(err, check.IsNil)
|
|
}
|
|
// check sub gtid
|
|
c.Assert(mariadbGTIDSet.Sets, check.HasLen, len(cs.subGTIDs))
|
|
for domainID, gtid := range mariadbGTIDSet.Sets {
|
|
c.Assert(mariadbGTIDSet.Sets, check.HasKey, domainID)
|
|
c.Assert(gtid.String(), check.Equals, cs.subGTIDs[domainID])
|
|
}
|
|
}
|
|
}
|
|
|
|
func (t *mariaDBTestSuite) TestMariaDBGTIDSetEqual(c *check.C) {
|
|
cases := []struct {
|
|
originGTIDStr, otherGTIDStr string
|
|
equals bool
|
|
}{
|
|
{"", "", true},
|
|
{"1-1-1", "1-1-1,2-2-2", false},
|
|
{"1-1-1,2-2-2", "1-1-1", false},
|
|
{"1-1-1,2-2-2", "1-1-1,2-2-2", true},
|
|
{"1-1-1,2-2-2", "1-1-1,2-2-3", false},
|
|
}
|
|
|
|
for _, cs := range cases {
|
|
originGTID, err := ParseMariadbGTIDSet(cs.originGTIDStr)
|
|
c.Assert(err, check.IsNil)
|
|
|
|
otherGTID, err := ParseMariadbGTIDSet(cs.otherGTIDStr)
|
|
c.Assert(err, check.IsNil)
|
|
|
|
c.Assert(originGTID.Equal(otherGTID), check.Equals, cs.equals)
|
|
}
|
|
}
|
|
|
|
func (t *mariaDBTestSuite) TestMariaDBGTIDSetContain(c *check.C) {
|
|
cases := []struct {
|
|
originGTIDStr, otherGTIDStr string
|
|
contain bool
|
|
}{
|
|
{"", "", true},
|
|
{"1-1-1", "1-1-1,2-2-2", false},
|
|
{"1-1-1,2-2-2", "1-1-1", true},
|
|
{"1-1-1,2-2-2", "1-1-1,2-2-2", true},
|
|
{"1-1-1,2-2-2", "1-1-1,2-2-1", true},
|
|
{"1-1-1,2-2-2", "1-1-1,2-2-3", false},
|
|
}
|
|
|
|
for _, cs := range cases {
|
|
originGTIDSet, err := ParseMariadbGTIDSet(cs.originGTIDStr)
|
|
c.Assert(err, check.IsNil)
|
|
|
|
otherGTIDSet, err := ParseMariadbGTIDSet(cs.otherGTIDStr)
|
|
c.Assert(err, check.IsNil)
|
|
|
|
c.Assert(originGTIDSet.Contain(otherGTIDSet), check.Equals, cs.contain)
|
|
}
|
|
}
|
|
|
|
func (t *mariaDBTestSuite) TestMariaDBGTIDSetClone(c *check.C) {
|
|
cases := []string{"", "1-1-1", "1-1-1,2-2-2"}
|
|
|
|
for _, str := range cases {
|
|
gtidSet, err := ParseMariadbGTIDSet(str)
|
|
c.Assert(err, check.IsNil)
|
|
|
|
c.Assert(gtidSet.Clone(), check.DeepEquals, gtidSet)
|
|
}
|
|
}
|