@@ -10,7 +10,9 @@ import (
10
10
11
11
"github.com/DATA-DOG/go-sqlmock"
12
12
"github.com/coreos/go-semver/semver"
13
+ "github.com/go-sql-driver/mysql"
13
14
"github.com/pingcap/errors"
15
+ "github.com/pingcap/failpoint"
14
16
"github.com/pingcap/tidb/br/pkg/version"
15
17
tcontext "github.com/pingcap/tidb/dumpling/context"
16
18
"github.com/pingcap/tidb/parser"
@@ -289,3 +291,64 @@ func TestSetDefaultSessionParams(t *testing.T) {
289
291
require .Equal (t , testCase .expectedParams , testCase .sessionParams )
290
292
}
291
293
}
294
+
295
+ func TestSetSessionParams (t * testing.T ) {
296
+ // case 1: fail to set tidb_snapshot, should return error with hint
297
+ db , mock , err := sqlmock .New ()
298
+ require .NoError (t , err )
299
+ defer func () {
300
+ require .NoError (t , db .Close ())
301
+ }()
302
+
303
+ mock .ExpectQuery ("SELECT @@tidb_config" ).
304
+ WillReturnError (errors .New ("mock error" ))
305
+ mock .ExpectQuery ("SELECT COUNT\\ (1\\ ) as c FROM MYSQL.TiDB WHERE VARIABLE_NAME='tikv_gc_safe_point'" ).
306
+ WillReturnError (errors .New ("mock error" ))
307
+ tikvErr := & mysql.MySQLError {
308
+ Number : 1105 ,
309
+ Message : "can not get 'tikv_gc_safe_point'" ,
310
+ }
311
+ mock .ExpectExec ("SET SESSION tidb_snapshot" ).
312
+ WillReturnError (tikvErr )
313
+
314
+ require .NoError (t , failpoint .Enable ("github.com/pingcap/tidb/dumpling/export/SkipResetDB" , "return(true)" ))
315
+ defer failpoint .Disable ("github.com/pingcap/tidb/dumpling/export/SkipResetDB=return(true)" )
316
+
317
+ tctx , cancel := tcontext .Background ().WithLogger (appLogger ).WithCancel ()
318
+ defer cancel ()
319
+
320
+ conf := DefaultConfig ()
321
+ conf .ServerInfo = version.ServerInfo {
322
+ ServerType : version .ServerTypeTiDB ,
323
+ HasTiKV : false ,
324
+ }
325
+ conf .Snapshot = "439153276059648000"
326
+ conf .Consistency = ConsistencyTypeSnapshot
327
+ d := & Dumper {
328
+ tctx : tctx ,
329
+ conf : conf ,
330
+ cancelCtx : cancel ,
331
+ dbHandle : db ,
332
+ }
333
+ err = setSessionParam (d )
334
+ require .ErrorContains (t , err , "consistency=none" )
335
+
336
+ // case 2: fail to set other
337
+ conf .ServerInfo = version.ServerInfo {
338
+ ServerType : version .ServerTypeMySQL ,
339
+ HasTiKV : false ,
340
+ }
341
+ conf .Snapshot = ""
342
+ conf .Consistency = ConsistencyTypeFlush
343
+ conf .SessionParams = map [string ]interface {}{
344
+ "mock" : "UTC" ,
345
+ }
346
+ d .dbHandle = db
347
+ mock .ExpectExec ("SET SESSION mock" ).
348
+ WillReturnError (errors .New ("Unknown system variable mock" ))
349
+ mock .ExpectClose ()
350
+ mock .ExpectClose ()
351
+
352
+ err = setSessionParam (d )
353
+ require .NoError (t , err )
354
+ }
0 commit comments