Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 05e1ec1

Browse files
committed
tests: added backup.BackupTest.test_backup_with_less_privileges_role
1 parent f6cd14e commit 05e1ec1

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed

tests/backup.py

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1883,3 +1883,157 @@ def test_parent_choosing_2(self):
18831883

18841884
# Clean after yourself
18851885
self.del_test_dir(module_name, fname)
1886+
1887+
# @unittest.skip("skip")
1888+
def test_backup_with_less_privileges_role(self):
1889+
"""
1890+
check permissions correctness from documentation:
1891+
https://github.com/postgrespro/pg_probackup/blob/master/Documentation.md#configuring-the-database-cluster
1892+
"""
1893+
fname = self.id().split('.')[3]
1894+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
1895+
node = self.make_simple_node(
1896+
base_dir=os.path.join(module_name, fname, 'node'),
1897+
set_replication=True,
1898+
initdb_params=['--data-checksums'],
1899+
pg_options={
1900+
'archive_timeout': '30s',
1901+
'checkpoint_timeout': '30s'})
1902+
1903+
if self.ptrack:
1904+
node.append_conf('postgresql.auto.conf', 'ptrack_enable = on')
1905+
1906+
self.init_pb(backup_dir)
1907+
self.add_instance(backup_dir, 'node', node)
1908+
self.set_archiving(backup_dir, 'node', node)
1909+
node.slow_start()
1910+
1911+
node.safe_psql(
1912+
'postgres',
1913+
'CREATE DATABASE backupdb')
1914+
1915+
# PG 9.5
1916+
if self.get_version(node) < 90600:
1917+
node.safe_psql(
1918+
'backupdb',
1919+
"BEGIN; "
1920+
"CREATE ROLE backup WITH LOGIN; "
1921+
"GRANT USAGE ON SCHEMA pg_catalog TO backup; "
1922+
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
1923+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
1924+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean) TO backup; "
1925+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup; "
1926+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup; "
1927+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_xlog() TO backup; "
1928+
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup; "
1929+
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; "
1930+
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup; "
1931+
"COMMIT;"
1932+
)
1933+
# PG 9.6
1934+
elif self.get_version(node) > 90600 and self.get_version(node) < 100000:
1935+
node.safe_psql(
1936+
'backupdb',
1937+
"BEGIN; "
1938+
"CREATE ROLE backup WITH LOGIN; "
1939+
"GRANT USAGE ON SCHEMA pg_catalog TO backup; "
1940+
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
1941+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
1942+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
1943+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean) TO backup; "
1944+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup; "
1945+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_xlog() TO backup; "
1946+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_xlog_replay_location() TO backup; "
1947+
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup; "
1948+
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; "
1949+
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup; "
1950+
"COMMIT;"
1951+
)
1952+
# >= 10
1953+
else:
1954+
node.safe_psql(
1955+
'backupdb',
1956+
"BEGIN; "
1957+
"CREATE ROLE backup WITH LOGIN; "
1958+
"GRANT USAGE ON SCHEMA pg_catalog TO backup; "
1959+
"GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; "
1960+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; "
1961+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; "
1962+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO backup; "
1963+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup; "
1964+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO backup; "
1965+
"GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO backup; "
1966+
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup; "
1967+
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; "
1968+
"GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup; "
1969+
"COMMIT;"
1970+
)
1971+
1972+
# enable STREAM backup
1973+
node.safe_psql(
1974+
'backupdb',
1975+
'ALTER ROLE backup WITH REPLICATION;')
1976+
1977+
# FULL backup
1978+
self.backup_node(
1979+
backup_dir, 'node', node,
1980+
datname='backupdb', options=['--stream', '-U', 'backup'])
1981+
self.backup_node(
1982+
backup_dir, 'node', node,
1983+
datname='backupdb', options=['-U', 'backup'])
1984+
1985+
# PAGE
1986+
self.backup_node(
1987+
backup_dir, 'node', node, backup_type='page',
1988+
datname='backupdb', options=['-U', 'backup'])
1989+
self.backup_node(
1990+
backup_dir, 'node', node, backup_type='page', datname='backupdb',
1991+
options=['--stream', '-U', 'backup'])
1992+
1993+
# DELTA
1994+
self.backup_node(
1995+
backup_dir, 'node', node, backup_type='delta',
1996+
datname='backupdb', options=['-U', 'backup'])
1997+
self.backup_node(
1998+
backup_dir, 'node', node, backup_type='delta',
1999+
datname='backupdb', options=['--stream', '-U', 'backup'])
2000+
2001+
# Restore as replica
2002+
replica = self.make_simple_node(
2003+
base_dir=os.path.join(module_name, fname, 'replica'))
2004+
replica.cleanup()
2005+
2006+
self.restore_node(backup_dir, 'node', replica)
2007+
self.set_replica(node, replica)
2008+
self.add_instance(backup_dir, 'replica', replica)
2009+
self.set_archiving(backup_dir, 'replica', replica, replica=True)
2010+
2011+
replica.slow_start(replica=True)
2012+
2013+
# FULL backup from replica
2014+
self.backup_node(
2015+
backup_dir, 'replica', replica,
2016+
datname='backupdb', options=['--stream', '-U', 'backup'])
2017+
2018+
self.backup_node(
2019+
backup_dir, 'replica', replica, datname='backupdb',
2020+
options=['-U', 'backup', '--log-level-file=verbose'])
2021+
2022+
# PAGE
2023+
self.backup_node(
2024+
backup_dir, 'replica', replica, backup_type='page',
2025+
datname='backupdb', options=['-U', 'backup'])
2026+
self.backup_node(
2027+
backup_dir, 'replica', replica, backup_type='page',
2028+
datname='backupdb', options=['--stream', '-U', 'backup'])
2029+
2030+
# DELTA
2031+
self.backup_node(
2032+
backup_dir, 'replica', replica, backup_type='delta',
2033+
datname='backupdb', options=['-U', 'backup'])
2034+
self.backup_node(
2035+
backup_dir, 'replica', replica, backup_type='delta',
2036+
datname='backupdb', options=['--stream', '-U', 'backup'])
2037+
2038+
# Clean after yourself
2039+
self.del_test_dir(module_name, fname)

0 commit comments

Comments
 (0)