def test_config_stack(self): # no such option with self.assertRaises(TypeError): configure_testgres(dummy=True) # we have only 1 config in stack with self.assertRaises(IndexError): pop_config() d0 = TestgresConfig.cached_initdb_dir d1 = 'dummy_abc' d2 = 'dummy_def' with scoped_config(cached_initdb_dir=d1) as c1: self.assertEqual(c1.cached_initdb_dir, d1) with scoped_config(cached_initdb_dir=d2) as c2: stack_size = len(testgres.config.config_stack) # try to break a stack with self.assertRaises(TypeError): with scoped_config(dummy=True): pass self.assertEqual(c2.cached_initdb_dir, d2) self.assertEqual(len(testgres.config.config_stack), stack_size) self.assertEqual(c1.cached_initdb_dir, d1) self.assertEqual(TestgresConfig.cached_initdb_dir, d0)
def setUpClass(cls): super(AuthTest, cls).setUpClass() cls.pb = ProbackupTest() cls.backup_dir = os.path.join(cls.pb.tmp_path, module_name, 'backup') configure_testgres(cache_pg_config=False, cache_initdb=False) cls.node = cls.pb.make_simple_node( base_dir="{}/node".format(module_name), set_replication=True, initdb_params=['--data-checksums', '--auth-host=md5'], pg_options={'wal_level': 'replica'}) modify_pg_hba(cls.node) cls.backup_dir = os.path.join(tempfile.tempdir, "backups") cls.pb.init_pb(cls.backup_dir) cls.pb.add_instance(cls.backup_dir, cls.node.name, cls.node) cls.pb.set_archiving(cls.backup_dir, cls.node.name, cls.node) try: cls.node.start() except StartNodeException: raise unittest.skip("Node hasn't started") cls.node.safe_psql( "postgres", "CREATE ROLE backup WITH LOGIN PASSWORD 'password'; \ GRANT USAGE ON SCHEMA pg_catalog TO backup; \ GRANT EXECUTE ON FUNCTION current_setting(text) TO backup; \ GRANT EXECUTE ON FUNCTION pg_is_in_recovery() TO backup; \ GRANT EXECUTE ON FUNCTION pg_start_backup(text, boolean, boolean) TO backup; \ GRANT EXECUTE ON FUNCTION pg_stop_backup() TO backup; \ GRANT EXECUTE ON FUNCTION pg_stop_backup(boolean) TO backup; \ GRANT EXECUTE ON FUNCTION pg_create_restore_point(text) TO backup; \ GRANT EXECUTE ON FUNCTION pg_switch_xlog() TO backup; \ GRANT EXECUTE ON FUNCTION txid_current() TO backup; \ GRANT EXECUTE ON FUNCTION txid_current_snapshot() TO backup; \ GRANT EXECUTE ON FUNCTION txid_snapshot_xmax(txid_snapshot) TO backup; \ GRANT EXECUTE ON FUNCTION pg_ptrack_clear() TO backup; \ GRANT EXECUTE ON FUNCTION pg_ptrack_get_and_clear(oid, oid) TO backup;" )
def test_config(self): # set global if it wasn't set configure_testgres(cache_initdb=True, cache_pg_config=True) # check same instances a = get_pg_config() b = get_pg_config() self.assertEqual(id(a), id(b)) # modify setting configure_testgres(cache_pg_config=False) self.assertFalse(TestgresConfig.cache_pg_config) # check different instances a = get_pg_config() b = get_pg_config() self.assertNotEqual(id(a), id(b)) # restore setting configure_testgres(cache_pg_config=True)
def __init__(self, *args, **kwargs): super(ProbackupTest, self).__init__(*args, **kwargs) if '-v' in argv or '--verbose' in argv: self.verbose = True else: self.verbose = False self.test_env = os.environ.copy() envs_list = [ 'LANGUAGE', 'LC_ALL', 'PGCONNECT_TIMEOUT', 'PGDATA', 'PGDATABASE', 'PGHOSTADDR', 'PGREQUIRESSL', 'PGSERVICE', 'PGSSLMODE', 'PGUSER', 'PGPORT', 'PGHOST' ] for e in envs_list: try: del self.test_env[e] except: pass self.test_env['LC_MESSAGES'] = 'C' self.test_env['LC_TIME'] = 'C' self.paranoia = False if 'PG_PROBACKUP_PARANOIA' in self.test_env: if self.test_env['PG_PROBACKUP_PARANOIA'] == 'ON': self.paranoia = True self.archive_compress = False if 'ARCHIVE_COMPRESSION' in self.test_env: if self.test_env['ARCHIVE_COMPRESSION'] == 'ON': self.archive_compress = True try: testgres.configure_testgres(cache_initdb=False, cached_initdb_dir=False, cache_pg_config=False, node_cleanup_full=False) except: pass self.helpers_path = os.path.dirname(os.path.realpath(__file__)) self.dir_path = os.path.abspath( os.path.join(self.helpers_path, os.pardir)) self.tmp_path = os.path.abspath(os.path.join(self.dir_path, 'tmp_dirs')) try: os.makedirs(os.path.join(self.dir_path, 'tmp_dirs')) except: pass self.user = self.get_username() self.probackup_path = None if 'PGPROBACKUPBIN' in self.test_env: if (os.path.isfile(self.test_env["PGPROBACKUPBIN"]) and os.access(self.test_env["PGPROBACKUPBIN"], os.X_OK)): self.probackup_path = self.test_env["PGPROBACKUPBIN"] else: if self.verbose: print('PGPROBACKUPBIN is not an executable file') if not self.probackup_path: probackup_path_tmp = os.path.join( testgres.get_pg_config()['BINDIR'], 'pg_probackup') if os.path.isfile(probackup_path_tmp): if not os.access(probackup_path_tmp, os.X_OK): print('{0} is not an executable file'.format( probackup_path_tmp)) else: self.probackup_path = probackup_path_tmp if not self.probackup_path: probackup_path_tmp = os.path.abspath( os.path.join(self.dir_path, '../pg_probackup')) if os.path.isfile(probackup_path_tmp): if not os.access(probackup_path_tmp, os.X_OK): print('{0} is not an executable file'.format( probackup_path_tmp)) else: self.probackup_path = probackup_path_tmp if not self.probackup_path: print('pg_probackup binary is not found') exit(1) if os.name == 'posix': os.environ['PATH'] = os.path.dirname( self.probackup_path) + ':' + os.environ['PATH'] elif os.name == 'nt': os.environ['PATH'] = os.path.dirname( self.probackup_path) + ';' + os.environ['PATH'] self.probackup_old_path = None if 'PGPROBACKUPBIN_OLD' in self.test_env: if (os.path.isfile(self.test_env['PGPROBACKUPBIN_OLD']) and os.access(self.test_env['PGPROBACKUPBIN_OLD'], os.X_OK)): self.probackup_old_path = self.test_env['PGPROBACKUPBIN_OLD'] else: if self.verbose: print('PGPROBACKUPBIN_OLD is not an executable file')
action='store_true') parser.add_argument("--branch", help="check only one branch", dest='branch', default=None, action='store') parser.add_argument("--bench-time", help="time for pgbench", dest='bench_time', default=60, action='store', type=int) args = parser.parse_args() configure_testgres(cache_initdb=False, cache_pg_config=False, use_python_logging=True) build_dir = rel('build') if not os.path.exists(build_dir): os.mkdir(build_dir) pageprep_dir = rel('..') # make all for key, options in conf.items(): prefix_dir = rel('build', key) if args.branch and key != dest_name and args.branch != key: continue
def __init__(self, *args, **kwargs): super(ProbackupTest, self).__init__(*args, **kwargs) if '-v' in argv or '--verbose' in argv: self.verbose = True else: self.verbose = False self.test_env = os.environ.copy() envs_list = [ "LANGUAGE", "LC_ALL", "PGCONNECT_TIMEOUT", "PGDATA", "PGDATABASE", "PGHOSTADDR", "PGREQUIRESSL", "PGSERVICE", "PGSSLMODE", "PGUSER", "PGPORT", "PGHOST" ] for e in envs_list: try: del self.test_env[e] except: pass self.test_env["LC_MESSAGES"] = "C" self.test_env["LC_TIME"] = "C" self.paranoia = False if 'PG_PROBACKUP_PARANOIA' in self.test_env: if self.test_env['PG_PROBACKUP_PARANOIA'] == 'ON': self.paranoia = True self.archive_compress = False if 'ARCHIVE_COMPRESSION' in self.test_env: if self.test_env['ARCHIVE_COMPRESSION'] == 'ON': self.archive_compress = True try: testgres.configure_testgres(cache_initdb=False, cached_initdb_dir=False, cache_pg_config=False, node_cleanup_full=False) except: pass self.helpers_path = os.path.dirname(os.path.realpath(__file__)) self.dir_path = os.path.abspath( os.path.join(self.helpers_path, os.pardir)) self.tmp_path = os.path.abspath(os.path.join(self.dir_path, 'tmp_dirs')) try: os.makedirs(os.path.join(self.dir_path, 'tmp_dirs')) except: pass self.user = self.get_username() self.probackup_path = None if "PGPROBACKUPBIN" in self.test_env: if (os.path.isfile(self.test_env["PGPROBACKUPBIN"]) and os.access(self.test_env["PGPROBACKUPBIN"], os.X_OK)): self.probackup_path = self.test_env["PGPROBACKUPBIN"] else: if self.verbose: print('PGPROBINDIR is not an executable file') if not self.probackup_path: self.probackup_path = os.path.abspath( os.path.join(self.dir_path, "../pg_probackup"))