|
20 | 20 |
|
21 | 21 | my$node = PostgreSQL::Test::Cluster->new('main'); |
22 | 22 |
|
| 23 | +# For nearly all pg_basebackup invocations some options should be specified, |
| 24 | +# to keep test times reasonable. Using @pg_basebackup_defs as the first |
| 25 | +# element of the array passed to to IPC::Run interpolate the array (as it is |
| 26 | +# not a reference to an array)... |
| 27 | +my@pg_basebackup_defs = ('pg_basebackup','--no-sync','-cfast'); |
| 28 | + |
| 29 | + |
23 | 30 | # Set umask so test directories and files are created with default permissions |
24 | 31 | umask(0077); |
25 | 32 |
|
|
43 | 50 | system_or_bail'pg_ctl','-D',$pgdata,'reload'; |
44 | 51 |
|
45 | 52 | $node->command_fails( |
46 | | -['pg_basebackup','-D',"$tempdir/backup" ], |
| 53 | +[@pg_basebackup_defs,'-D',"$tempdir/backup" ], |
47 | 54 | 'pg_basebackup fails because of WAL configuration'); |
48 | 55 |
|
49 | 56 | ok(!-d"$tempdir/backup",'backup directory was cleaned up'); |
|
54 | 61 | or BAIL_OUT("unable to create$tempdir/backup"); |
55 | 62 | append_to_file("$tempdir/backup/dir-not-empty.txt","Some data"); |
56 | 63 |
|
57 | | -$node->command_fails(['pg_basebackup','-D',"$tempdir/backup",'-n' ], |
| 64 | +$node->command_fails([@pg_basebackup_defs,'-D',"$tempdir/backup",'-n' ], |
58 | 65 | 'failing run with no-clean option'); |
59 | 66 |
|
60 | 67 | ok(-d"$tempdir/backup",'backup directory was created and left behind'); |
|
105 | 112 | } |
106 | 113 |
|
107 | 114 | # Run base backup. |
108 | | -$node->command_ok(['pg_basebackup','-D',"$tempdir/backup",'-X','none' ], |
| 115 | +$node->command_ok([@pg_basebackup_defs,'-D',"$tempdir/backup",'-X','none' ], |
109 | 116 | 'pg_basebackup runs'); |
110 | 117 | ok(-f"$tempdir/backup/PG_VERSION",'backup was created'); |
111 | 118 | ok(-f"$tempdir/backup/backup_manifest",'backup manifest included'); |
|
165 | 172 |
|
166 | 173 | $node->command_ok( |
167 | 174 | [ |
168 | | -'pg_basebackup','-D', |
169 | | -"$tempdir/backup2",'--no-manifest', |
170 | | -'--waldir',"$tempdir/xlog2" |
| 175 | +@pg_basebackup_defs,'-D', |
| 176 | +"$tempdir/backup2",'--no-manifest', |
| 177 | +'--waldir',"$tempdir/xlog2" |
171 | 178 | ], |
172 | 179 | 'separate xlog directory'); |
173 | 180 | ok(-f"$tempdir/backup2/PG_VERSION",'backup was created'); |
|
176 | 183 | rmtree("$tempdir/backup2"); |
177 | 184 | rmtree("$tempdir/xlog2"); |
178 | 185 |
|
179 | | -$node->command_ok(['pg_basebackup','-D',"$tempdir/tarbackup",'-Ft' ], |
| 186 | +$node->command_ok([@pg_basebackup_defs,'-D',"$tempdir/tarbackup",'-Ft' ], |
180 | 187 | 'tar format'); |
181 | 188 | ok(-f"$tempdir/tarbackup/base.tar",'backup tar was created'); |
182 | 189 | rmtree("$tempdir/tarbackup"); |
183 | 190 |
|
184 | 191 | $node->command_fails( |
185 | | -['pg_basebackup','-D',"$tempdir/backup_foo",'-Fp',"-T=/foo" ], |
| 192 | +[@pg_basebackup_defs,'-D',"$tempdir/backup_foo",'-Fp',"-T=/foo" ], |
186 | 193 | '-T with empty old directory fails'); |
187 | 194 | $node->command_fails( |
188 | | -['pg_basebackup','-D',"$tempdir/backup_foo",'-Fp',"-T/foo=" ], |
| 195 | +[@pg_basebackup_defs,'-D',"$tempdir/backup_foo",'-Fp',"-T/foo=" ], |
189 | 196 | '-T with empty new directory fails'); |
190 | 197 | $node->command_fails( |
191 | 198 | [ |
192 | | -'pg_basebackup','-D',"$tempdir/backup_foo",'-Fp', |
| 199 | +@pg_basebackup_defs,'-D',"$tempdir/backup_foo",'-Fp', |
193 | 200 | "-T/foo=/bar=/baz" |
194 | 201 | ], |
195 | 202 | '-T with multiple = fails'); |
196 | 203 | $node->command_fails( |
197 | | -['pg_basebackup','-D',"$tempdir/backup_foo",'-Fp',"-Tfoo=/bar" ], |
| 204 | +[@pg_basebackup_defs,'-D',"$tempdir/backup_foo",'-Fp',"-Tfoo=/bar" ], |
198 | 205 | '-T with old directory not absolute fails'); |
199 | 206 | $node->command_fails( |
200 | | -['pg_basebackup','-D',"$tempdir/backup_foo",'-Fp',"-T/foo=bar" ], |
| 207 | +[@pg_basebackup_defs,'-D',"$tempdir/backup_foo",'-Fp',"-T/foo=bar" ], |
201 | 208 | '-T with new directory not absolute fails'); |
202 | 209 | $node->command_fails( |
203 | | -['pg_basebackup','-D',"$tempdir/backup_foo",'-Fp',"-Tfoo" ], |
| 210 | +[@pg_basebackup_defs,'-D',"$tempdir/backup_foo",'-Fp',"-Tfoo" ], |
204 | 211 | '-T with invalid format fails'); |
205 | 212 |
|
206 | 213 | # Tar format doesn't support filenames longer than 100 bytes. |
|
211 | 218 | ordie"unable to create file$superlongpath"; |
212 | 219 | close$file; |
213 | 220 | $node->command_fails( |
214 | | -['pg_basebackup','-D',"$tempdir/tarbackup_l1",'-Ft' ], |
| 221 | +[@pg_basebackup_defs,'-D',"$tempdir/tarbackup_l1",'-Ft' ], |
215 | 222 | 'pg_basebackup tar with long name fails'); |
216 | 223 | unlink"$pgdata/$superlongname"; |
217 | 224 |
|
|
329 | 336 | } |
330 | 337 |
|
331 | 338 | $node->command_fails( |
332 | | -['pg_basebackup','-D',"$tempdir/backup1",'-Fp' ], |
| 339 | +[@pg_basebackup_defs,'-D',"$tempdir/backup1",'-Fp' ], |
333 | 340 | 'plain format with tablespaces fails without tablespace mapping'); |
334 | 341 |
|
335 | 342 | $node->command_ok( |
336 | 343 | [ |
337 | | -'pg_basebackup','-D', |
338 | | -"$tempdir/backup1",'-Fp', |
339 | | -"-T$realTsDir=$real_tempdir/tbackup/tblspc1" |
| 344 | +@pg_basebackup_defs,'-D', |
| 345 | +"$tempdir/backup1",'-Fp', |
| 346 | +"-T$realTsDir=$real_tempdir/tbackup/tblspc1", |
340 | 347 | ], |
341 | 348 | 'plain format with tablespaces succeeds with tablespace mapping'); |
342 | 349 | ok(-d"$tempdir/tbackup/tblspc1",'tablespace was relocated'); |
|
404 | 411 | $realTsDir =~s/=/\\=/; |
405 | 412 | $node->command_ok( |
406 | 413 | [ |
407 | | -'pg_basebackup','-D', |
408 | | -"$tempdir/backup3",'-Fp', |
409 | | -"-T$realTsDir=$real_tempdir/tbackup/tbl\\=spc2" |
| 414 | +@pg_basebackup_defs,'-D', |
| 415 | +"$tempdir/backup3",'-Fp', |
| 416 | +"-T$realTsDir=$real_tempdir/tbackup/tbl\\=spc2", |
410 | 417 | ], |
411 | 418 | 'mapping tablespace with = sign in path'); |
412 | 419 | ok(-d"$tempdir/tbackup/tbl=spc2",'tablespace with = sign was relocated'); |
|
417 | 424 | $realTsDir ="$real_sys_tempdir/$superlongname"; |
418 | 425 | $node->safe_psql('postgres', |
419 | 426 | "CREATE TABLESPACE tblspc3 LOCATION '$realTsDir';"); |
420 | | -$node->command_ok(['pg_basebackup','-D',"$tempdir/tarbackup_l3",'-Ft' ], |
| 427 | +$node->command_ok([@pg_basebackup_defs,'-D',"$tempdir/tarbackup_l3",'-Ft' ], |
421 | 428 | 'pg_basebackup tar with long symlink target'); |
422 | 429 | $node->safe_psql('postgres',"DROP TABLESPACE tblspc3;"); |
423 | 430 | rmtree("$tempdir/tarbackup_l3"); |
424 | 431 |
|
425 | | -$node->command_ok(['pg_basebackup','-D',"$tempdir/backupR",'-R' ], |
| 432 | +$node->command_ok([@pg_basebackup_defs,'-D',"$tempdir/backupR",'-R' ], |
426 | 433 | 'pg_basebackup -R runs'); |
427 | 434 | ok(-f"$tempdir/backupR/postgresql.auto.conf",'postgresql.auto.conf exists'); |
428 | 435 | ok(-f"$tempdir/backupR/standby.signal",'standby.signal was created'); |
|
436 | 443 | 'postgresql.auto.conf sets primary_conninfo'); |
437 | 444 |
|
438 | 445 | $node->command_ok( |
439 | | -['pg_basebackup','-D',"$tempdir/backupxd" ], |
| 446 | +[@pg_basebackup_defs,'-D',"$tempdir/backupxd" ], |
440 | 447 | 'pg_basebackup runs in default xlog mode'); |
441 | 448 | ok(grep(/^[0-9A-F]{24}$/, slurp_dir("$tempdir/backupxd/pg_wal")), |
442 | 449 | 'WAL files copied'); |
443 | 450 | rmtree("$tempdir/backupxd"); |
444 | 451 |
|
445 | 452 | $node->command_ok( |
446 | | -['pg_basebackup','-D',"$tempdir/backupxf",'-X','fetch' ], |
| 453 | +[@pg_basebackup_defs,'-D',"$tempdir/backupxf",'-X','fetch' ], |
447 | 454 | 'pg_basebackup -X fetch runs'); |
448 | 455 | ok(grep(/^[0-9A-F]{24}$/, slurp_dir("$tempdir/backupxf/pg_wal")), |
449 | 456 | 'WAL files copied'); |
450 | 457 | rmtree("$tempdir/backupxf"); |
451 | 458 | $node->command_ok( |
452 | | -['pg_basebackup','-D',"$tempdir/backupxs",'-X','stream' ], |
| 459 | +[@pg_basebackup_defs,'-D',"$tempdir/backupxs",'-X','stream' ], |
453 | 460 | 'pg_basebackup -X stream runs'); |
454 | 461 | ok(grep(/^[0-9A-F]{24}$/, slurp_dir("$tempdir/backupxs/pg_wal")), |
455 | 462 | 'WAL files copied'); |
456 | 463 | rmtree("$tempdir/backupxs"); |
457 | 464 | $node->command_ok( |
458 | | -['pg_basebackup','-D',"$tempdir/backupxst",'-X','stream','-Ft' ], |
| 465 | +[@pg_basebackup_defs,'-D',"$tempdir/backupxst",'-X','stream','-Ft' ], |
459 | 466 | 'pg_basebackup -X stream runs in tar mode'); |
460 | 467 | ok(-f"$tempdir/backupxst/pg_wal.tar","tar file was created"); |
461 | 468 | rmtree("$tempdir/backupxst"); |
462 | 469 | $node->command_ok( |
463 | 470 | [ |
464 | | -'pg_basebackup','-D', |
| 471 | +@pg_basebackup_defs,'-D', |
465 | 472 | "$tempdir/backupnoslot",'-X', |
466 | 473 | 'stream','--no-slot' |
467 | 474 | ], |
|
470 | 477 |
|
471 | 478 | $node->command_fails( |
472 | 479 | [ |
473 | | -'pg_basebackup','-D', |
| 480 | +@pg_basebackup_defs,'-D', |
474 | 481 | "$tempdir/backupxs_sl_fail",'-X', |
475 | 482 | 'stream','-S', |
476 | 483 | 'slot0' |
477 | 484 | ], |
478 | 485 | 'pg_basebackup fails with nonexistent replication slot'); |
479 | 486 |
|
480 | 487 | $node->command_fails( |
481 | | -['pg_basebackup','-D',"$tempdir/backupxs_slot",'-C' ], |
| 488 | +[@pg_basebackup_defs,'-D',"$tempdir/backupxs_slot",'-C' ], |
482 | 489 | 'pg_basebackup -C fails without slot name'); |
483 | 490 |
|
484 | 491 | $node->command_fails( |
485 | 492 | [ |
486 | | -'pg_basebackup','-D', |
| 493 | +@pg_basebackup_defs,'-D', |
487 | 494 | "$tempdir/backupxs_slot",'-C', |
488 | 495 | '-S','slot0', |
489 | 496 | '--no-slot' |
490 | 497 | ], |
491 | 498 | 'pg_basebackup fails with -C -S --no-slot'); |
492 | 499 |
|
493 | 500 | $node->command_ok( |
494 | | -['pg_basebackup','-D',"$tempdir/backupxs_slot",'-C','-S','slot0' ], |
| 501 | +[@pg_basebackup_defs,'-D',"$tempdir/backupxs_slot",'-C','-S','slot0' ], |
495 | 502 | 'pg_basebackup -C runs'); |
496 | 503 | rmtree("$tempdir/backupxs_slot"); |
497 | 504 |
|
|
510 | 517 | 'restart LSN of new slot is not null'); |
511 | 518 |
|
512 | 519 | $node->command_fails( |
513 | | -['pg_basebackup','-D',"$tempdir/backupxs_slot1",'-C','-S','slot0' ], |
| 520 | +[@pg_basebackup_defs,'-D',"$tempdir/backupxs_slot1",'-C','-S','slot0' ], |
514 | 521 | 'pg_basebackup fails with -C -S and a previously existing slot'); |
515 | 522 |
|
516 | 523 | $node->safe_psql('postgres', |
|
520 | 527 | ); |
521 | 528 | is($lsn,'','restart LSN of new slot is null'); |
522 | 529 | $node->command_fails( |
523 | | -['pg_basebackup','-D',"$tempdir/fail",'-S','slot1','-X','none' ], |
| 530 | +[@pg_basebackup_defs,'-D',"$tempdir/fail",'-S','slot1','-X','none' ], |
524 | 531 | 'pg_basebackup with replication slot fails without WAL streaming'); |
525 | 532 | $node->command_ok( |
526 | 533 | [ |
527 | | -'pg_basebackup','-D',"$tempdir/backupxs_sl",'-X', |
528 | | -'stream','-S','slot1' |
| 534 | +@pg_basebackup_defs,'-D',"$tempdir/backupxs_sl",'-X', |
| 535 | +'stream','-S','slot1' |
529 | 536 | ], |
530 | 537 | 'pg_basebackup -X stream with replication slot runs'); |
531 | 538 | $lsn =$node->safe_psql('postgres', |
|
536 | 543 |
|
537 | 544 | $node->command_ok( |
538 | 545 | [ |
539 | | -'pg_basebackup','-D',"$tempdir/backupxs_sl_R",'-X', |
540 | | -'stream','-S','slot1','-R' |
| 546 | +@pg_basebackup_defs,'-D',"$tempdir/backupxs_sl_R",'-X', |
| 547 | +'stream','-S','slot1','-R', |
541 | 548 | ], |
542 | 549 | 'pg_basebackup with replication slot and -R runs'); |
543 | 550 | like( |
|
570 | 577 | system_or_bail'pg_ctl','-D',$pgdata,'start'; |
571 | 578 |
|
572 | 579 | $node->command_checks_all( |
573 | | -['pg_basebackup','-D',"$tempdir/backup_corrupt" ], |
| 580 | +[@pg_basebackup_defs,'-D',"$tempdir/backup_corrupt" ], |
574 | 581 | 1, |
575 | 582 | [qr{^$}], |
576 | 583 | [qr/^WARNING.*checksum verification failed/s], |
|
590 | 597 | system_or_bail'pg_ctl','-D',$pgdata,'start'; |
591 | 598 |
|
592 | 599 | $node->command_checks_all( |
593 | | -['pg_basebackup','-D',"$tempdir/backup_corrupt2" ], |
| 600 | +[@pg_basebackup_defs,'-D',"$tempdir/backup_corrupt2" ], |
594 | 601 | 1, |
595 | 602 | [qr{^$}], |
596 | 603 | [qr/^WARNING.*further.*failures.*will.not.be.reported/s], |
|
606 | 613 | system_or_bail'pg_ctl','-D',$pgdata,'start'; |
607 | 614 |
|
608 | 615 | $node->command_checks_all( |
609 | | -['pg_basebackup','-D',"$tempdir/backup_corrupt3" ], |
| 616 | +[@pg_basebackup_defs,'-D',"$tempdir/backup_corrupt3" ], |
610 | 617 | 1, |
611 | 618 | [qr{^$}], |
612 | 619 | [qr/^WARNING.*7 total checksum verification failures/s], |
|
616 | 623 | # do not verify checksums, should return ok |
617 | 624 | $node->command_ok( |
618 | 625 | [ |
619 | | -'pg_basebackup','-D', |
620 | | -"$tempdir/backup_corrupt4",'--no-verify-checksums' |
| 626 | +@pg_basebackup_defs,'-D', |
| 627 | +"$tempdir/backup_corrupt4",'--no-verify-checksums', |
621 | 628 | ], |
622 | 629 | 'pg_basebackup with -k does not report checksum mismatch'); |
623 | 630 | rmtree("$tempdir/backup_corrupt4"); |
|
635 | 642 |
|
636 | 643 | $node->command_ok( |
637 | 644 | [ |
638 | | -'pg_basebackup','-D', |
| 645 | +@pg_basebackup_defs,'-D', |
639 | 646 | "$tempdir/backup_gzip",'--compress', |
640 | | -'1','--no-sync', |
641 | | -'--format','t' |
| 647 | +'1','--format', |
| 648 | +'t' |
642 | 649 | ], |
643 | 650 | 'pg_basebackup with --compress'); |
644 | 651 | $node->command_ok( |
645 | 652 | [ |
646 | | -'pg_basebackup','-D', |
| 653 | +@pg_basebackup_defs,'-D', |
647 | 654 | "$tempdir/backup_gzip2",'--gzip', |
648 | | -'--no-sync','--format', |
649 | | -'t' |
| 655 | +'--format','t' |
650 | 656 | ], |
651 | 657 | 'pg_basebackup with --gzip'); |
652 | 658 |
|
|