def test_daemon_ctor_dmonurl(self): conf = { 'ctors': [ ('thing0', 'synapse.tests.test_daemon.Blah', { 'lulz': 'hehe' }), ('thing1', 'test:check:blah', {}), ], } self.raises(NoSuchName, s_telepath.openurl, 'dmon://thing0') with s_daemon.Daemon() as dmon: def checkblah(conf): self.eq(dmon.locs.get('thing0'), s_telepath.openurl('dmon://thing0')) self.raises(NoSuchName, s_telepath.openurl, 'dmon://newp0/') return 1 s_dyndeps.addDynAlias('test:check:blah', checkblah) dmon.loadDmonConf(conf) s_dyndeps.delDynAlias('test:check:blah')
def test_webapp_dmon(self): class FooServer(s_webapp.WebApp): def __init__(self, core): s_webapp.WebApp.__init__(self, **{}) self.core = core s_dyndeps.addDynAlias('FooServer', FooServer) with s_daemon.Daemon() as core_dmon: with self.getRamCore() as core: core_dmon.share('core', core) link = core_dmon.listen('tcp://127.0.0.1:0/') linkurl = 'tcp://127.0.0.1:%d/core' % link[1]['port'] with s_daemon.Daemon() as dmon: config = { 'vars': { 'linkurl': linkurl, }, 'ctors': [ ('core', 'ctor://synapse.cortex.openurl(linkurl)'), ('webapp', 'ctor://FooServer(core)') ] } dmon.loadDmonConf(config)
def test_dyndeps_alias(self): s_dyndeps.addDynAlias('unit_test_woot', woot) self.eq(s_dyndeps.getDynLocal('unit_test_woot'), woot) self.eq(s_dyndeps.tryDynFunc('unit_test_woot', 20, y=40), 60) self.eq(s_dyndeps.delDynAlias('unit_test_woot'), woot) self.none(s_dyndeps.getDynLocal('unit_test_woot')) self.raises(NoSuchDyn, s_dyndeps.tryDynFunc, 'unit_test_woot', 20, y=40)
def test_daemon_ctor_nonurl(self): s_dyndeps.addDynAlias('test:blah', Blah) conf = { 'ctors': (('foo', 'test:blah', { 'lulz': 'rofl' }), ), } with s_daemon.Daemon() as dmon: dmon.loadDmonConf(conf) item = dmon.locs.get('foo') self.eq(item.woot.get('lulz'), 'rofl') s_dyndeps.delDynAlias('test:blah')
def _fs_isfile(mode): try: return stat.S_ISREG(mode) except: return False @staticmethod def _fs_new_file_attrs(parent, mode): now = int(time.time()) return {'st_ctime': now, 'st_mtime': now, 'st_atime': now, 'st_nlink': 1, 'st_size': 0, 'st_mode': (stat.S_IFREG | mode), 'dir': parent} @staticmethod def _fs_new_dir_attrs(parent, mode): now = int(time.time()) return {'st_ctime': now, 'st_mtime': now, 'st_atime': now, 'st_nlink': 2, 'st_mode': (stat.S_IFDIR | mode), 'dir': parent} def _ctor_axon(opts): ''' A function to allow terse/clean construction of an axon from a dmon ctor. ''' datadir = opts.pop('datadir', None) if datadir is None: raise s_common.BadInfoValu(name='datadir', valu=None, mesg='axon ctor requires "datadir":<path> option') return Axon(datadir, **opts) s_dyndeps.addDynAlias('syn:axon', _ctor_axon)
def choptag(tag): ''' Chop a tag into hierarchal levels. ''' parts = tag.split('.') return ['.'.join(parts[:x + 1]) for x in range(len(parts))] def _ctor_cortex(conf): url = conf.pop('url', None) if url is None: raise s_common.BadInfoValu(name='url', valu=None, mesg='cortex ctor requires "url":<url> option') core = openurl(url) core.setConfOpts(conf) return core s_dyndeps.addDynAlias('syn:cortex', _ctor_cortex) if __name__ == '__main__': # pragma: no cover import sys import synapse.lib.cmdr as s_cmdr core = openurl(sys.argv[1]) cmdr = s_cmdr.getItemCmdr(core) cmdr.runCmdLoop()