Skip to content

Commit 277e410

Browse files
committed
tests: fixes
1 parent 39519f7 commit 277e410

File tree

11 files changed

+106
-100
lines changed

11 files changed

+106
-100
lines changed

tests/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
def load_tests(loader, tests, pattern):
1414
suite = unittest.TestSuite()
15+
# suite.addTests(loader.loadTestsFromModule(auth_test))
1516
suite.addTests(loader.loadTestsFromModule(archive))
1617
suite.addTests(loader.loadTestsFromModule(backup_test))
1718
# suite.addTests(loader.loadTestsFromModule(cfs_backup))
@@ -42,7 +43,6 @@ def load_tests(loader, tests, pattern):
4243
suite.addTests(loader.loadTestsFromModule(validate_test))
4344
suite.addTests(loader.loadTestsFromModule(pgpro560))
4445
suite.addTests(loader.loadTestsFromModule(pgpro589))
45-
suite.addTests(loader.loadTestsFromModule(auth_test))
4646

4747
return suite
4848

tests/archive.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,3 +382,38 @@ def test_master_and_replica_concurrent_archiving(self):
382382
backup_id = self.backup_node(backup_dir, 'master', master)
383383
self.validate_pb(backup_dir, 'master')
384384
self.assertEqual('OK', self.show_pb(backup_dir, 'master', backup_id)['status'])
385+
386+
# @unittest.expectedFailure
387+
@unittest.skip("skip")
388+
def test_archive_compress(self):
389+
"""Description in jira issue PGPRO-434"""
390+
fname = self.id().split('.')[3]
391+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
392+
node = self.make_simple_node(base_dir="{0}/{1}/node".format(module_name, fname),
393+
set_replication=True,
394+
initdb_params=['--data-checksums'],
395+
pg_options={'wal_level': 'replica', 'max_wal_senders': '2', 'checkpoint_timeout': '30s'}
396+
)
397+
self.init_pb(backup_dir)
398+
self.add_instance(backup_dir, 'node', node)
399+
self.set_archiving(backup_dir, 'node', node)
400+
# force more frequent wal switch
401+
node.append_conf('postgresql.auto.conf', 'archive_timeout = 30')
402+
node.start()
403+
404+
node.safe_psql(
405+
"postgres",
406+
"create table t_heap as select 1 as id, md5(i::text) as text, md5(repeat(i::text,10))::tsvector as tsvector from generate_series(0,100) i")
407+
408+
result = node.safe_psql("postgres", "SELECT * FROM t_heap")
409+
self.backup_node(backup_dir, 'node', node)
410+
411+
node.cleanup()
412+
413+
self.restore_node(backup_dir, 'node', node)
414+
node.start()
415+
416+
self.assertEqual(result, node.safe_psql("postgres", "SELECT * FROM t_heap"),
417+
'data after restore not equal to original data')
418+
# Clean after yourself
419+
# self.del_test_dir(module_name, fname)

tests/backup_test.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,10 @@ def test_incremental_backup_without_full(self):
113113
self.assertEqual(1, 0, "Expecting Error because page backup should not be possible without valid full backup.\n Output: {0} \n CMD: {1}".format(
114114
repr(self.output), self.cmd))
115115
except ProbackupException as e:
116-
self.assertEqual(e.message,
117-
'ERROR: Valid backup on current timeline is not found. Create new FULL backup before an incremental one.\n',
118-
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
116+
self.assertIn(
117+
"ERROR: Valid backup on current timeline is not found. Create new FULL backup before an incremental one.",
118+
e.message,
119+
"\n Unexpected Error Message: {0}\n CMD: {1}".format(repr(e.message), self.cmd))
119120

120121
sleep(1)
121122

@@ -125,9 +126,10 @@ def test_incremental_backup_without_full(self):
125126
self.assertEqual(1, 0, "Expecting Error because page backup should not be possible without valid full backup.\n Output: {0} \n CMD: {1}".format(
126127
repr(self.output), self.cmd))
127128
except ProbackupException as e:
128-
self.assertEqual(e.message,
129-
'ERROR: Valid backup on current timeline is not found. Create new FULL backup before an incremental one.\n',
130-
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
129+
self.assertIn(
130+
"ERROR: Valid backup on current timeline is not found. Create new FULL backup before an incremental one.",
131+
e.message,
132+
"\n Unexpected Error Message: {0}\n CMD: {1}".format(repr(e.message), self.cmd))
131133

132134
self.assertEqual(self.show_pb(backup_dir, 'node')[0]['Status'], "ERROR")
133135

@@ -170,8 +172,9 @@ def test_incremental_backup_corrupt_full(self):
170172
self.assertEqual(1, 0, "Expecting Error because page backup should not be possible without valid full backup.\n Output: {0} \n CMD: {1}".format(
171173
repr(self.output), self.cmd))
172174
except ProbackupException as e:
173-
self.assertEqual(e.message,
174-
"ERROR: Valid backup on current timeline is not found. Create new FULL backup before an incremental one.\n",
175+
self.assertIn(
176+
"ERROR: Valid backup on current timeline is not found. Create new FULL backup before an incremental one.",
177+
e.message,
175178
"\n Unexpected Error Message: {0}\n CMD: {1}".format(repr(e.message), self.cmd))
176179

177180
# sleep(1)

tests/expected/option_help.out

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ pg_probackup - utility to manage backup/recovery of PostgreSQL database.
55

66
pg_probackup version
77

8-
pg_probackup init -B backup-path [-l]
8+
pg_probackup init -B backup-path
99

1010
pg_probackup set-config -B backup-dir --instance=instance_name
11-
[--log-level=log-level]
11+
[--log-level-console=log-level-console]
12+
[--log-level-file=log-level-file]
1213
[--log-filename=log-filename]
1314
[--error-log-filename=error-log-filename]
1415
[--log-directory=log-directory]
@@ -26,7 +27,7 @@ pg_probackup - utility to manage backup/recovery of PostgreSQL database.
2627
pg_probackup show-config -B backup-dir --instance=instance_name
2728

2829
pg_probackup backup -B backup-path -b backup-mode --instance=instance_name
29-
[-C] [-l] [--stream [-S slot-name]] [--backup-pg-log]
30+
[-C] [--stream [-S slot-name]] [--backup-pg-log]
3031
[-j num-threads] [--archive-timeout=archive-timeout]
3132
[--compress-algorithm=compress-algorithm]
3233
[--compress-level=compress-level]
@@ -37,20 +38,20 @@ pg_probackup - utility to manage backup/recovery of PostgreSQL database.
3738
[--replica-timeout=timeout]
3839

3940
pg_probackup restore -B backup-dir --instance=instance_name
40-
[-D pgdata-dir] [-l] [-i backup-id] [--progress]
41+
[-D pgdata-dir] [-i backup-id] [--progress]
4142
[--time=time|--xid=xid [--inclusive=boolean]]
4243
[--timeline=timeline] [-T OLDDIR=NEWDIR]
4344

4445
pg_probackup validate -B backup-dir [--instance=instance_name]
45-
[-i backup-id] [-l] [--progress]
46+
[-i backup-id] [--progress]
4647
[--time=time|--xid=xid [--inclusive=boolean]]
4748
[--timeline=timeline]
4849

4950
pg_probackup show -B backup-dir
5051
[--instance=instance_name [-i backup-id]]
5152

5253
pg_probackup delete -B backup-dir --instance=instance_name
53-
[--wal] [-i backup-id | --expired] [-l]
54+
[--wal] [-i backup-id | --expired]
5455

5556
pg_probackup add-instance -B backup-dir -D pgdata-dir
5657
--instance=instance_name

tests/expected/option_version.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
pg_probackup 2.0.13
1+
pg_probackup 2.0.13

tests/helpers/ptrack_helpers.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ def get_recovery_conf(self, node):
559559
out_dict[key.strip()] = value.strip(" '").replace("'\n", "")
560560
return out_dict
561561

562-
def set_archiving(self, backup_dir, instance, node, replica=False):
562+
def set_archiving(self, backup_dir, instance, node, replica=False, compress=False):
563563

564564
if replica:
565565
archive_mode = 'always'
@@ -576,7 +576,13 @@ def set_archiving(self, backup_dir, instance, node, replica=False):
576576
"archive_mode = {0}".format(archive_mode)
577577
)
578578
if os.name == 'posix':
579-
node.append_conf(
579+
if compress:
580+
node.append_conf(
581+
"postgresql.auto.conf",
582+
"archive_command = '{0} archive-push -B {1} --instance={2} --compress --wal-file-path %p --wal-file-name %f'".format(
583+
self.probackup_path, backup_dir, instance))
584+
else:
585+
node.append_conf(
580586
"postgresql.auto.conf",
581587
"archive_command = '{0} archive-push -B {1} --instance={2} --wal-file-path %p --wal-file-name %f'".format(
582588
self.probackup_path, backup_dir, instance))

tests/option_test.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ def test_version_2(self):
2626
fname = self.id().split(".")[3]
2727
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
2828
with open(os.path.join(self.dir_path, "expected/option_version.out"), "rb") as version_out:
29-
self.assertEqual(
30-
self.run_pb(["--version"]),
31-
version_out.read().decode("utf-8")
29+
self.assertIn(
30+
version_out.read().decode("utf-8"),
31+
self.run_pb(["--version"])
3232
)
3333

3434
# @unittest.skip("skip")
@@ -76,8 +76,8 @@ def test_options_4(self):
7676
self.assertEqual(1, 0, "Expecting Error because '-b' parameter is not specified.\n Output: {0} \n CMD: {1}".format(
7777
repr(self.output), self.cmd))
7878
except ProbackupException as e:
79-
self.assertEqual(e.message,
80-
'ERROR: required parameter not specified: BACKUP_MODE (-b, --backup-mode)\n',
79+
self.assertIn('ERROR: required parameter not specified: BACKUP_MODE (-b, --backup-mode)',
80+
e.message,
8181
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
8282

8383
# backup command failure with invalid backup mode option

tests/page.py

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,34 @@
1010

1111
class PageBackupTest(ProbackupTest, unittest.TestCase):
1212

13-
# @unittest.skip("skip")
14-
# @unittest.expectedFailure
15-
def test_page_check_archive_enabled(self):
16-
"""make node, take page backup without enabled archive, should result in error"""
17-
self.maxDiff = None
18-
fname = self.id().split('.')[3]
19-
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
20-
node = self.make_simple_node(base_dir="{0}/{1}/node".format(module_name, fname),
21-
set_replication=True,
22-
initdb_params=['--data-checksums'],
23-
pg_options={'wal_level': 'replica', 'max_wal_senders': '2', 'checkpoint_timeout': '30s', 'ptrack_enable': 'on'}
24-
)
25-
26-
self.init_pb(backup_dir)
27-
self.add_instance(backup_dir, 'node', node)
28-
node.start()
29-
30-
try:
31-
self.backup_node(backup_dir, 'node', node, backup_type='page', options=['--stream'])
32-
# we should die here because exception is what we expect to happen
33-
self.assertEqual(1, 0, "Expecting Error because archive_mode disabled.\n Output: {0} \n CMD: {1}".format(
34-
repr(self.output), self.cmd))
35-
except ProbackupException as e:
36-
self.assertEqual('ERROR: Archiving must be enabled for PAGE backup\n', e.message,
37-
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
38-
39-
# Clean after yourself
40-
self.del_test_dir(module_name, fname)
13+
# # @unittest.skip("skip")
14+
# # @unittest.expectedFailure
15+
# def test_page_check_archive_enabled(self):
16+
# """make node, take page backup without enabled archive, should result in error"""
17+
# self.maxDiff = None
18+
# fname = self.id().split('.')[3]
19+
# backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
20+
# node = self.make_simple_node(base_dir="{0}/{1}/node".format(module_name, fname),
21+
# set_replication=True,
22+
# initdb_params=['--data-checksums'],
23+
# pg_options={'wal_level': 'replica', 'max_wal_senders': '2', 'checkpoint_timeout': '30s', 'ptrack_enable': 'on'}
24+
# )
25+
#
26+
# self.init_pb(backup_dir)
27+
# self.add_instance(backup_dir, 'node', node)
28+
# node.start()
29+
#
30+
# try:
31+
# self.backup_node(backup_dir, 'node', node, backup_type='page', options=['--stream'])
32+
# # we should die here because exception is what we expect to happen
33+
# self.assertEqual(1, 0, "Expecting Error because archive_mode disabled.\n Output: {0} \n CMD: {1}".format(
34+
# repr(self.output), self.cmd))
35+
# except ProbackupException as e:
36+
# self.assertIn('ERROR: Archiving must be enabled for PAGE backup\n', e.message,
37+
# '\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
38+
#
39+
# # Clean after yourself
40+
# self.del_test_dir(module_name, fname)
4141

4242
# @unittest.skip("skip")
4343
def test_page_stream(self):
@@ -182,7 +182,7 @@ def test_page_multiple_segments(self):
182182
# GET LOGICAL CONTENT FROM NODE
183183
result = node.safe_psql("postgres", "select * from pgbench_accounts")
184184
# PAGE BACKUP
185-
self.backup_node(backup_dir, 'node', node, backup_type='page', options=["-l", "--log-level=verbose"])
185+
self.backup_node(backup_dir, 'node', node, backup_type='page', options=["--log-level-file=verbose"])
186186
# GET PHYSICAL CONTENT FROM NODE
187187
pgdata = self.pgdata_content(node.data_dir)
188188

tests/pgpro589.py

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -10,45 +10,6 @@
1010

1111
class ArchiveCheck(ProbackupTest, unittest.TestCase):
1212

13-
# @unittest.skip("skip")
14-
# @unittest.expectedFailure
15-
def test_archive_mode(self):
16-
"""
17-
https://jira.postgrespro.ru/browse/PGPRO-589
18-
make node without archive support, make backup which should fail
19-
check ERROR text
20-
"""
21-
fname = self.id().split('.')[3]
22-
node = self.make_simple_node(base_dir="{0}/{1}/node".format(module_name, fname),
23-
initdb_params=['--data-checksums'],
24-
pg_options={'wal_level': 'replica'}
25-
)
26-
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
27-
self.init_pb(backup_dir)
28-
self.add_instance(backup_dir, 'node', node)
29-
node.start()
30-
31-
node.pgbench_init(scale=5)
32-
pgbench = node.pgbench(
33-
stdout=subprocess.PIPE,
34-
stderr=subprocess.STDOUT,
35-
options=["-c", "4", "-T", "10"]
36-
)
37-
pgbench.wait()
38-
pgbench.stdout.close()
39-
40-
try:
41-
self.backup_node(backup_dir, 'node', node, options=['--archive-timeout=10'])
42-
# we should die here because exception is what we expect to happen
43-
self.assertEqual(1, 0, "Expecting Error because of disabled archive_mode.\n Output: {0} \n CMD: {1}".format(
44-
repr(self.output), self.cmd))
45-
except ProbackupException as e:
46-
self.assertEqual(e.message, 'ERROR: Archiving must be enabled for archive backup\n',
47-
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
48-
49-
# Clean after yourself
50-
self.del_test_dir(module_name, fname)
51-
5213
def test_pgpro589(self):
5314
"""
5415
https://jira.postgrespro.ru/browse/PGPRO-589

tests/ptrack.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def test_ptrack_enable(self):
3636
self.assertEqual(1, 0, "Expecting Error because ptrack disabled.\n Output: {0} \n CMD: {1}".format(
3737
repr(self.output), self.cmd))
3838
except ProbackupException as e:
39-
self.assertEqual('ERROR: Ptrack is disabled\n', e.message,
39+
self.assertIn('ERROR: Ptrack is disabled\n', e.message,
4040
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
4141

4242
# Clean after yourself
@@ -391,15 +391,15 @@ def test_create_db(self):
391391
node.safe_psql("postgres",
392392
"create table t_heap as select i as id, md5(i::text) as text, md5(i::text)::tsvector as tsvector from generate_series(0,100) i")
393393
node.safe_psql("postgres", "SELECT * FROM t_heap")
394-
self.backup_node(backup_dir, 'node', node, options=["--stream", "-l", "--log-level=verbose"])
394+
self.backup_node(backup_dir, 'node', node, options=["--stream", "--log-level-file=verbose"])
395395
#sys.exit(1)
396396

397397
# CREATE DATABASE DB1
398398
node.safe_psql("postgres", "create database db1")
399399
node.safe_psql("db1", "create table t_heap as select i as id, md5(i::text) as text, md5(i::text)::tsvector as tsvector from generate_series(0,100) i")
400400

401401
# PTRACK BACKUP
402-
backup_id = self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream", "-l", "--log-level=verbose"])
402+
backup_id = self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream", "--log-level-file=verbose"])
403403
pgdata = self.pgdata_content(node.data_dir)
404404

405405
# RESTORE
@@ -479,7 +479,7 @@ def test_alter_table_set_tablespace_ptrack(self):
479479
# sys.exit(1)
480480
# PTRACK BACKUP
481481
result = node.safe_psql("postgres", "select * from t_heap")
482-
self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream", "-l", "--log-level=verbose"])
482+
self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream", "--log-level-file=verbose"])
483483
pgdata = self.pgdata_content(node.data_dir)
484484
#node.stop()
485485
#node.cleanup()
@@ -538,7 +538,7 @@ def test_alter_database_set_tablespace_ptrack(self):
538538
#sys.exit(1)
539539

540540
# PTRACK BACKUP
541-
self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream", "-l", '--log-level=verbose'])
541+
self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream", '--log-level-file=verbose'])
542542
pgdata= self.pgdata_content(node.data_dir)
543543
node.stop()
544544

@@ -655,7 +655,7 @@ def test_ptrack_alter_tablespace(self):
655655
result = node.safe_psql("postgres", "select * from t_heap")
656656

657657
# FIRTS PTRACK BACKUP
658-
self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream", "-l", "--log-level=verbose"])
658+
self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream", "--log-level-file=verbose"])
659659

660660
# GET PHYSICAL CONTENT FROM NODE
661661
pgdata = self.pgdata_content(node.data_dir)
@@ -691,7 +691,7 @@ def test_ptrack_alter_tablespace(self):
691691
node.safe_psql(
692692
"postgres", "alter table t_heap set tablespace pg_default")
693693
# SECOND PTRACK BACKUP
694-
self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream", "-l", "--log-level=verbose"])
694+
self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--stream", "--log-level-file=verbose"])
695695
pgdata = self.pgdata_content(node.data_dir)
696696

697697
# Restore second ptrack backup and check table consistency
@@ -762,7 +762,7 @@ def test_ptrack_multiple_segments(self):
762762
# GET LOGICAL CONTENT FROM NODE
763763
result = node.safe_psql("postgres", "select * from pgbench_accounts")
764764
# FIRTS PTRACK BACKUP
765-
self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["-l", "--log-level=verbose"])
765+
self.backup_node(backup_dir, 'node', node, backup_type='ptrack', options=["--log-level-file=verbose"])
766766
# GET PHYSICAL CONTENT FROM NODE
767767
pgdata = self.pgdata_content(node.data_dir)
768768

0 commit comments

Comments
 (0)