def test_readconf(self): conf = '''[section1] foo = bar [section2] log_name = yarr''' # setup a real file with open('/tmp/test', 'wb') as f: f.write(conf) make_filename = lambda: '/tmp/test' # setup a file stream make_fp = lambda: StringIO(conf) for conf_object_maker in (make_filename, make_fp): conffile = conf_object_maker() result = utils.readconf(conffile) expected = { '__file__': conffile, 'log_name': None, 'section1': { 'foo': 'bar' }, 'section2': { 'log_name': 'yarr' } } self.assertEquals(result, expected) conffile = conf_object_maker() result = utils.readconf(conffile, 'section1') expected = { '__file__': conffile, 'log_name': 'section1', 'foo': 'bar' } self.assertEquals(result, expected) conffile = conf_object_maker() result = utils.readconf(conffile, 'section2').get('log_name') expected = 'yarr' self.assertEquals(result, expected) conffile = conf_object_maker() result = utils.readconf(conffile, 'section1', log_name='foo').get('log_name') expected = 'foo' self.assertEquals(result, expected) conffile = conf_object_maker() result = utils.readconf(conffile, 'section1', defaults={'bar': 'baz'}) expected = { '__file__': conffile, 'log_name': 'section1', 'foo': 'bar', 'bar': 'baz' } self.assertEquals(result, expected) self.assertRaises(SystemExit, utils.readconf, '/tmp/test', 'section3') os.unlink('/tmp/test') self.assertRaises(SystemExit, utils.readconf, '/tmp/test')
def run_daemon(klass, conf_file, section_name='', once=False, **kwargs): """ Loads settings from conf, then instantiates daemon "klass" and runs the daemon with the specified once kwarg. The section_name will be derived from the daemon "klass" if not provided (e.g. ObjectReplicator => object-replicator). :param klass: Class to instantiate, subclass of common.daemon.Daemon :param conf_file: Path to configuration file :param section_name: Section name from conf file to load config from :param once: Passed to daemon run method """ # very often the config section_name is based on the class name # the None singleton will be passed through to readconf as is if section_name is '': section_name = sub(r'([a-z])([A-Z])', r'\1-\2', klass.__name__).lower() conf = utils.readconf(conf_file, section_name, log_name=kwargs.get('log_name')) # once on command line (i.e. daemonize=false) will over-ride config once = once or \ conf.get('daemonize', 'true').lower() not in utils.TRUE_VALUES # pre-configure logger if 'logger' in kwargs: logger = kwargs.pop('logger') else: logger = utils.get_logger(conf, conf.get('log_name', section_name), log_to_console=kwargs.pop('verbose', False), log_route=section_name) try: klass(conf).run(once=once, **kwargs) except KeyboardInterrupt: logger.info('User quit') logger.info('Exited')
def test_readconf_raw(self): conf = '''[section1] foo = bar [section2] log_name = %(yarr)s''' # setup a real file with open('/tmp/test', 'wb') as f: f.write(conf) make_filename = lambda: '/tmp/test' # setup a file stream make_fp = lambda: StringIO(conf) for conf_object_maker in (make_filename, make_fp): conffile = conf_object_maker() result = utils.readconf(conffile, raw=True) expected = { '__file__': conffile, 'log_name': None, 'section1': { 'foo': 'bar' }, 'section2': { 'log_name': '%(yarr)s' } } self.assertEquals(result, expected) os.unlink('/tmp/test') self.assertRaises(SystemExit, utils.readconf, '/tmp/test')
def get_config(): """ Attempt to get a functional config dictionary. """ config_file = os.environ.get('CHASE_TEST_CONFIG_FILE', '/etc/chase/func_test.conf') config = {} try: try: config = readconf(config_file, 'func_test') except MissingSectionHeaderError: config_fp = StringIO('[func_test]\n' + open(config_file).read()) config = readconf(config_fp, 'func_test') except SystemExit: print >> sys.stderr, 'UNABLE TO READ FUNCTIONAL TESTS CONFIG FILE' return config
def get_config(): """ Attempt to get a functional config dictionary. """ config_file = os.environ.get('CHASE_TEST_CONFIG_FILE', '/etc/chase/func_test.conf') config = {} try: try: config = readconf(config_file, 'func_test') except MissingSectionHeaderError: config_fp = StringIO('[func_test]\n' + open(config_file).read()) config = readconf(config_fp, 'func_test') except SystemExit: print >>sys.stderr, 'UNABLE TO READ FUNCTIONAL TESTS CONFIG FILE' return config
def test_readconf(self): conf = '''[section1] foo = bar [section2] log_name = yarr''' # setup a real file with open('/tmp/test', 'wb') as f: f.write(conf) make_filename = lambda: '/tmp/test' # setup a file stream make_fp = lambda: StringIO(conf) for conf_object_maker in (make_filename, make_fp): conffile = conf_object_maker() result = utils.readconf(conffile) expected = {'__file__': conffile, 'log_name': None, 'section1': {'foo': 'bar'}, 'section2': {'log_name': 'yarr'}} self.assertEquals(result, expected) conffile = conf_object_maker() result = utils.readconf(conffile, 'section1') expected = {'__file__': conffile, 'log_name': 'section1', 'foo': 'bar'} self.assertEquals(result, expected) conffile = conf_object_maker() result = utils.readconf(conffile, 'section2').get('log_name') expected = 'yarr' self.assertEquals(result, expected) conffile = conf_object_maker() result = utils.readconf(conffile, 'section1', log_name='foo').get('log_name') expected = 'foo' self.assertEquals(result, expected) conffile = conf_object_maker() result = utils.readconf(conffile, 'section1', defaults={'bar': 'baz'}) expected = {'__file__': conffile, 'log_name': 'section1', 'foo': 'bar', 'bar': 'baz'} self.assertEquals(result, expected) self.assertRaises(SystemExit, utils.readconf, '/tmp/test', 'section3') os.unlink('/tmp/test') self.assertRaises(SystemExit, utils.readconf, '/tmp/test')
def _setup_data_file(self, container, obj, data): client.put_container(self.url, self.token, container) client.put_object(self.url, self.token, container, obj, data) odata = client.get_object(self.url, self.token, container, obj)[-1] self.assertEquals(odata, data) opart, onodes = self.object_ring.get_nodes(self.account, container, obj) onode = onodes[0] node_id = (onode["port"] - 6000) / 10 device = onode["device"] hash_str = hash_path(self.account, container, obj) obj_server_conf = readconf("/etc/chase/object-server/%s.conf" % node_id) devices = obj_server_conf["app:object-server"]["devices"] obj_dir = "%s/%s/objects/%s/%s/%s/" % (devices, device, opart, hash_str[-3:], hash_str) data_file = self._get_data_file_path(obj_dir) return onode, opart, data_file
def _get_container_db_files(self, container): opart, onodes = self.container_ring.get_nodes(self.account, container) onode = onodes[0] db_files = [] for onode in onodes: node_id = (onode['port'] - 6000) / 10 device = onode['device'] hash_str = hash_path(self.account, container) server_conf = readconf('/etc/chase/container-server/%s.conf' % node_id) devices = server_conf['app:container-server']['devices'] obj_dir = '%s/%s/containers/%s/%s/%s/' % (devices, device, opart, hash_str[-3:], hash_str) db_files.append(self._get_db_file_path(obj_dir)) return db_files
def _setup_data_file(self, container, obj, data): client.put_container(self.url, self.token, container) client.put_object(self.url, self.token, container, obj, data) odata = client.get_object(self.url, self.token, container, obj)[-1] self.assertEquals(odata, data) opart, onodes = self.object_ring.get_nodes(self.account, container, obj) onode = onodes[0] node_id = (onode['port'] - 6000) / 10 device = onode['device'] hash_str = hash_path(self.account, container, obj) obj_server_conf = readconf('/etc/chase/object-server/%s.conf' % node_id) devices = obj_server_conf['app:object-server']['devices'] obj_dir = '%s/%s/objects/%s/%s/%s/' % (devices, device, opart, hash_str[-3:], hash_str) data_file = self._get_data_file_path(obj_dir) return onode, opart, data_file
def test_readconf_raw(self): conf = '''[section1] foo = bar [section2] log_name = %(yarr)s''' # setup a real file with open('/tmp/test', 'wb') as f: f.write(conf) make_filename = lambda: '/tmp/test' # setup a file stream make_fp = lambda: StringIO(conf) for conf_object_maker in (make_filename, make_fp): conffile = conf_object_maker() result = utils.readconf(conffile, raw=True) expected = {'__file__': conffile, 'log_name': None, 'section1': {'foo': 'bar'}, 'section2': {'log_name': '%(yarr)s'}} self.assertEquals(result, expected) os.unlink('/tmp/test') self.assertRaises(SystemExit, utils.readconf, '/tmp/test')