@@ -76,3 +76,35 @@ func (t *testSyncerSuite) TestParseEvent(c *C) {
76
76
c .Assert (err2 , IsNil )
77
77
}
78
78
}
79
+
80
+ func (t * testSyncerSuite ) TestRowsEventDecodeFunc (c * C ) {
81
+ testCases := []struct {
82
+ byteData []byte
83
+ eventSize uint32
84
+ eventType EventType
85
+ }{
86
+ // FORMAT_DESCRIPTION_EVENT
87
+ {[]byte {0x64 , 0x61 , 0x72 , 0x63 , 0xf , 0xb , 0x0 , 0x0 , 0x0 , 0x77 , 0x0 , 0x0 , 0x0 , 0x7b , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x4 , 0x0 , 0x35 , 0x2e , 0x37 , 0x2e , 0x32 , 0x32 , 0x2d , 0x6c , 0x6f , 0x67 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x64 , 0x61 , 0x72 , 0x63 , 0x13 , 0x38 , 0xd , 0x0 , 0x8 , 0x0 , 0x12 , 0x0 , 0x4 , 0x4 , 0x4 , 0x4 , 0x12 , 0x0 , 0x0 , 0x5f , 0x0 , 0x4 , 0x1a , 0x8 , 0x0 , 0x0 , 0x0 , 0x8 , 0x8 , 0x8 , 0x2 , 0x0 , 0x0 , 0x0 , 0xa , 0xa , 0xa , 0x2a , 0x2a , 0x0 , 0x12 , 0x34 , 0x0 , 0x1 , 0xb8 , 0x78 , 0x9d , 0xfe }, uint32 (119 ), FORMAT_DESCRIPTION_EVENT },
88
+ // TABLE MAP EVENT tb(INT)
89
+ {[]byte {0x8d , 0x61 , 0x72 , 0x63 , 0x13 , 0xb , 0x0 , 0x0 , 0x0 , 0x2c , 0x0 , 0x0 , 0x0 , 0xa7 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x6c , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x2 , 0x64 , 0x62 , 0x0 , 0x3 , 0x74 , 0x62 , 0x6c , 0x0 , 0x1 , 0x3 , 0x0 , 0x0 , 0x63 , 0x17 , 0xe6 , 0xf0 }, uint32 (44 ), TABLE_MAP_EVENT },
90
+ // rows INT(1)
91
+ {[]byte {0xb6 , 0x61 , 0x72 , 0x63 , 0x1e , 0xb , 0x0 , 0x0 , 0x0 , 0x28 , 0x0 , 0x0 , 0x0 , 0xcf , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x6c , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x2 , 0x0 , 0x1 , 0xff , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xf9 , 0xf7 , 0x89 , 0x2a }, uint32 (40 ), WRITE_ROWS_EVENTv2 },
92
+ // TABLE MAP EVENT tb(TINY)
93
+ {[]byte {0x22 , 0x6c , 0x72 , 0x63 , 0x13 , 0xb , 0x0 , 0x0 , 0x0 , 0x2e , 0x0 , 0x0 , 0x0 , 0xfd , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x76 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x3 , 0x64 , 0x62 , 0x31 , 0x0 , 0x4 , 0x74 , 0x62 , 0x6c , 0x31 , 0x0 , 0x1 , 0x1 , 0x0 , 0x0 , 0x32 , 0xec , 0x2f , 0x4 }, uint32 (46 ), TABLE_MAP_EVENT },
94
+ // rows LONG(1)
95
+ // panic if not set rows event decode func
96
+ {[]byte {0xeb , 0x64 , 0x72 , 0x63 , 0x1e , 0xb , 0x0 , 0x0 , 0x0 , 0x2d , 0x0 , 0x0 , 0x0 , 0x2a , 0x1 , 0x0 , 0x0 , 0x1 , 0x0 , 0x76 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x2 , 0x0 , 0x1 , 0xff , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x6e , 0xef , 0xb2 , 0xb1 }, uint32 (45 ), WRITE_ROWS_EVENTv2 },
97
+ }
98
+
99
+ parser := NewBinlogParser ()
100
+ parser .SetRowsEventDecodeFunc (func (re * RowsEvent , bs []byte ) error {
101
+ _ , err := re .DecodeHeader (bs )
102
+ return err
103
+ })
104
+ for _ , tc := range testCases {
105
+ e , err := parser .Parse (tc .byteData )
106
+ c .Assert (err , IsNil )
107
+ c .Assert (e .Header .EventType , Equals , tc .eventType )
108
+ c .Assert (e .Header .EventSize , Equals , tc .eventSize )
109
+ }
110
+ }
0 commit comments