1
1
package dump
2
2
3
3
import (
4
- "bytes"
5
- "flag"
6
- "fmt"
7
- "io/ioutil"
8
- "os"
9
4
"strings"
10
- "testing"
11
5
12
6
. "github.com/pingcap/check"
13
- "github.com/siddontang/go-mysql/client"
14
7
"github.com/siddontang/go-mysql/mysql"
15
8
)
16
9
17
- // use docker mysql for test
18
- var host = flag .String ("host" , "127.0.0.1" , "MySQL host" )
19
- var port = flag .Int ("port" , 3306 , "MySQL host" )
20
-
21
- var execution = flag .String ("exec" , "mysqldump" , "mysqldump execution path" )
22
-
23
- func Test (t * testing.T ) {
24
- TestingT (t )
25
- }
26
-
27
- type schemaTestSuite struct {
28
- conn * client.Conn
29
- d * Dumper
30
- }
31
-
32
- var _ = Suite (& schemaTestSuite {})
33
-
34
- func (s * schemaTestSuite ) SetUpSuite (c * C ) {
35
- var err error
36
- s .conn , err = client .Connect (fmt .Sprintf ("%s:%d" , * host , * port ), "root" , "" , "" )
37
- c .Assert (err , IsNil )
38
-
39
- s .d , err = NewDumper (* execution , fmt .Sprintf ("%s:%d" , * host , * port ), "root" , "" )
40
- c .Assert (err , IsNil )
41
- c .Assert (s .d , NotNil )
42
-
43
- s .d .SetCharset ("utf8" )
44
- s .d .SetErrOut (os .Stderr )
45
-
46
- _ , err = s .conn .Execute ("CREATE DATABASE IF NOT EXISTS test1" )
47
- c .Assert (err , IsNil )
48
-
49
- _ , err = s .conn .Execute ("CREATE DATABASE IF NOT EXISTS test2" )
50
- c .Assert (err , IsNil )
51
-
52
- str := `CREATE TABLE IF NOT EXISTS test%d.t%d (
53
- id int AUTO_INCREMENT,
54
- name varchar(256),
55
- PRIMARY KEY(id)
56
- ) ENGINE=INNODB`
57
- _ , err = s .conn .Execute (fmt .Sprintf (str , 1 , 1 ))
58
- c .Assert (err , IsNil )
59
-
60
- _ , err = s .conn .Execute (fmt .Sprintf (str , 2 , 1 ))
61
- c .Assert (err , IsNil )
62
-
63
- _ , err = s .conn .Execute (fmt .Sprintf (str , 1 , 2 ))
64
- c .Assert (err , IsNil )
65
-
66
- _ , err = s .conn .Execute (fmt .Sprintf (str , 2 , 2 ))
67
- c .Assert (err , IsNil )
68
-
69
- str = `INSERT INTO test%d.t%d (name) VALUES ("a"), ("b"), ("\\"), ("''")`
70
-
71
- _ , err = s .conn .Execute (fmt .Sprintf (str , 1 , 1 ))
72
- c .Assert (err , IsNil )
73
-
74
- _ , err = s .conn .Execute (fmt .Sprintf (str , 2 , 1 ))
75
- c .Assert (err , IsNil )
76
-
77
- _ , err = s .conn .Execute (fmt .Sprintf (str , 1 , 2 ))
78
- c .Assert (err , IsNil )
79
-
80
- _ , err = s .conn .Execute (fmt .Sprintf (str , 2 , 2 ))
81
- c .Assert (err , IsNil )
82
- }
83
-
84
- func (s * schemaTestSuite ) TearDownSuite (c * C ) {
85
- if s .conn != nil {
86
- _ , err := s .conn .Execute ("DROP DATABASE IF EXISTS test1" )
87
- c .Assert (err , IsNil )
88
-
89
- _ , err = s .conn .Execute ("DROP DATABASE IF EXISTS test2" )
90
- c .Assert (err , IsNil )
91
-
92
- s .conn .Close ()
93
- }
94
- }
95
-
96
- func (s * schemaTestSuite ) TestDump (c * C ) {
97
- // Using mysql 5.7 can't work, error:
98
- // mysqldump: Error 1412: Table definition has changed,
99
- // please retry transaction when dumping table `test_replication` at row: 0
100
- // err := s.d.Dump(ioutil.Discard)
101
- // c.Assert(err, IsNil)
102
-
103
- s .d .AddDatabases ("test1" , "test2" )
104
-
105
- s .d .AddIgnoreTables ("test1" , "t2" )
106
-
107
- err := s .d .Dump (ioutil .Discard )
108
- c .Assert (err , IsNil )
109
-
110
- s .d .AddTables ("test1" , "t1" )
111
-
112
- err = s .d .Dump (ioutil .Discard )
113
- c .Assert (err , IsNil )
114
- }
115
-
116
- type testParseHandler struct {
117
- gset mysql.GTIDSet
118
- }
119
-
120
- func (h * testParseHandler ) BinLog (name string , pos uint64 ) error {
121
- return nil
122
- }
123
-
124
- func (h * testParseHandler ) GtidSet (gtidsets string ) (err error ) {
125
- if h .gset != nil {
126
- err = h .gset .Update (gtidsets )
127
- } else {
128
- h .gset , err = mysql .ParseGTIDSet ("mysql" , gtidsets )
129
- }
130
- return err
131
- }
132
-
133
- func (h * testParseHandler ) Data (schema string , table string , values []string ) error {
134
- return nil
135
- }
136
-
137
- type GtidParseTest struct {
138
- gset mysql.GTIDSet
10
+ type parserTestSuite struct {
139
11
}
140
12
141
- func (h * GtidParseTest ) UpdateGtidSet (gtidStr string ) (err error ) {
142
- if h .gset != nil {
143
- err = h .gset .Update (gtidStr )
144
- } else {
145
- h .gset , err = mysql .ParseGTIDSet ("mysql" , gtidStr )
146
- }
147
- return err
148
- }
13
+ var _ = Suite (& parserTestSuite {})
149
14
150
15
func (s * parserTestSuite ) TestParseGtidExp (c * C ) {
151
16
// binlogExp := regexp.MustCompile("^CHANGE MASTER TO MASTER_LOG_FILE='(.+)', MASTER_LOG_POS=(\\d+);")
@@ -217,11 +82,6 @@ func (s *parserTestSuite) TestParseFindTable(c *C) {
217
82
}
218
83
}
219
84
220
- type parserTestSuite struct {
221
- }
222
-
223
- var _ = Suite (& parserTestSuite {})
224
-
225
85
func (s * parserTestSuite ) TestUnescape (c * C ) {
226
86
tbl := []struct {
227
87
escaped string
@@ -247,20 +107,6 @@ func (s *parserTestSuite) TestUnescape(c *C) {
247
107
}
248
108
}
249
109
250
- func (s * schemaTestSuite ) TestParse (c * C ) {
251
- var buf bytes.Buffer
252
-
253
- s .d .Reset ()
254
-
255
- s .d .AddDatabases ("test1" , "test2" )
256
-
257
- err := s .d .Dump (& buf )
258
- c .Assert (err , IsNil )
259
-
260
- err = Parse (& buf , new (testParseHandler ), true )
261
- c .Assert (err , IsNil )
262
- }
263
-
264
110
func (s * parserTestSuite ) TestParseValue (c * C ) {
265
111
str := `'abc\\',''`
266
112
values , err := parseValues (str )
0 commit comments