Skip to content

Commit ac017dd

Browse files
committed
[Issue #169] added tests for issues, pointed out by review
1 parent d57bf8e commit ac017dd

File tree

2 files changed

+152
-0
lines changed

2 files changed

+152
-0
lines changed

tests/compatibility.py

+77
Original file line numberDiff line numberDiff line change
@@ -688,3 +688,80 @@ def test_backward_compatibility_merge_1(self):
688688

689689
# Clean after yourself
690690
self.del_test_dir(module_name, fname)
691+
692+
# @unittest.skip("skip")
693+
def test_page_vacuum_truncate(self):
694+
"""
695+
make node, create table, take full backup,
696+
delete all data, vacuum relation,
697+
take page backup, insert some data,
698+
take second page backup,
699+
restore latest page backup using new binary
700+
and check data correctness
701+
old binary should be 2.2.x version
702+
"""
703+
fname = self.id().split('.')[3]
704+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
705+
node = self.make_simple_node(
706+
base_dir=os.path.join(module_name, fname, 'node'),
707+
set_replication=True,
708+
initdb_params=['--data-checksums'],
709+
pg_options={'autovacuum': 'off'})
710+
711+
self.init_pb(backup_dir, old_binary=True)
712+
self.add_instance(backup_dir, 'node', node, old_binary=True)
713+
self.set_archiving(backup_dir, 'node', node, old_binary=True)
714+
node.slow_start()
715+
716+
node.safe_psql(
717+
"postgres",
718+
"create sequence t_seq; "
719+
"create table t_heap as select i as id, "
720+
"md5(i::text) as text, "
721+
"md5(repeat(i::text,10))::tsvector as tsvector "
722+
"from generate_series(0,1024) i")
723+
724+
node.safe_psql(
725+
"postgres",
726+
"vacuum t_heap")
727+
728+
self.backup_node(backup_dir, 'node', node, old_binary=True)
729+
730+
node.safe_psql(
731+
"postgres",
732+
"delete from t_heap")
733+
734+
node.safe_psql(
735+
"postgres",
736+
"vacuum t_heap")
737+
738+
self.backup_node(
739+
backup_dir, 'node', node, backup_type='page', old_binary=True)
740+
741+
node.safe_psql(
742+
"postgres",
743+
"insert into t_heap select i as id, "
744+
"md5(i::text) as text, "
745+
"md5(repeat(i::text,10))::tsvector as tsvector "
746+
"from generate_series(0,1) i")
747+
748+
self.backup_node(
749+
backup_dir, 'node', node, backup_type='page', old_binary=True)
750+
751+
pgdata = self.pgdata_content(node.data_dir)
752+
753+
node_restored = self.make_simple_node(
754+
base_dir=os.path.join(module_name, fname, 'node_restored'))
755+
node_restored.cleanup()
756+
757+
self.restore_node(backup_dir, 'node', node_restored)
758+
759+
# Physical comparison
760+
pgdata_restored = self.pgdata_content(node_restored.data_dir)
761+
self.compare_pgdata(pgdata, pgdata_restored)
762+
763+
self.set_auto_conf(node_restored, {'port': node_restored.port})
764+
node_restored.slow_start()
765+
766+
# Clean after yourself
767+
self.del_test_dir(module_name, fname)

tests/page.py

+75
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def test_basic_page_vacuum_truncate(self):
5454

5555
self.backup_node(backup_dir, 'node', node)
5656

57+
# TODO: make it dynamic
5758
node.safe_psql(
5859
"postgres",
5960
"delete from t_heap where ctid >= '(11,0)'")
@@ -101,6 +102,80 @@ def test_basic_page_vacuum_truncate(self):
101102
# Clean after yourself
102103
self.del_test_dir(module_name, fname)
103104

105+
# @unittest.skip("skip")
106+
def test_page_vacuum_truncate_1(self):
107+
"""
108+
make node, create table, take full backup,
109+
delete all data, vacuum relation,
110+
take page backup, insert some data,
111+
take second page backup and check data correctness
112+
"""
113+
fname = self.id().split('.')[3]
114+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
115+
node = self.make_simple_node(
116+
base_dir=os.path.join(module_name, fname, 'node'),
117+
set_replication=True,
118+
initdb_params=['--data-checksums'],
119+
pg_options={'autovacuum': 'off'})
120+
121+
self.init_pb(backup_dir)
122+
self.add_instance(backup_dir, 'node', node)
123+
self.set_archiving(backup_dir, 'node', node)
124+
node.slow_start()
125+
126+
node.safe_psql(
127+
"postgres",
128+
"create sequence t_seq; "
129+
"create table t_heap as select i as id, "
130+
"md5(i::text) as text, "
131+
"md5(repeat(i::text,10))::tsvector as tsvector "
132+
"from generate_series(0,1024) i")
133+
134+
node.safe_psql(
135+
"postgres",
136+
"vacuum t_heap")
137+
138+
self.backup_node(backup_dir, 'node', node)
139+
140+
node.safe_psql(
141+
"postgres",
142+
"delete from t_heap")
143+
144+
node.safe_psql(
145+
"postgres",
146+
"vacuum t_heap")
147+
148+
self.backup_node(
149+
backup_dir, 'node', node, backup_type='page')
150+
151+
node.safe_psql(
152+
"postgres",
153+
"insert into t_heap select i as id, "
154+
"md5(i::text) as text, "
155+
"md5(repeat(i::text,10))::tsvector as tsvector "
156+
"from generate_series(0,1) i")
157+
158+
self.backup_node(
159+
backup_dir, 'node', node, backup_type='page')
160+
161+
pgdata = self.pgdata_content(node.data_dir)
162+
163+
node_restored = self.make_simple_node(
164+
base_dir=os.path.join(module_name, fname, 'node_restored'))
165+
node_restored.cleanup()
166+
167+
self.restore_node(backup_dir, 'node', node_restored)
168+
169+
# Physical comparison
170+
pgdata_restored = self.pgdata_content(node_restored.data_dir)
171+
self.compare_pgdata(pgdata, pgdata_restored)
172+
173+
self.set_auto_conf(node_restored, {'port': node_restored.port})
174+
node_restored.slow_start()
175+
176+
# Clean after yourself
177+
self.del_test_dir(module_name, fname)
178+
104179
# @unittest.skip("skip")
105180
def test_page_stream(self):
106181
"""

0 commit comments

Comments
 (0)