8000 tests: test_merge_tablespaces and test_merge_tablespaces_1 added · postgrespro/pg_probackup@a5cef98 · GitHub
[go: up one dir, main page]

Skip to content

Commit a5cef98

Browse files
committed
tests: test_merge_tablespaces and test_merge_tablespaces_1 added
1 parent eef5769 commit a5cef98

File tree

2 files changed

+155
-1
lines changed

2 files changed

+155
-1
lines changed

tests/helpers/ptrack_helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1123,7 +1123,7 @@ def compare_pgdata(self, original_pgdata, restored_pgdata):
11231123
for directory in restored_pgdata['dirs']:
11241124
if directory not in original_pgdata['dirs']:
11251125
fail = True
1126-
error_message += '\nDirectory is not present'
1126+
error_message += '\nDirectory was not present'
11271127
error_message += ' in original PGDATA: {0}\n'.format(
11281128
os.path.join(restored_pgdata['pgdata'], directory))
11291129

tests/merge.py

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import unittest
44
import os
55
from .helpers.ptrack_helpers import ProbackupTest, ProbackupException
6+
import shutil
67

78
module_name = "merge"
89

@@ -471,9 +472,162 @@ def test_merge_compressed_and_uncompressed_backups_2(self):
471472

472473
# @unittest.skip("skip")
473474
def test_merge_tablespaces(self):
475+
"""
476+
Create tablespace with table
477+
"""
478+
fname = self.id().split('.')[3]
479+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
480+
node = self.make_simple_node(
481+
base_dir="{0}/{1}/node".format(module_name, fname),
482+
set_replication=True, initdb_params=['--data-checksums'],
483+
pg_options={
484+
'wal_level': 'replica',
485+
'max_wal_senders': '2',
486+
'autovacuum': 'off'
487+
}
488+
)
489+
490+
self.init_pb(backup_dir)
491+
self.add_instance(backup_dir, 'node', node)
492+
self.set_archiving(backup_dir, 'node', node)
493+
node.start()
494+
495+
self.create_tblspace_in_node(node, 'somedata')
496+
node.safe_psql(
497+
"postgres",
498+
"create table t_heap tablespace somedata as select i as id,"
499+
" md5(i::text) as text, md5(i::text)::tsvector as tsvector"
500+
" from generate_series(0,100) i"
501+
)
502+
# FULL backup
503+
self.backup_node(backup_dir, 'node', node)
504+
505+
# Create new tablespace
506+
self.create_tblspace_in_node(node, 'somedata1')
507+
508+
node.safe_psql(
509+
"postgres",
510+
"create table t_heap1 tablespace somedata1 as select i as id,"
511+
" md5(i::text) as text, md5(i::text)::tsvector as tsvector"
512+
" from generate_series(0,100) i"
513+
)
514+
515+
node.safe_psql(
516+
"postgres",
517+
"drop table t_heap"
518+
)
519+
520+
# Drop old tablespace
521+
node.safe_psql(
522+
"postgres",
523+
"drop tablespace somedata"
524+
)
525+
526+
# PAGE backup
527+
backup_id = self.backup_node(backup_dir, 'node', node, backup_type="page")
528+
529+
pgdata = self.pgdata_content(node.data_dir)
530+
531+
node.stop()
532+
shutil.rmtree(
533+
self.get_tblspace_path(node, 'somedata'),
534+
ignore_errors=True)
535+
shutil.rmtree(
536+
self.get_tblspace_path(node, 'somedata1'),
537+
ignore_errors=True)
538+
node.cleanup()
539+
540+
self.merge_backup(backup_dir, 'node', backup_id)
541+
542+
self.restore_node(
543+
backup_dir, 'node', node, options=["-j", "4"])
544+
545+
pgdata_restored = self.pgdata_content(node.data_dir)
546+
547+
# this compare should fall because we lost some directories
548+
self.compare_pgdata(pgdata, pgdata_restored)
549+
550+
# @unittest.skip("skip")
551+
def test_merge_tablespaces_1(self):
474552
"""
475553
Some test here
476554
"""
555+
fname = self.id().split('.')[3]
556+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
557+
node = self.make_simple_node(
558+
base_dir="{0}/{1}/node".format(module_name, fname),
559+
set_replication=True, initdb_params=['--data-checksums'],
560+
pg_options={
561+
'wal_level': 'replica',
562+
'max_wal_senders': '2',
563+
'autovacuum': 'off'
564+
}
565+
)
566+
567+
self.init_pb(backup_dir)
568+
self.add_instance(backup_dir, 'node', node)
569+
self.set_archiving(backup_dir, 'node', node)
570+
node.start()
571+
572+
self.create_tblspace_in_node(node, 'somedata')
573+
574+
# FULL backup
575+
self.backup_node(backup_dir, 'node', node)
576+
node.safe_psql(
577+
"postgres",
578+
"create table t_heap tablespace somedata as select i as id,"
579+
" md5(i::text) as text, md5(i::text)::tsvector as tsvector"
580+
" from generate_series(0,100) i"
581+
)
582+
583+
# CREATE NEW TABLESPACE
584+
self.create_tblspace_in_node(node, 'somedata1')
585+
586+
node.safe_psql(
587+
"postgres",
588+
"create table t_heap1 tablespace somedata1 as select i as id,"
589+
" md5(i::text) as text, md5(i::text)::tsvector as tsvector"
590+
" from generate_series(0,100) i"
591+
)
592+
593+
# PAGE backup
594+
self.backup_node(backup_dir, 'node', node, backup_type="page")
595+
596+
node.safe_psql(
597+
"postgres",
598+
"drop table t_heap"
599+
)
600+
node.safe_psql(
601+
"postgres",
602+
"drop tablespace somedata"
603+
)
604+
605+
# DELTA backup
606+
backup_id = self.backup_node(
607+
backup_dir, 'node', node, backup_type="delta")
608+
609+
pgdata = self.pgdata_content(node.data_dir)
610+
611+
node.stop()
612+
shutil.rmtree(
613+
self.get_tblspace_path(node, 'somedata'),
614+
ignore_errors=True)
615+
shutil.rmtree(
616+
self.get_tblspace_path(node, 'somedata1'),
617+
ignore_errors=True)
618+
node.cleanup()
619+
620+
self.merge_backup(backup_dir, 'node', backup_id)
621+
622+
self.restore_node(
623+
backup_dir, 'node', node,
624+
options=["-j", "4"])
625+
626+
pgdata_restored = self.pgdata_content(node.data_dir)
627+
self.compare_pgdata(pgdata, pgdata_restored)
628+
629+
# Clean after yourself
630+
self.del_test_dir(module_name, fname)
477631

478632
def test_merge_page_truncate(self):
479633
"""

0 commit comments

Comments
 (0)
0