@@ -2,6 +2,7 @@ package mysqldump
22
33import (
44 "bytes"
5+ "io/ioutil"
56 "strings"
67 "testing"
78
@@ -56,11 +57,12 @@ UNLOCK TABLES;
5657
5758`
5859
59- func RunDump (t testing.TB ) string {
60+ func RunDump (t testing.TB , data * Data ) {
6061 db , mock , err := sqlmock .New ()
6162 assert .NoError (t , err , "an error was not expected when opening a stub database connection" )
6263 defer db .Close ()
6364
65+ data .Connection = db
6466 showTablesRows := sqlmock .NewRows ([]string {"Tables_in_Testdb" }).
6567 AddRow ("Test_Table" )
6668
@@ -74,27 +76,72 @@ func RunDump(t testing.TB) string {
7476 AddRow (1 , nil , "Test Name 1" ).
7577 AddRow (
2 ,
"[email protected] " ,
"Test Name 2" )
7678
77- mock .ExpectQuery (" ^SELECT version()" ).WillReturnRows (serverVersionRows )
79+ mock .ExpectQuery (` ^SELECT version\(\)$` ).WillReturnRows (serverVersionRows )
7880 mock .ExpectQuery ("^SHOW TABLES$" ).WillReturnRows (showTablesRows )
81+ mock .ExpectExec ("^LOCK TABLES `Test_Table` READ /\\ *!32311 LOCAL \\ */$" ).WillReturnResult (sqlmock .NewResult (1 , 1 ))
7982 mock .ExpectQuery ("^SHOW CREATE TABLE `Test_Table`$" ).WillReturnRows (createTableRows )
8083 mock .ExpectQuery ("^SELECT (.+) FROM `Test_Table`$" ).WillReturnRows (createTableValueRows )
8184
85+ assert .NoError (t , data .Dump (), "an error was not expected when dumping a stub database connection" )
86+ }
87+
88+ func TestDumpOk (t * testing.T ) {
8289 var buf bytes.Buffer
83- assert .NoError (t , Dump (db , & buf ), "an error was not expected when dumping a stub database connection" )
8490
85- return buf .String ()
91+ RunDump (t , & Data {
92+ Out : & buf ,
93+ LockTables : true ,
94+ })
95+
96+ result := strings .Replace (strings .Split (buf .String (), "-- Dump completed" )[0 ], "`" , "~" , - 1 )
97+
98+ assert .Equal (t , expected , result )
8699}
87100
88- func TestDumpOk (t * testing.T ) {
89- out := RunDump ( t )
101+ func TestNoLockOk (t * testing.T ) {
102+ var buf bytes. Buffer
90103
91- result := strings .Replace (strings .Split (out , "-- Dump completed" )[0 ], "`" , "~" , - 1 )
104+ data := & Data {
105+ Out : & buf ,
106+ LockTables : false ,
107+ }
108+
109+ db , mock , err := sqlmock .New ()
110+ assert .NoError (t , err , "an error was not expected when opening a stub database connection" )
111+ defer db .Close ()
112+
113+ data .Connection = db
114+ showTablesRows := sqlmock .NewRows ([]string {"Tables_in_Testdb" }).
115+ AddRow ("Test_Table" )
116+
117+ serverVersionRows := sqlmock .NewRows ([]string {"Version()" }).
118+ AddRow ("test_version" )
119+
120+ createTableRows := sqlmock .NewRows ([]string {"Table" , "Create Table" }).
121+ AddRow ("Test_Table" , "CREATE TABLE 'Test_Table' (`id` int(11) NOT NULL AUTO_INCREMENT,`email` char(60) DEFAULT NULL, `name` char(60), PRIMARY KEY (`id`))ENGINE=InnoDB DEFAULT CHARSET=latin1" )
122+
123+ createTableValueRows := sqlmock .NewRows ([]string {"id" , "email" , "name" }).
124+ AddRow (1 , nil , "Test Name 1" ).
125+ AddRow (
2 ,
"[email protected] " ,
"Test Name 2" )
126+
127+ mock .ExpectQuery (`^SELECT version\(\)$` ).WillReturnRows (serverVersionRows )
128+ mock .ExpectQuery ("^SHOW TABLES$" ).WillReturnRows (showTablesRows )
129+ mock .ExpectQuery ("^SHOW CREATE TABLE `Test_Table`$" ).WillReturnRows (createTableRows )
130+ mock .ExpectQuery ("^SELECT (.+) FROM `Test_Table`$" ).WillReturnRows (createTableValueRows )
131+
132+ assert .NoError (t , data .Dump (), "an error was not expected when dumping a stub database connection" )
133+
134+ result := strings .Replace (strings .Split (buf .String (), "-- Dump completed" )[0 ], "`" , "~" , - 1 )
92135
93136 assert .Equal (t , expected , result )
94137}
95138
96139func BenchmarkDump (b * testing.B ) {
140+ data := & Data {
141+ Out : ioutil .Discard ,
142+ LockTables : true ,
143+ }
97144 for i := 0 ; i < b .N ; i ++ {
98- _ = RunDump (b )
145+ RunDump (b , data )
99146 }
100147}
0 commit comments