Skip to content

Commit 383a1a8

Browse files
author
Ivan Lazarev
committed
[PBCKP-304] cfs tests moved back to build
1 parent ed47e49 commit 383a1a8

File tree

4 files changed

+52
-23
lines changed

4 files changed

+52
-23
lines changed

tests/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ def load_tests(loader, tests, pattern):
3535
suite.addTests(loader.loadTestsFromModule(compatibility))
3636
suite.addTests(loader.loadTestsFromModule(checkdb))
3737
suite.addTests(loader.loadTestsFromModule(config))
38-
# suite.addTests(loader.loadTestsFromModule(cfs_backup))
39-
# suite.addTests(loader.loadTestsFromModule(cfs_restore))
40-
# suite.addTests(loader.loadTestsFromModule(cfs_validate_backup))
38+
suite.addTests(loader.loadTestsFromModule(cfs_backup))
39+
suite.addTests(loader.loadTestsFromModule(cfs_restore))
40+
suite.addTests(loader.loadTestsFromModule(cfs_validate_backup))
4141
suite.addTests(loader.loadTestsFromModule(compression))
4242
suite.addTests(loader.loadTestsFromModule(delete))
4343
suite.addTests(loader.loadTestsFromModule(delta))

tests/cfs_backup.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,22 @@
44
import shutil
55

66
from .helpers.cfs_helpers import find_by_extensions, find_by_name, find_by_pattern, corrupt_file
7-
from .helpers.ptrack_helpers import ProbackupTest, ProbackupException
7+
from .helpers.ptrack_helpers import ProbackupTest, ProbackupException, is_test_result_ok
88

9-
module_name = 'cfs_backup'
109
tblspace_name = 'cfs_tblspace'
1110

1211

1312
class CfsBackupNoEncTest(ProbackupTest, unittest.TestCase):
1413
# --- Begin --- #
1514
@unittest.skipUnless(ProbackupTest.enterprise, 'skip')
1615
def setUp(self):
16+
self.module_name = self.id().split('.')[1]
1717
self.fname = self.id().split('.')[3]
18+
1819
self.backup_dir = os.path.join(
19-
self.tmp_path, module_name, self.fname, 'backup')
20+
self.tmp_path, self.module_name, self.fname, 'backup')
2021
self.node = self.make_simple_node(
21-
base_dir="{0}/{1}/node".format(module_name, self.fname),
22+
base_dir="{0}/{1}/node".format(self.module_name, self.fname),
2223
set_replication=True,
2324
ptrack_enable=True,
2425
initdb_params=['--data-checksums'],
@@ -1159,10 +1160,12 @@ def test_broken_file_pg_compression_into_tablespace_dir(self):
11591160
)
11601161

11611162
# # --- End ---#
1162-
# @unittest.skipUnless(ProbackupTest.enterprise, 'skip')
1163-
# def tearDown(self):
1164-
# self.node.cleanup()
1165-
# self.del_test_dir(module_name, self.fname)
1163+
@unittest.skipUnless(ProbackupTest.enterprise, 'skip')
1164+
def tearDown(self):
1165+
module_name = self.id().split('.')[1]
1166+
fname = self.id().split('.')[3]
1167+
if is_test_result_ok(self):
1168+
self.del_test_dir(module_name, fname)
11661169

11671170

11681171
#class CfsBackupEncTest(CfsBackupNoEncTest):

tests/cfs_restore.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,21 @@
1313
import shutil
1414

1515
from .helpers.cfs_helpers import find_by_name
16-
from .helpers.ptrack_helpers import ProbackupTest, ProbackupException
17-
18-
19-
module_name = 'cfs_restore'
16+
from .helpers.ptrack_helpers import ProbackupTest, ProbackupException, is_test_result_ok
2017

2118
tblspace_name = 'cfs_tblspace'
2219
tblspace_name_new = 'cfs_tblspace_new'
2320

2421

2522
class CfsRestoreBase(ProbackupTest, unittest.TestCase):
2623
def setUp(self):
24+
self.module_name = self.id().split('.')[1]
2725
self.fname = self.id().split('.')[3]
28-
self.backup_dir = os.path.join(self.tmp_path, module_name, self.fname, 'backup')
26+
27+
self.backup_dir = os.path.join(self.tmp_path, self.module_name, self.fname, 'backup')
2928

3029
self.node = self.make_simple_node(
31-
base_dir="{0}/{1}/node".format(module_name, self.fname),
30+
base_dir="{0}/{1}/node".format(self.module_name, self.fname),
3231
set_replication=True,
3332
initdb_params=['--data-checksums'],
3433
pg_options={
@@ -60,9 +59,12 @@ def setUp(self):
6059
def add_data_in_cluster(self):
6160
pass
6261

62+
@unittest.skipUnless(ProbackupTest.enterprise, 'skip')
6363
def tearDown(self):
64-
self.node.cleanup()
65-
self.del_test_dir(module_name, self.fname)
64+
module_name = self.id().split('.')[1]
65+
fname = self.id().split('.')[3]
66+
if is_test_result_ok(self):
67+
self.del_test_dir(module_name, fname)
6668

6769

6870
class CfsRestoreNoencEmptyTablespaceTest(CfsRestoreBase):
@@ -102,8 +104,7 @@ def test_restore_empty_tablespace_from_fullbackup(self):
102104
tblspace = self.node.safe_psql(
103105
"postgres",
104106
"SELECT * FROM pg_tablespace WHERE spcname='{0}'".format(tblspace_name)
105-
)
106-
tblspace = str(tblspace)
107+
).decode("UTF-8")
107108
self.assertTrue(
108109
tblspace_name in tblspace and "compression=true" in tblspace,
109110
"ERROR: The tablespace not restored or it restored without compressions"
@@ -212,7 +213,7 @@ def test_restore_from_fullbackup_to_new_location(self):
212213
self.node.cleanup()
213214
shutil.rmtree(self.get_tblspace_path(self.node, tblspace_name))
214215

215-
node_new = self.make_simple_node(base_dir="{0}/{1}/node_new_location".format(module_name, self.fname))
216+
node_new = self.make_simple_node(base_dir="{0}/{1}/node_new_location".format(self.module_name, self.fname))
216217
node_new.cleanup()
217218

218219
try:
@@ -255,7 +256,7 @@ def test_restore_from_fullbackup_to_new_location_5_jobs(self):
255256
self.node.cleanup()
256257
shutil.rmtree(self.get_tblspace_path(self.node, tblspace_name))
257258

258-
node_new = self.make_simple_node(base_dir="{0}/{1}/node_new_location".format(module_name, self.fname))
259+
node_new = self.make_simple_node(base_dir="{0}/{1}/node_new_location".format(self.module_name, self.fname))
259260
node_new.cleanup()
260261

261262
try:

tests/helpers/ptrack_helpers.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# you need os for unittest to work
22
import os
33
import gc
4+
import unittest
45
from sys import exit, argv, version_info
56
import subprocess
67
import shutil
@@ -172,6 +173,30 @@ def slow_start(self, replica=False):
172173

173174
sleep(0.5)
174175

176+
177+
def is_test_result_ok(test_case):
178+
# sources of solution:
179+
# 1. python versions 2.7 - 3.10, verified on 3.10, 3.7, 2.7, taken from:
180+
# https://tousu.in/qa/?qa=555402/unit-testing-getting-pythons-unittest-results-in-a-teardown-method&show=555403#a555403
181+
#
182+
# 2. python versions 3.11+ mixin, verified on 3.11, taken from: https://stackoverflow.com/a/39606065
183+
184+
if hasattr(test_case, '_outcome'): # Python 3.4+
185+
if hasattr(test_case._outcome, 'errors'):
186+
# Python 3.4 - 3.10 (These two methods have no side effects)
187+
result = test_case.defaultTestResult() # These two methods have no side effects
188+
test_case._feedErrorsToResult(result, test_case._outcome.errors)
189+
else:
190+
# Python 3.11+
191+
result = test_case._outcome.result
192+
else: # Python 2.7, 3.0-3.3
193+
result = getattr(test_case, '_outcomeForDoCleanups', test_case._resultForDoCleanups)
194+
195+
ok = all(test != test_case for test, text in result.errors + result.failures)
196+
197+
return ok
198+
199+
175200
class ProbackupTest(object):
176201
# Class attributes
177202
enterprise = is_enterprise()

0 commit comments

Comments
 (0)