You've already forked pg_probackup
mirror of
https://github.com/postgrespro/pg_probackup.git
synced 2025-07-16 07:14:15 +02:00
tests fixes, del_test_dir added
This commit is contained in:
@ -1,12 +1,10 @@
|
||||
import unittest
|
||||
import os
|
||||
import six
|
||||
from helpers.ptrack_helpers import ProbackupTest, ProbackupException
|
||||
from .helpers.ptrack_helpers import ProbackupTest, ProbackupException
|
||||
from datetime import datetime, timedelta
|
||||
from testgres import stop_all
|
||||
from testgres import stop_all, clean_all
|
||||
import subprocess
|
||||
from sys import exit
|
||||
import re
|
||||
|
||||
|
||||
class ValidateTest(ProbackupTest, unittest.TestCase):
|
||||
@ -15,10 +13,6 @@ class ValidateTest(ProbackupTest, unittest.TestCase):
|
||||
super(ValidateTest, self).__init__(*args, **kwargs)
|
||||
self.module_name = 'validate'
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
stop_all()
|
||||
|
||||
# @unittest.skip("skip")
|
||||
# @unittest.expectedFailure
|
||||
def test_validate_wal_unreal_values(self):
|
||||
@ -55,7 +49,7 @@ class ValidateTest(ProbackupTest, unittest.TestCase):
|
||||
after_backup_time = datetime.now().replace(second=0, microsecond=0)
|
||||
|
||||
# Validate to real time
|
||||
self.assertIn(six.b("INFO: backup validation completed successfully"),
|
||||
self.assertIn("INFO: backup validation completed successfully",
|
||||
self.validate_pb(backup_dir, 'node', options=["--time='{0}'".format(target_time)]),
|
||||
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(self.output), self.cmd))
|
||||
|
||||
@ -65,7 +59,7 @@ class ValidateTest(ProbackupTest, unittest.TestCase):
|
||||
self.validate_pb(backup_dir, 'node', options=["--time='{0}'".format(unreal_time_1)])
|
||||
self.assertEqual(1, 0, "Expecting Error because of validation to unreal time.\n Output: {0} \n CMD: {1}".format(
|
||||
repr(self.output), self.cmd))
|
||||
except ProbackupException, e:
|
||||
except ProbackupException as e:
|
||||
self.assertEqual(e.message, 'ERROR: Full backup satisfying target options is not found.\n',
|
||||
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
|
||||
|
||||
@ -75,7 +69,7 @@ class ValidateTest(ProbackupTest, unittest.TestCase):
|
||||
self.validate_pb(backup_dir, 'node', options=["--time='{0}'".format(unreal_time_2)])
|
||||
self.assertEqual(1, 0, "Expecting Error because of validation to unreal time.\n Output: {0} \n CMD: {1}".format(
|
||||
repr(self.output), self.cmd))
|
||||
except ProbackupException, e:
|
||||
except ProbackupException as e:
|
||||
self.assertTrue('ERROR: not enough WAL records to time' in e.message,
|
||||
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
|
||||
|
||||
@ -87,7 +81,7 @@ class ValidateTest(ProbackupTest, unittest.TestCase):
|
||||
target_xid = res[0][0]
|
||||
node.execute("postgres", "SELECT pg_switch_xlog()")
|
||||
|
||||
self.assertIn(six.b("INFO: backup validation completed successfully"),
|
||||
self.assertIn("INFO: backup validation completed successfully",
|
||||
self.validate_pb(backup_dir, 'node', options=["--xid={0}".format(target_xid)]),
|
||||
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(self.output), self.cmd))
|
||||
|
||||
@ -97,15 +91,18 @@ class ValidateTest(ProbackupTest, unittest.TestCase):
|
||||
self.validate_pb(backup_dir, 'node', options=["--xid={0}".format(unreal_xid)])
|
||||
self.assertEqual(1, 0, "Expecting Error because of validation to unreal xid.\n Output: {0} \n CMD: {1}".format(
|
||||
repr(self.output), self.cmd))
|
||||
except ProbackupException, e:
|
||||
except ProbackupException as e:
|
||||
self.assertTrue('ERROR: not enough WAL records to xid' in e.message,
|
||||
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
|
||||
|
||||
# Validate with backup ID
|
||||
self.assertIn(six.b("INFO: backup validation completed successfully"),
|
||||
self.assertIn("INFO: backup validation completed successfully",
|
||||
self.validate_pb(backup_dir, 'node', backup_id),
|
||||
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(self.output), self.cmd))
|
||||
|
||||
# Clean after yourself
|
||||
self.del_test_dir(self.module_name, fname)
|
||||
|
||||
# @unittest.skip("skip")
|
||||
def test_validate_corrupt_wal_1(self):
|
||||
"""make archive node, make archive backup, corrupt all wal files, run validate, expect errors"""
|
||||
@ -131,22 +128,25 @@ class ValidateTest(ProbackupTest, unittest.TestCase):
|
||||
wals = [f for f in os.listdir(wals_dir) if os.path.isfile(os.path.join(wals_dir, f)) and not f.endswith('.backup')]
|
||||
wals.sort()
|
||||
for wal in wals:
|
||||
f = open(os.path.join(wals_dir, wal), "rb+")
|
||||
f.seek(42)
|
||||
f.write(six.b("blablablaadssaaaaaaaaaaaaaaa"))
|
||||
f.close
|
||||
with open(os.path.join(wals_dir, wal), "rb+", 0) as f:
|
||||
f.seek(42)
|
||||
f.write(b"blablablaadssaaaaaaaaaaaaaaa")
|
||||
f.flush()
|
||||
f.close
|
||||
|
||||
# Simple validate
|
||||
try:
|
||||
self.validate_pb(backup_dir, 'node')
|
||||
self.assertEqual(1, 0, "Expecting Error because of wal segments corruption.\n Output: {0} \n CMD: {1}".format(
|
||||
repr(self.output), self.cmd))
|
||||
except ProbackupException, e:
|
||||
except ProbackupException as e:
|
||||
self.assertTrue('Possible WAL CORRUPTION' in e.message),
|
||||
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd)
|
||||
|
||||
self.assertEqual('CORRUPT', self.show_pb(backup_dir, 'node', backup_id)['status'], 'Backup STATUS should be "CORRUPT"')
|
||||
node.stop()
|
||||
|
||||
# Clean after yourself
|
||||
self.del_test_dir(self.module_name, fname)
|
||||
|
||||
# @unittest.skip("skip")
|
||||
def test_validate_corrupt_wal_2(self):
|
||||
@ -178,22 +178,25 @@ class ValidateTest(ProbackupTest, unittest.TestCase):
|
||||
wals = [f for f in os.listdir(wals_dir) if os.path.isfile(os.path.join(wals_dir, f)) and not f.endswith('.backup')]
|
||||
wals.sort()
|
||||
for wal in wals:
|
||||
f = open(os.path.join(wals_dir, wal), "rb+")
|
||||
f.seek(0)
|
||||
f.write(six.b("blablabla"))
|
||||
f.close
|
||||
with open(os.path.join(wals_dir, wal), "rb+", 0) as f:
|
||||
f.seek(0)
|
||||
f.write(b"blablablaadssaaaaaaaaaaaaaaa")
|
||||
f.flush()
|
||||
f.close
|
||||
|
||||
# Validate to xid
|
||||
try:
|
||||
self.validate_pb(backup_dir, 'node', backup_id, options=['--xid={0}'.format(target_xid)])
|
||||
self.assertEqual(1, 0, "Expecting Error because of wal segments corruption.\n Output: {0} \n CMD: {1}".format(
|
||||
repr(self.output), self.cmd))
|
||||
except ProbackupException, e:
|
||||
except ProbackupException as e:
|
||||
self.assertTrue('Possible WAL CORRUPTION' in e.message),
|
||||
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd)
|
||||
|
||||
self.assertEqual('CORRUPT', self.show_pb(backup_dir, 'node', backup_id)['status'], 'Backup STATUS should be "CORRUPT"')
|
||||
node.stop()
|
||||
|
||||
# Clean after yourself
|
||||
self.del_test_dir(self.module_name, fname)
|
||||
|
||||
# @unittest.skip("skip")
|
||||
def test_validate_wal_lost_segment_1(self):
|
||||
@ -232,7 +235,7 @@ class ValidateTest(ProbackupTest, unittest.TestCase):
|
||||
self.validate_pb(backup_dir, 'node')
|
||||
self.assertEqual(1, 0, "Expecting Error because of wal segment disappearance.\n Output: {0} \n CMD: {1}".format(
|
||||
repr(self.output), self.cmd))
|
||||
except ProbackupException, e:
|
||||
except ProbackupException as e:
|
||||
self.assertIn('WARNING: WAL segment "{0}" is absent\nERROR: there are not enough WAL records to restore'.format(
|
||||
file), e.message, '\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
|
||||
|
||||
@ -243,10 +246,12 @@ class ValidateTest(ProbackupTest, unittest.TestCase):
|
||||
self.validate_pb(backup_dir, 'node')
|
||||
self.assertEqual(1, 0, "Expecting Error because of backup corruption.\n Output: {0} \n CMD: {1}".format(
|
||||
repr(self.output), self.cmd))
|
||||
except ProbackupException, e:
|
||||
except ProbackupException as e:
|
||||
self.assertIn('INFO: Backup {0} has status CORRUPT. Skip validation.\n'.format(backup_id), e.message,
|
||||
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
|
||||
node.stop()
|
||||
|
||||
# Clean after yourself
|
||||
self.del_test_dir(self.module_name, fname)
|
||||
|
||||
# @unittest.skip("skip")
|
||||
def test_validate_wal_lost_segment_2(self):
|
||||
@ -291,12 +296,14 @@ class ValidateTest(ProbackupTest, unittest.TestCase):
|
||||
backup_id = self.backup_node(backup_dir, 'node', node, backup_type='page')
|
||||
self.assertEqual(1, 0, "Expecting Error because of wal segment disappearance.\n Output: {0} \n CMD: {1}".format(
|
||||
self.output, self.cmd))
|
||||
except ProbackupException, e:
|
||||
self.assertTrue('INFO: wait for LSN'
|
||||
and 'in archived WAL segment'
|
||||
and 'WARNING: could not read WAL record at'
|
||||
except ProbackupException as e:
|
||||
self.assertTrue('INFO: wait for LSN' in e.message
|
||||
and 'in archived WAL segment' in e.message
|
||||
and 'WARNING: could not read WAL record at' in e.message
|
||||
and 'ERROR: WAL segment "{0}" is absent\n'.format(file) in e.message,
|
||||
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd))
|
||||
|
||||
self.assertEqual('ERROR', self.show_pb(backup_dir, 'node')[1]['Status'], 'Backup {0} should have STATUS "ERROR"')
|
||||
node.stop()
|
||||
|
||||
# Clean after yourself
|
||||
self.del_test_dir(self.module_name, fname)
|
||||
|
Reference in New Issue
Block a user