@@ -352,3 +352,76 @@ fn load_dump_with_attach_rejected() {
352
352
353
353
sim. run ( ) . unwrap ( ) ;
354
354
}
355
+
356
+ #[ test]
357
+ fn load_dump_with_invalid_sql ( ) {
358
+ const DUMP : & str = r#"
359
+ PRAGMA foreign_keys=OFF;
360
+ BEGIN TRANSACTION;
361
+ CREATE TABLE test (x);
362
+ INSERT INTO test VALUES(42);
363
+ SELECT abs(-9223372036854775808)
364
+ COMMIT;"# ;
365
+
366
+ let mut sim = Builder :: new ( )
367
+ . simulation_duration ( Duration :: from_secs ( 1000 ) )
368
+ . build ( ) ;
369
+ let tmp = tempdir ( ) . unwrap ( ) ;
370
+ let tmp_path = tmp. path ( ) . to_path_buf ( ) ;
371
+
372
+ std:: fs:: write ( tmp_path. join ( "dump.sql" ) , DUMP ) . unwrap ( ) ;
373
+
374
+ make_primary ( & mut sim, tmp. path ( ) . to_path_buf ( ) ) ;
375
+
376
+ sim. client ( "client" , async move {
377
+ let client = Client :: new ( ) ;
378
+
379
+ // path is not absolute is an error
380
+ let resp = client
381
+ . post (
382
+ "http://primary:9090/v1/namespaces/foo/create" ,
383
+ json ! ( { "dump_url" : "file:dump.sql" } ) ,
384
+ )
385
+ . await
386
+ . unwrap ( ) ;
387
+ assert_eq ! ( resp. status( ) , StatusCode :: BAD_REQUEST ) ;
388
+
389
+ // path doesn't exist is an error
390
+ let resp = client
391
+ . post (
392
+ "http://primary:9090/v1/namespaces/foo/create" ,
393
+ json ! ( { "dump_url" : "file:/dump.sql" } ) ,
394
+ )
395
+ . await
396
+ . unwrap ( ) ;
397
+ assert_eq ! ( resp. status( ) , StatusCode :: BAD_REQUEST ) ;
398
+
399
+ let resp = client
400
+ . post (
401
+ "http://primary:9090/v1/namespaces/foo/create" ,
402
+ json ! ( { "dump_url" : format!( "file:{}" , tmp_path. join( "dump.sql" ) . display( ) ) } ) ,
403
+ )
404
+ . await
405
+ . unwrap ( ) ;
406
+ assert_eq ! (
407
+ resp. status( ) ,
408
+ StatusCode :: BAD_REQUEST ,
409
+ "{}" ,
410
+ resp. json:: <serde_json:: Value >( ) . await . unwrap_or_default( )
411
+ ) ;
412
+
413
+ assert_snapshot ! ( resp. body_string( ) . await ?) ;
414
+
415
+ let foo =
416
+ Database :: open_remote_with_connector ( "http://foo.primary:8080" , "" , TurmoilConnector ) ?;
417
+ let foo_conn = foo. connect ( ) ?;
418
+
419
+ let res = foo_conn. query ( "select count(*) from test" , ( ) ) . await ;
420
+ // This should error since the dump should have failed!
421
+ assert ! ( res. is_err( ) ) ;
422
+
423
+ Ok ( ( ) )
424
+ } ) ;
425
+
426
+ sim. run ( ) . unwrap ( ) ;
427
+ }
0 commit comments