|
10 | 10 |
|
11 | 11 | class FalsePositive(ProbackupTest, unittest.TestCase):
|
12 | 12 |
|
13 |
| - # @unittest.skip("skip") |
14 |
| - # @unittest.expectedFailure |
15 |
| - def test_pgpro561(self): |
16 |
| - """ |
17 |
| - make node with archiving, make stream backup, restore it to node1, |
18 |
| - check that archiving is not successful on node1 |
19 |
| - """ |
20 |
| - fname = self.id().split('.')[3] |
21 |
| - node1 = self.make_simple_node(base_dir="{0}/{1}/node1".format(module_name, fname), |
22 |
| - set_replication=True, |
23 |
| - initdb_params=['--data-checksums'], |
24 |
| - pg_options={'wal_level': 'replica', 'max_wal_senders': '2'} |
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, 'node1', node1) |
29 |
| - self.set_archiving(backup_dir, 'node1', node1) |
30 |
| - node1.start() |
31 |
| - |
32 |
| - backup_id = self.backup_node(backup_dir, 'node1', node1, options=["--stream"]) |
33 |
| - |
34 |
| - node2 = self.make_simple_node(base_dir="{0}/{1}/node2".format(module_name, fname)) |
35 |
| - node2.cleanup() |
36 |
| - |
37 |
| - node1.psql( |
38 |
| - "postgres", |
39 |
| - "create table t_heap as select i as id, md5(i::text) as text, md5(repeat(i::text,10))::tsvector as tsvector from generate_series(0,256) i") |
40 |
| - |
41 |
| - self.backup_node(backup_dir, 'node1', node1, backup_type='page', options=["--stream"]) |
42 |
| - self.restore_node(backup_dir, 'node1', data_dir=node2.data_dir) |
43 |
| - node2.append_conf('postgresql.auto.conf', 'port = {0}'.format(node2.port)) |
44 |
| - node2.start({"-t": "600"}) |
45 |
| - |
46 |
| - timeline_node1 = node1.get_control_data()["Latest checkpoint's TimeLineID"] |
47 |
| - timeline_node2 = node2.get_control_data()["Latest checkpoint's TimeLineID"] |
48 |
| - self.assertEqual(timeline_node1, timeline_node2, "Timelines on Master and Node1 should be equal. This is unexpected") |
49 |
| - |
50 |
| - archive_command_node1 = node1.safe_psql("postgres", "show archive_command") |
51 |
| - archive_command_node2 = node2.safe_psql("postgres", "show archive_command") |
52 |
| - self.assertEqual(archive_command_node1, archive_command_node2, "Archive command on Master and Node should be equal. This is unexpected") |
53 |
| - |
54 |
| - result = node2.safe_psql("postgres", "select last_failed_wal from pg_stat_get_archiver() where last_failed_wal is not NULL") |
55 |
| - # self.assertEqual(res, six.b(""), 'Restored Node1 failed to archive segment {0} due to having the same archive command as Master'.format(res.rstrip())) |
56 |
| - if result == "": |
57 |
| - self.assertEqual(1, 0, 'Error is expected due to Master and Node1 having the common archive and archive_command') |
58 |
| - |
59 |
| - # Clean after yourself |
60 |
| - self.del_test_dir(module_name, fname) |
61 |
| - |
62 |
| - # @unittest.skip("skip") |
63 |
| - def pgpro688(self): |
64 |
| - """make node with archiving, make backup, get Recovery Time, validate to Recovery Time. Waiting PGPRO-688. RESOLVED""" |
65 |
| - fname = self.id().split('.')[3] |
66 |
| - node = self.make_simple_node(base_dir="{0}/{1}/node".format(module_name, fname), |
67 |
| - set_replication=True, |
68 |
| - initdb_params=['--data-checksums'], |
69 |
| - pg_options={'wal_level': 'replica', 'max_wal_senders': '2'} |
70 |
| - ) |
71 |
| - backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup') |
72 |
| - self.init_pb(backup_dir) |
73 |
| - self.add_instance(backup_dir, 'node', node) |
74 |
| - self.set_archiving(backup_dir, 'node', node) |
75 |
| - node.start() |
76 |
| - |
77 |
| - backup_id = self.backup_node(backup_dir, 'node', node) |
78 |
| - recovery_time = self.show_pb(backup_dir, 'node', backup_id)['recovery-time'] |
79 |
| - |
80 |
| - # Uncommenting this section will make this test True Positive |
81 |
| - #node.safe_psql("postgres", "select pg_create_restore_point('123')") |
82 |
| - #node.safe_psql("postgres", "select txid_current()") |
83 |
| - #node.safe_psql("postgres", "select pg_switch_xlog()") |
84 |
| - #### |
85 |
| - |
86 |
| - #try: |
87 |
| - self.validate_pb(backup_dir, 'node', options=["--time='{0}'".format(recovery_time)]) |
88 |
| - # we should die here because exception is what we expect to happen |
89 |
| - # self.assertEqual(1, 0, "Expecting Error because it should not be possible safely validate 'Recovery Time' without wal record with timestamp.\n Output: {0} \n CMD: {1}".format( |
90 |
| - # repr(self.output), self.cmd)) |
91 |
| - # except ProbackupException as e: |
92 |
| - # self.assertTrue('WARNING: recovery can be done up to time {0}'.format(recovery_time) in e.message, |
93 |
| - # '\n Unexpected Error Message: {0}\n CMD: {1}'.format(repr(e.message), self.cmd)) |
94 |
| - |
95 |
| - # Clean after yourself |
96 |
| - self.del_test_dir(module_name, fname) |
97 |
| - |
98 |
| - # @unittest.skip("skip") |
99 |
| - def pgpro702_688(self): |
100 |
| - """make node without archiving, make stream backup, get Recovery Time, validate to Recovery Time""" |
101 |
| - fname = self.id().split('.')[3] |
102 |
| - node = self.make_simple_node(base_dir="{0}/{1}/node".format(module_name, fname), |
103 |
| - set_replication=True, |
104 |
| - initdb_params=['--data-checksums'], |
105 |
| - pg_options={'wal_level': 'replica', 'max_wal_senders': '2'} |
106 |
| - ) |
107 |
| - backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup') |
108 |
| - self.init_pb(backup_dir) |
109 |
| - self.add_instance(backup_dir, 'node', node) |
110 |
| - node.start() |
111 |
| - |
112 |
| - backup_id = self.backup_node(backup_dir, 'node', node, options=["--stream"]) |
113 |
| - recovery_time = self.show_pb(backup_dir, 'node', backup_id)['recovery-time'] |
114 |
| - |
115 |
| - self.assertIn(six.b("INFO: backup validation completed successfully on"), |
116 |
| - self.validate_pb(backup_dir, 'node', node, options=["--time='{0}'".format(recovery_time)])) |
117 |
| - |
118 |
| - # Clean after yourself |
119 |
| - self.del_test_dir(module_name, fname) |
120 |
| - |
121 | 13 | # @unittest.skip("skip")
|
122 | 14 | @unittest.expectedFailure
|
123 | 15 | def test_validate_wal_lost_segment(self):
|
|
0 commit comments