From 535e417ba806d78ad6b6055e627a39ef91ca5c80 Mon Sep 17 00:00:00 2001 From: Grigory Smolkin Date: Mon, 5 Aug 2019 23:35:51 +0300 Subject: [PATCH] tests: added retention.RetentionTest.test_agressive_retention_window_purge --- tests/retention.py | 48 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/tests/retention.py b/tests/retention.py index beb4c288..6e13b21e 100644 --- a/tests/retention.py +++ b/tests/retention.py @@ -1,7 +1,7 @@ import os import unittest from datetime import datetime, timedelta -from .helpers.ptrack_helpers import ProbackupTest +from .helpers.ptrack_helpers import ProbackupTest, ProbackupException from time import sleep @@ -1459,3 +1459,49 @@ class RetentionTest(ProbackupTest, unittest.TestCase): # Clean after yourself self.del_test_dir(module_name, fname) + + def test_agressive_retention_window_purge(self): + """ + https://github.com/postgrespro/pg_probackup/issues/106 + """ + fname = self.id().split('.')[3] + node = self.make_simple_node( + base_dir=os.path.join(module_name, fname, 'node'), + initdb_params=['--data-checksums']) + + backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup') + self.init_pb(backup_dir) + self.add_instance(backup_dir, 'node', node) + node.slow_start() + + # Make ERROR incremental backup + try: + self.backup_node(backup_dir, 'node', node, backup_type='page') + # we should die here because exception is what we expect to happen + self.assertEqual( + 1, 0, + "Expecting Error because page backup should not be possible " + "without valid full backup.\n Output: {0} \n CMD: {1}".format( + repr(self.output), self.cmd)) + except ProbackupException as e: + self.assertIn( + "ERROR: Valid backup on current timeline 1 is not found. " + "Create new FULL backup before an incremental one.", + e.message, + "\n Unexpected Error Message: {0}\n CMD: {1}".format( + repr(e.message), self.cmd)) + + page_id = self.show_pb(backup_dir, 'node')[0]['id'] + + sleep(1) + + # Make FULL backup + self.backup_node( + backup_dir, 'node', node, + options=['--delete-expired', '--retention-window=1', '--stream']) + + # Check number of backups + self.assertEqual(len(self.show_pb(backup_dir, 'node')), 2) + + # Clean after yourself + self.del_test_dir(module_name, fname)