github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/pkg/binlog/event/helper_test.go (about) 1 // Copyright 2019 PingCAP, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package event 15 16 import ( 17 "testing" 18 "time" 19 20 gmysql "github.com/go-mysql-org/go-mysql/mysql" 21 "github.com/go-mysql-org/go-mysql/replication" 22 "github.com/pingcap/tiflow/dm/pkg/gtid" 23 "github.com/pingcap/tiflow/dm/pkg/terror" 24 "github.com/stretchr/testify/require" 25 ) 26 27 func TestGTIDsFromPreviousGTIDsEvent(t *testing.T) { 28 t.Parallel() 29 var ( 30 header = &replication.EventHeader{ 31 Timestamp: uint32(time.Now().Unix()), 32 ServerID: 11, 33 } 34 latestPos uint32 = 4 35 ) 36 37 // invalid binlog type, QueryEvent 38 queryEv, err := GenQueryEvent(header, latestPos, 0, 0, 0, nil, []byte("schema"), []byte("BEGIN")) 39 require.Nil(t, err) 40 gSet, err := GTIDsFromPreviousGTIDsEvent(queryEv) 41 require.True(t, terror.ErrBinlogPrevGTIDEvNotValid.Equal(err)) 42 require.Nil(t, gSet) 43 44 // valid MySQL GTIDs 45 gtidStr := "3ccc475b-2343-11e7-be21-6c0b84d59f30:1-14,406a3f61-690d-11e7-87c5-6c92bf46f384:1-94321383" 46 gSetExpect, err := gtid.ParserGTID(gmysql.MySQLFlavor, gtidStr) 47 require.Nil(t, err) 48 previousGTIDEv, err := GenPreviousGTIDsEvent(header, latestPos, gSetExpect) 49 require.Nil(t, err) 50 gSet, err = GTIDsFromPreviousGTIDsEvent(previousGTIDEv) 51 require.Nil(t, err) 52 require.Equal(t, gSetExpect, gSet) 53 } 54 55 func TestGTIDsFromMariaDBGTIDListEvent(t *testing.T) { 56 t.Parallel() 57 var ( 58 header = &replication.EventHeader{ 59 Timestamp: uint32(time.Now().Unix()), 60 ServerID: 11, 61 } 62 latestPos uint32 = 4 63 ) 64 65 // invalid binlog type, QueryEvent 66 queryEv, err := GenQueryEvent(header, latestPos, 0, 0, 0, nil, []byte("schema"), []byte("BEGIN")) 67 require.Nil(t, err) 68 gSet, err := GTIDsFromMariaDBGTIDListEvent(queryEv) 69 require.Regexp(t, ".*should be a MariadbGTIDListEvent.*", err) 70 require.Nil(t, gSet) 71 72 // valid MariaDB GTIDs 73 gtidStr := "1-1-1,2-2-2" 74 gSetExpect, err := gtid.ParserGTID(gmysql.MariaDBFlavor, gtidStr) 75 require.Nil(t, err) 76 mariaGTIDListEv, err := GenMariaDBGTIDListEvent(header, latestPos, gSetExpect) 77 require.Nil(t, err) 78 gSet, err = GTIDsFromMariaDBGTIDListEvent(mariaGTIDListEv) 79 require.Nil(t, err) 80 require.Equal(t, gSetExpect, gSet) 81 }