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 test_pg_config(self): # check same instances a = get_pg_config() b = get_pg_config() self.assertEqual(id(a), id(b)) # save right before config change c1 = get_pg_config() # modify setting for this scope with scoped_config(cache_pg_config=False) as config: # sanity check for value self.assertFalse(config.cache_pg_config) # save right after config change c2 = get_pg_config() # check different instances after config change self.assertNotEqual(id(c1), id(c2)) # check different instances a = get_pg_config() b = get_pg_config() self.assertNotEqual(id(a), id(b))
def test_logging(self): logfile = tempfile.NamedTemporaryFile('w', delete=True) log_conf = { 'version': 1, 'handlers': { 'file': { 'class': 'logging.FileHandler', 'filename': logfile.name, 'formatter': 'base_format', 'level': logging.DEBUG, }, }, 'formatters': { 'base_format': { 'format': '%(node)-5s: %(message)s', }, }, 'root': { 'handlers': ('file', ), 'level': 'DEBUG', }, } logging.config.dictConfig(log_conf) with scoped_config(use_python_logging=True): node_name = 'master' with get_new_node(name=node_name) as master: master.init().start() # execute a dummy query a few times for i in range(20): master.execute('select 1') time.sleep(0.01) # let logging worker do the job time.sleep(0.1) # check that master's port is found with open(logfile.name, 'r') as log: lines = log.readlines() self.assertTrue(any(node_name in s for s in lines)) # test logger after stop/start/restart master.stop() master.start() master.restart() self.assertTrue(master._logger.is_alive())
def test_init_unique_system_id(self): # this function exists in PostgreSQL 9.6+ query = 'select system_identifier from pg_control_system()' with scoped_config(cache_initdb=False): with get_new_node().init().start() as node0: id0 = node0.execute(query)[0] with scoped_config(cache_initdb=True, cached_initdb_unique=True) as config: self.assertTrue(config.cache_initdb) self.assertTrue(config.cached_initdb_unique) # spawn two nodes; ids must be different with get_new_node().init().start() as node1, \ get_new_node().init().start() as node2: id1 = node1.execute(query)[0] id2 = node2.execute(query)[0] # ids must increase self.assertGreater(id1, id0) self.assertGreater(id2, id1)