示例#1
0
    def test_daemon_on(self):

        class Foo:
            def bar(self):
                return 'baz'

        dmon = s_daemon.Daemon()
        link = dmon.listen('tcp://127.0.0.1:0/')

        bus = s_eventbus.EventBus()
        foo = Foo()

        dmon.share('bus', bus)
        dmon.share('foo', foo)

        port = link[1].get('port')

        bprox = s_telepath.openurl('tcp://127.0.0.1/bus', port=port)
        fprox = s_telepath.openurl('tcp://127.0.0.1/foo', port=port)

        evt = threading.Event()
        def woot(mesg):
            evt.set()

        bprox.on('woot', woot)
        fprox.on('woot', woot)

        bus.fire('woot')

        evt.wait(timeout=2)

        fprox.off('woot', woot)

        self.true(evt.is_set())
示例#2
0
    def test_daemon_on(self):
        class Foo:
            def bar(self):
                return "baz"

        dmon = s_daemon.Daemon()
        link = dmon.listen("tcp://127.0.0.1:0/")

        bus = s_eventbus.EventBus()
        foo = Foo()

        dmon.share("bus", bus)
        dmon.share("foo", foo)

        port = link[1].get("port")

        bprox = s_telepath.openurl("tcp://127.0.0.1/bus", port=port)
        fprox = s_telepath.openurl("tcp://127.0.0.1/foo", port=port)

        evt = threading.Event()

        def woot(mesg):
            evt.set()

        bprox.on("woot", woot)
        fprox.on("woot", woot)

        bus.fire("woot")

        evt.wait(timeout=2)

        fprox.off("woot", woot)

        self.assertTrue(evt.is_set())
示例#3
0
    def test_telepath_push(self):

        # override default timeout=None for tests
        with s_scope.enter({'syntimeout': 3}):

            env = self.getFooEnv()

            port = env.link[1].get('port')

            prox0 = s_telepath.openurl('tcp://127.0.0.1/',
                                       port=port)  # type: s_telepath.Proxy

            prox0.push('foo1', Foo())

            prox1 = s_telepath.openurl('tcp://127.0.0.1/foo1',
                                       port=port)  # type: s_telepath.Proxy

            self.eq(prox1.bar(10, 20), 30)

            wait0 = env.dmon.waiter(1, 'tele:push:fini')

            prox0.fini()

            self.nn(wait0.wait(timeout=2))

            self.raises(NoSuchObj, prox1.bar, 10, 20)

            prox1.fini()

            env.fini()
示例#4
0
    def test_telepath_events(self):
        with s_daemon.Daemon() as dmon:
            with s_service.SvcBus() as sbus:
                urlt = 'tcp://127.0.0.1:%d'
                url = urlt % (0)
                link = dmon.listen(url)
                port = link[1].get('port')
                url = urlt % (port)
                dmon.share('sbus', sbus)
                proxy0 = s_telepath.openurl(url + '/sbus')
                proxy1 = s_telepath.openurl(url + '/sbus')
                counters = [0, 0]

                def count(offset):
                    def on(*args, **kwargs):
                        counters[offset] += 1

                    return on

                proxy0.on('tufo:tag:add', count(0))
                proxy1.on('tufo:tag:add', count(1))
                wait = s_eventbus.Waiter(proxy1, 1, 'tufo:tag:add')
                proxy0.fire('tufo:tag:add',
                            tag='tagu',
                            tufo=('iden', {
                                'prop': 'valu'
                            }))
                wait.wait()
                self.assertEqual(counters[0], 1)
                self.assertEqual(counters[1], 1)
示例#5
0
    def test_daemon_on(self):

        class Foo:
            def bar(self):
                return 'baz'

        dmon = s_daemon.Daemon()
        link = dmon.listen('tcp://127.0.0.1:0/')

        bus = s_eventbus.EventBus()
        foo = Foo()

        dmon.share('bus', bus)
        dmon.share('foo', foo)

        port = link[1].get('port')

        bprox = s_telepath.openurl('tcp://127.0.0.1/bus', port=port)
        fprox = s_telepath.openurl('tcp://127.0.0.1/foo', port=port)

        evt = threading.Event()
        def woot(mesg):
            evt.set()

        bprox.on('woot', woot)
        fprox.on('woot', woot)

        bus.fire('woot')

        evt.wait(timeout=2)

        fprox.off('woot', woot)

        self.assertTrue( evt.is_set() )
示例#6
0
    def test_telepath_events(self):
        with s_daemon.Daemon() as dmon:
            with s_service.SvcBus() as sbus:
                urlt = 'tcp://127.0.0.1:%d'
                url = urlt % (0)
                link = dmon.listen(url)
                port = link[1].get('port')
                url = urlt % (port)
                dmon.share('sbus', sbus)
                proxy0 = s_telepath.openurl(url + '/sbus')
                proxy1 = s_telepath.openurl(url + '/sbus')

                counters = collections.defaultdict(int)

                def count(name):
                    def onmesg(mesg):
                        counters[name] += 1
                    return onmesg

                proxy0.on('foo:bar', count('p0'))
                proxy1.on('foo:bar', count('p1'))

                func = count('f0')
                proxy1.on('foo:bar', func, tag='hehe')

                wait = proxy1.waiter(1, 'foo:bar')
                proxy0.fire('foo:bar', tag='tagu', tufo=('iden', {'prop': 'valu'}))
                self.nn(wait.wait(timeout=2))

                self.eq(counters['p0'], 1)
                self.eq(counters['p1'], 1)
                self.eq(counters['f0'], 0)

                wait = proxy1.waiter(1, 'foo:bar')
                proxy0.fire('foo:bar', tag='hehe', tufo=('iden', {'prop': 'valu'}))
                self.nn(wait.wait(timeout=2))

                self.eq(counters['p0'], 2)
                self.eq(counters['p1'], 2)
                self.eq(counters['f0'], 1)

                proxy1.off('foo:bar', func)

                wait = proxy1.waiter(1, 'foo:bar')
                proxy0.fire('foo:bar', tag='hehe', tufo=('iden', {'prop': 'valu'}))
                self.nn(wait.wait(timeout=2))

                self.eq(counters['p0'], 3)
                self.eq(counters['p1'], 3)
                self.eq(counters['f0'], 1)

                proxy0.fini()
                proxy1.fini()
示例#7
0
    def getHiveEnv(self):

        #FIXME remove when synapse link local:// supports windows
        self.thisHostMustNot(platform='windows')

        dmon = s_daemon.Daemon()
        queen = s_hivemind.Queen()

        dmon.share('syn.queen', queen)
        link = dmon.listen('tcp://127.0.0.1:0/')

        port = link[1].get('port')
        qprox = s_telepath.openurl('tcp://127.0.0.1/syn.queen', port=port)

        hive = s_hivemind.Hive(qprox, size=32)
        drone = s_hivemind.Drone(qprox, size=2)

        env = TestEnv()

        # order matters for fini calls...
        env.add('hive', hive, fini=True)
        env.add('drone', drone, fini=True)

        env.add('qprox', qprox, fini=True)
        env.add('queen', queen, fini=True)

        env.add('dmon', dmon, fini=True)

        return env
示例#8
0
    def test_model_file_bytes_axon(self):
        self.skipLongTest()
        with self.getAxonCore() as env:
            with s_daemon.Daemon() as dmon:

                dmonlink = dmon.listen('tcp://127.0.0.1:0/')
                dmonport = dmonlink[1].get('port')
                dmon.share('core', env.core)

                coreurl = 'tcp://127.0.0.1:%d/core' % dmonport
                core = s_telepath.openurl(coreurl)

                node = core.formNodeByBytes(b'visi', name='visi.bin')
                self.eq(node[1].get('file:bytes:size'), 4)
                self.eq(node[1].get('file:bytes:name'), 'visi.bin')
                self.eq(node[1].get('file:bytes'), '442f602ecf8230b2a59a44b4f845be27')
                self.eq(node[1].get('file:bytes:md5'), '1b2e93225959e3722efed95e1731b764')
                self.eq(node[1].get('file:bytes:sha1'), '93de0c7d579384feb3561aa504acd8f23f388040')
                self.eq(node[1].get('file:bytes:sha256'), 'e45bbb7e03acacf4d1cca4c16af1ec0c51d777d10e53ed3155bd3d8deb398f3f')
                self.eq(node[1].get('file:bytes:sha512'), '8238be12bcc3c10da7e07dbea528e9970dc809c07c5aef545a14e5e8d2038563b'
                                                            '29c2e818d167b06e6a33412e6beb8347fcc44520691347aea9ee21fcf804e39')

                fd = io.BytesIO(b'foobar')
                node = core.formNodeByFd(fd, name='foobar.exe')
                self.eq(node[1].get('file:bytes:size'), 6)
                self.eq(node[1].get('file:bytes:name'), 'foobar.exe')
示例#9
0
    def initCellAuth(self):

        # To avoid import cycle
        import synapse.lib.auth as s_auth

        valu = self.boot.get('auth:en')
        if not valu:
            return

        url = self.boot.get('auth:url')
        if url is not None:
            self.auth = s_telepath.openurl(url)
            return

        # setup local auth

        dirn = s_common.gendir(self.dirn, 'auth')

        self.auth = s_auth.Auth(dirn)  # FIXME this is not imported, but would cause circular import

        # let them hard code an initial admin user:passwd
        admin = self.boot.get('auth:admin')
        if admin is not None:
            name, passwd = admin.split(':', 1)

            user = self.auth.getUser(name)
            if user is None:
                user = self.auth.addUser(name)

            user.setAdmin(True)
            user.setPasswd(passwd)
示例#10
0
    def getDmonCore(self):
        '''
        Context manager to make a ram:/// cortex which has test models loaded into it and shared via daemon.

        Yields:
            s_cores_common.Cortex: A proxy object to the Ram backed cortex with test models.
        '''
        dmon = s_daemon.Daemon()
        core = s_cortex.openurl('ram:///')
        self.addTstForms(core)

        link = dmon.listen('tcp://127.0.0.1:0/')
        dmon.share('core00', core)
        port = link[1].get('port')
        prox = s_telepath.openurl('tcp://127.0.0.1/core00', port=port)

        s_scope.set('syn:test:link', link)
        s_scope.set('syn:cmd:core', prox)

        try:
            yield prox
        except:  # pragma: no cover
            raise
        finally:
            prox.fini()
            core.fini()
            dmon.fini()
示例#11
0
    def test_telepath_reshare(self):
        env0 = self.getFooEnv()
        env1 = self.getFooEnv()

        port = env0.link[1].get('port')
        prox0 = s_telepath.openurl('tcp://127.0.0.1/foo', port=port)

        env1.dmon.share('bar', prox0)

        port = env1.link[1].get('port')
        prox1 = s_telepath.openurl('tcp://127.0.0.1/bar', port=port)

        self.eq(prox1.bar(33, 44), 77)

        env0.fini()
        env1.fini()
示例#12
0
    def test_cortex_xact_deadlock(self):
        N = 100
        prop = 'testform'
        fd = tempfile.NamedTemporaryFile()
        dmon = s_daemon.Daemon()
        pool = s_threads.Pool(size=4, maxsize=8)
        wait = s_eventbus.Waiter(pool, 1, 'pool:work:fini')

        with s_cortex.openurl('sqlite:///%s' % fd.name) as core:

            def populate():
                for i in range(N):
                    #print('wrote %d tufos' % i)
                    core.formTufoByProp(prop, str(i), **{})

            dmon.share('core', core)
            link = dmon.listen('tcp://127.0.0.1:0/core')
            prox = s_telepath.openurl('tcp://127.0.0.1:%d/core' % link[1]['port'])

            pool.wrap(populate)()
            for i in range(N):
                tufos = prox.getTufosByProp(prop)
                #print('got %d tufos' % len(tufos))

            wait.wait()
            pool.fini()
示例#13
0
    async def test_cell_nonstandard_admin(self):
        boot = {
            'auth:admin': 'pennywise:cottoncandy',
            'type': 'echoauth',
        }
        pconf = {'user': '******', 'passwd': 'cottoncandy'}

        with self.getTestDir('cellauth') as dirn:

            s_common.yamlsave(boot, dirn, 'boot.yaml')
            async with await EchoAuth.anit(dirn) as echo:

                echo.insecure = False

                # start a regular network listener so we can auth
                host, port = await echo.dmon.listen('tcp://127.0.0.1:0/')
                async with await s_telepath.openurl(f'tcp://127.0.0.1:{port}/', **pconf) as proxy:

                    self.true(await proxy.isadmin())
                    self.true(await proxy.allowed(('hehe', 'haha')))

                url = f'tcp://[email protected]:{port}/'
                await self.asyncraises(s_exc.AuthDeny, s_telepath.openurl(url))

        # Ensure the cell and its auth have been fini'd
        self.true(echo.isfini)
        self.true(echo.auth.isfini)
        self.true(echo.auth.getUserByName('root').isfini)
        self.true(echo.auth.getUserByName('pennywise').isfini)
示例#14
0
    def test_telepath_fakesync(self):
        env = self.getFooEnv()
        port = env.link[1].get('port')

        class DeadLock(s_eventbus.EventBus):
            def hork(self):
                self.fire('foo:bar')

            def bar(self, x, y):
                return x + y

        dead = DeadLock()
        env.dmon.share('dead', dead)

        data = {}
        evt = threading.Event()

        prox = s_telepath.openurl('tcp://127.0.0.1/dead', port=port)

        def foobar(mesg):
            data['foobar'] = prox.bar(10, 20)
            evt.set()

        prox.on('foo:bar', foobar)

        prox.hork()

        evt.wait(timeout=2)

        self.eq(data.get('foobar'), 30)

        prox.fini()
        dead.fini()
        env.fini()
示例#15
0
    def test_service_base(self):
        sbus = s_service.SvcBus()

        dmon = s_daemon.Daemon()
        dmon.share('syn.svcbus', sbus)

        link = dmon.listen('tcp://127.0.0.1:0/')

        port = link[1].get('port')

        prox = s_telepath.openurl('tcp://127.0.0.1/syn.svcbus', port=port)

        woot = Woot()

        s_service.runSynSvc('syn.woot', woot, prox)

        svcs = prox.getSynSvcs()

        self.assertEqual( len(svcs), 1 )
        self.assertEqual( svcs[0][1].get('name'), 'syn.woot' )

        dyntask = s_async.newtask('foo',10,y=30)

        job = prox.callx(svcs[0][0], dyntask)
        self.assertEqual( prox.sync(job), 40 )

        prox.fini()
        dmon.fini()
        sbus.fini()
示例#16
0
    def getHiveEnv(self):

        #FIXME remove when synapse link local:// supports windows
        self.thisHostMustNot(platform='windows')

        dmon = s_daemon.Daemon()
        queen = s_hivemind.Queen()

        dmon.share('syn.queen', queen)
        link = dmon.listen('tcp://127.0.0.1:0/')

        port = link[1].get('port')
        qprox = s_telepath.openurl('tcp://127.0.0.1/syn.queen', port=port)

        hive = s_hivemind.Hive(qprox, size=32)
        drone = s_hivemind.Drone(qprox, size=2)

        env = TestEnv()

        # order matters for fini calls...
        env.add('hive', hive, fini=True)
        env.add('drone', drone, fini=True)

        env.add('qprox', qprox, fini=True)
        env.add('queen', queen, fini=True)

        env.add('dmon', dmon, fini=True)

        return env
示例#17
0
    def test_telepath_reshare(self):
        env0 = self.getFooEnv()
        env1 = self.getFooEnv()

        port = env0.link[1].get('port')
        prox0 = s_telepath.openurl('tcp://127.0.0.1/foo', port=port)

        env1.dmon.share('bar', prox0)

        port = env1.link[1].get('port')
        prox1 = s_telepath.openurl('tcp://127.0.0.1/bar', port=port)

        self.assertEqual( prox1.bar(33,44), 77 )

        env0.fini()
        env1.fini()
示例#18
0
    def test_service_base(self):

        with s_daemon.Daemon() as dmon:

            sbus = s_service.SvcBus()
            dmon.share('syn.svcbus', sbus, fini=True)

            link = dmon.listen('tcp://127.0.0.1:0/')

            port = link[1].get('port')

            with s_telepath.openurl('tcp://127.0.0.1/syn.svcbus',
                                    port=port) as prox:

                woot = Woot()

                s_service.runSynSvc('syn.woot', woot, prox)

                svcs = prox.getSynSvcs()

                self.eq(len(svcs), 1)
                self.eq(svcs[0][1].get('name'), 'syn.woot')

                dyntask = s_async.newtask('foo', 10, y=30)

                job = prox.callx(svcs[0][0], dyntask)
                self.eq(prox.syncjob(job), 40)
示例#19
0
    def test_telepath_reconnect(self):
        tenv = self.getFooEnv()

        port = tenv.link[1].get('port')
        prox = s_telepath.openurl('tcp://127.0.0.1/foo', port=port)

        url = 'tcp://127.0.0.1:%d/foo' % (port, )
        self.eq(prox.bar(10, 20), 30)

        waiter = self.getTestWait(prox, 1, 'tele:sock:init')

        # shut down the daemon
        tenv.dmon.fini()

        dmon = s_daemon.Daemon()
        dmon.share('foo', Foo())
        dmon.listen(url)

        waiter.wait()

        self.eq(prox.bar(10, 20), 30)

        prox.fini()
        dmon.fini()
        tenv.fini()
示例#20
0
    def test_telepath_fakesync(self):
        env = self.getFooEnv()
        port = env.link[1].get('port')

        class DeadLock(s_eventbus.EventBus):

            def hork(self):
                self.fire('foo:bar')

            def bar(self, x, y):
                return x + y

        dead = DeadLock()
        env.dmon.share('dead',dead)

        data = {}
        evt = threading.Event()

        prox = s_telepath.openurl('tcp://127.0.0.1/dead', port=port)
        def foobar(mesg):
            data['foobar'] = prox.bar(10,20)
            evt.set()

        prox.on('foo:bar', foobar)

        prox.hork()

        evt.wait(timeout=2)

        self.assertEqual( data.get('foobar'), 30 )

        prox.fini()
        dead.fini()
        env.fini()
    async def test_cell_nonstandard_admin(self):
        boot = {
            'auth:admin': 'pennywise:cottoncandy',
            'type': 'echoauth',
        }
        pconf = {'user': '******', 'passwd': 'cottoncandy'}

        with self.getTestDir('cellauth') as dirn:

            s_common.yamlsave(boot, dirn, 'boot.yaml')
            async with await EchoAuth.anit(dirn) as echo:

                echo.insecure = False

                # start a regular network listener so we can auth
                host, port = await echo.dmon.listen('tcp://127.0.0.1:0/')
                async with await s_telepath.openurl(f'tcp://127.0.0.1:{port}/',
                                                    **pconf) as proxy:

                    self.true(await proxy.isadmin())
                    self.true(await proxy.allowed('hehe', 'haha'))

                url = f'tcp://[email protected]:{port}/'
                await self.asyncraises(s_exc.AuthDeny, s_telepath.openurl(url))

        # Ensure the cell and its auth have been fini'd
        self.true(echo.isfini)
        self.true(echo.auth.isfini)
        self.true(echo.auth.getUserByName('root').isfini)
        self.true(echo.auth.getUserByName('pennywise').isfini)
示例#22
0
    def test_daemon_conf_fork(self):
        self.thisHostMustNot(platform='windows')

        iden = guid()

        conf = {
            'forks': (('fork0', {
                'ctors':
                (('haha', 'ctor://synapse.tests.test_daemon.Woot()'), ),
                'share': (('haha', {}), ),
                'listen': ('local://%s' % (iden, ), ),
            }), ),
        }

        dmon = s_daemon.Daemon()
        dmon.loadDmonConf(conf)

        prox = s_telepath.openurl('local://%s/haha?retry=20' % (iden, ))

        pid0 = prox.pid()
        self.ne(pid0, os.getpid())

        prox.fini()

        #dmon.killDmonFork('fork0')

        #prox = s_telepath.openurl('local://%s/haha?retry=6' % (iden,))

        #pid1 = prox.pid()
        #self.assertNotEqual( pid0, pid1 )
        #self.assertNotEqual( pid1, os.getpid() )

        #prox.fini()
        dmon.fini()
示例#23
0
    def test_telepath_reconnect(self):
        tenv = self.getFooEnv()

        port = tenv.link[1].get('port')
        prox = s_telepath.openurl('tcp://127.0.0.1/foo', port=port)

        url = 'tcp://127.0.0.1:%d/foo' % (port,)
        self.assertEqual( prox.bar(10,20), 30 )

        waiter = self.getTestWait(prox, 1, 'tele:sock:init')

        # shut down the daemon
        tenv.dmon.fini()

        dmon = s_daemon.Daemon()
        dmon.share('foo',Foo())
        dmon.listen(url)

        waiter.wait()

        self.assertEqual( prox.bar(10,20), 30 )

        prox.fini()
        dmon.fini()
        tenv.fini()
示例#24
0
def main(argv, outp=None):

    if outp is None:
        outp = s_output.OutPut()

    p = getArgParser()
    opts = p.parse_args(argv)

    core = s_telepath.openurl(opts.cortex)

    tags = []
    if opts.tags:
        for tag in opts.tags.split(','):
            tags.append(tag)

    if tags:
        outp.printf('adding tags: %r' % (tags, ))

    for path in opts.filenames:

        with open(path, 'rb') as fd:

            base = os.path.basename(path)
            node = core.formNodeByFd(fd, name=base)

            core.addTufoTags(node, tags)

            iden = node[1].get('file:bytes')
            size = node[1].get('file:bytes:size')
            name = node[1].get('file:bytes:name')

            outp.printf('file: %s (%d) added (%s) as %s' %
                        (base, size, iden, name))
示例#25
0
    def test_link_ssl_auth(self):

        # FIXME some kind of cert validation diffs in *py* vers killed us
        cafile = getTestPath('ca.crt')
        keyfile = getTestPath('server.key')
        certfile = getTestPath('server.crt')

        userkey = getTestPath('user.key')
        usercert = getTestPath('user.crt')

        with s_daemon.Daemon() as dmon:

            dmon.share('foobar', FooBar())

            link = dmon.listen('ssl://localhost:0/',
                               cafile=cafile,
                               keyfile=keyfile,
                               certfile=certfile)

            port = link[1].get('port')

            url = 'ssl://localhost/foobar'

            with s_telepath.openurl(url,
                                    port=port,
                                    cafile=cafile,
                                    keyfile=userkey,
                                    certfile=usercert) as foo:
                self.assertEqual(foo.foo(), 'bar')
示例#26
0
    def test_service_base(self):
        sbus = s_service.SvcBus()

        dmon = s_daemon.Daemon()
        dmon.share('syn.svcbus', sbus)

        link = dmon.listen('tcp://127.0.0.1:0/')

        port = link[1].get('port')

        prox = s_telepath.openurl('tcp://127.0.0.1/syn.svcbus', port=port)

        woot = Woot()

        s_service.runSynSvc('syn.woot', woot, prox)

        svcs = prox.getSynSvcs()

        self.assertEqual( len(svcs), 1 )
        self.assertEqual( svcs[0][1].get('name'), 'syn.woot' )

        dyntask = s_async.newtask('foo',10,y=30)

        job = prox.callx(svcs[0][0], dyntask)
        self.assertEqual( prox.syncjob(job), 40 )

        prox.fini()
        dmon.fini()
        sbus.fini()
示例#27
0
    def test_telepath_nosuchobj(self):
        dmon,link = self.getFooServ()
        port = link[1].get('port')

        newp = s_telepath.openurl('tcp://localhost:%d/newp' % (port,))
        self.assertRaises( JobErr, newp.foo )

        dmon.fini()
示例#28
0
    def test_telepath_nosuchobj(self):
        dmon, link = self.getFooServ()
        port = link[1].get('port')

        newp = s_telepath.openurl('tcp://localhost:%d/newp' % (port, ))
        self.raises(SynErr, newp.foo)

        dmon.fini()
示例#29
0
    def test_telepath_push(self):
        env = self.getFooEnv()
        port = env.link[1].get('port')

        prox0 = s_telepath.openurl('tcp://127.0.0.1/', port=port)
        prox0.push('foo1', Foo())

        prox1 = s_telepath.openurl('tcp://127.0.0.1/foo1', port=port)

        self.eq(prox1.bar(10, 20), 30)

        prox0.fini()

        self.assertRaises(s_async.JobErr, prox1.bar, 10, 20)

        prox1.fini()

        env.fini()
示例#30
0
    def test_telepath_push(self):
        env = self.getFooEnv()
        port = env.link[1].get('port')

        prox0 = s_telepath.openurl('tcp://127.0.0.1/', port=port)
        prox0.push('foo1', Foo() )

        prox1 = s_telepath.openurl('tcp://127.0.0.1/foo1', port=port)

        self.eq( prox1.bar(10,20), 30 )

        prox0.fini()

        self.assertRaises( s_async.JobErr, prox1.bar, 10, 20 )

        prox1.fini()

        env.fini()
示例#31
0
    async def test_telepath_auth(self):

        item = TeleAuth()
        async with self.getTestDmon() as dmon:
            dmon.share('auth', item)
            host, port = dmon.addr

            url = 'tcp://localhost/auth'
            await self.asyncraises(s_exc.AuthDeny,
                                   s_telepath.openurl(url, port=port))

            url = 'tcp://visi@localhost/auth'
            await self.asyncraises(s_exc.AuthDeny,
                                   s_telepath.openurl(url, port=port))

            url = 'tcp://*****:*****@localhost/auth'
            async with await s_telepath.openurl(url, port=port) as proxy:
                self.eq(17, await proxy.getFooBar(10, 7))
示例#32
0
    def test_hypnos_with_telepath(self):
        # Setup the Hypnos object using telepath, then get the proxy object and
        # issue the fireWebApi calls via telepath, validate that they worked
        # against ingested tufo in the hypnos cortex. Use daemon to handle
        # telepath proxying.
        self.thisHostMustNot(platform='windows')
        self.skipIfNoInternet()
        gconf = get_fake_ipify_ingest_global_config(port=self.port)
        dconf = {
            'vars': {
                'hopts': {
                    s_remcycle.MIN_WORKER_THREADS: 1,
                },
                'hioloop': self.io_loop,
                'cortex_url': 'ram://'
            },
            'ctors':
            [['core', 'ctor://synapse.cortex.openurl(cortex_url)'],
             [
                 'hypnos',
                 'ctor://synapse.lib.remcycle.Hypnos(core=core, ioloop=hioloop,opts=hopts)'
             ]],
            'share': [['hypnos', {}], ['core', {}]],
            'listen': ['tcp://127.0.0.1:50001']
        }

        dmon = s_daemon.Daemon()
        dmon.loadDmonConf(dconf)

        hypnos_proxy = s_telepath.openurl('tcp://127.0.0.1:50001/hypnos')
        core_proxy = s_telepath.openurl('tcp://127.0.0.1:50001/core')
        # Lets do a remote config load!
        hypnos_proxy.addWebConfig(config=gconf)

        description = hypnos_proxy.getWebDescription()
        self.true('fakeipify' in description)
        # Fire the web api
        jid = hypnos_proxy.fireWebApi(name='fakeipify:jsonip')
        self.nn(jid)
        hypnos_proxy.webJobWait(jid)
        tufos = core_proxy.getTufosByProp('inet:ipv4')
        self.eq(len(tufos), 1)
        ip = s_inet.ipv4str(tufos[0][1].get('inet:ipv4'))
        self.true(len(ip) >= 7)
示例#33
0
    async def test_telepath_basics(self):

        foo = Foo()
        evt = asyncio.Event()

        async with self.getTestDmon() as dmon:

            addr = await dmon.listen('tcp://127.0.0.1:0')
            dmon.share('foo', foo)

            await self.asyncraises(s_exc.BadUrl,
                                   s_telepath.openurl('noscheme/foo'))

            prox = await s_telepath.openurl('tcp://127.0.0.1/foo',
                                            port=addr[1])

            # Prox exposes remote synapse version
            self.eq(prox._getSynVers(), s_version.version)

            # Prox exposes reflected classes
            self.eq(prox._getClasses(), ('synapse.tests.test_telepath.Foo', ))

            # Add an additional prox.fini handler.
            prox.onfini(evt.set)

            # check a standard return value
            self.eq(30, await prox.bar(10, 20))

            # check a coroutine return value
            self.eq(25, await prox.corovalu(10, 5))

            # check a generator return channel
            genr = await prox.genr()
            self.true(isinstance(genr, s_coro.GenrHelp))
            self.eq((10, 20, 30), await genr.list())

            # check generator explodes channel
            genr = await prox.genrboom()
            await self.asyncraises(s_exc.SynErr, genr.list())

            # check an async generator return channel
            genr = prox.corogenr(3)
            self.true(isinstance(genr, s_telepath.GenrIter))
            self.eq((0, 1, 2), await alist(genr))

            await self.asyncraises(s_exc.NoSuchMeth, prox.raze())

            await self.asyncraises(s_exc.NoSuchMeth, prox.fake())

            await self.asyncraises(s_exc.SynErr, prox.boom())

        # Fini'ing a daemon fini's proxies connected to it.
        self.true(await s_coro.event_wait(evt, 2))
        self.true(prox.isfini)
        await self.asyncraises(s_exc.IsFini, prox.bar((10, 20)))
示例#34
0
    def getNeuNet(self):

        env = TestEnv()

        dmon = s_daemon.Daemon()
        env.add('dmon',dmon,fini=True)

        link = dmon.listen('tcp://127.0.0.1:0/')

        neu0 = s_neuron.Neuron()

        env.add('neu0', s_neuron.Neuron(), fini=True)
        env.add('neu1', s_neuron.Neuron(), fini=True)
        env.add('neu2', s_neuron.Neuron(), fini=True)

        env.dmon.share('neu0', env.neu0)
        env.dmon.share('neu1', env.neu1)
        env.dmon.share('neu2', env.neu2)

        #dmon.onfini( neu0.fini )
        #dmon.onfini( neu1.fini )
        #dmon.onfini( neu2.fini )

        #dmon.share('neu0',neu0)
        #dmon.share('neu1',neu1)
        #dmon.share('neu2',neu2)

        port = link[1].get('port')

        env.add('neup0', s_telepath.openurl('tcp://127.0.0.1/neu0', port=port), fini=True)
        env.add('neup1', s_telepath.openurl('tcp://127.0.0.1/neu1', port=port), fini=True)
        env.add('neup2', s_telepath.openurl('tcp://127.0.0.1/neu2', port=port), fini=True)

        wai0 = TestWaiter(env.neu1, 1, 'neu:link:init')
        env.neu0.link( env.neup1 )
        wai0.wait()

        wai0 = TestWaiter(env.neu1, 1, 'neu:link:init')
        env.neu0.link( env.neup2 )
        wai0.wait()

        return env
示例#35
0
    async def test_telepath_server_badvers(self):

        async with self.getTestDmon() as dmon:

            dmon.televers = (0, 0)

            host, port = await dmon.listen('tcp://127.0.0.1:0/')

            await self.asyncraises(
                s_exc.BadMesgVers,
                s_telepath.openurl('tcp://127.0.0.1/', port=port))
示例#36
0
def main(argv):

    if len(argv) != 2:
        print('usage: python -m synapse.tools.cmdr <url>')
        return -1

    item = s_telepath.openurl(argv[1])

    cmdr = s_cmdr.getItemCmdr(item)

    cmdr.runCmdLoop()
示例#37
0
def openurl(url, **opts):
    '''
    Open a remote service bus and return a SvcProxy class.

    Example:

        svcprox = openbus('tcp://svcbus.com/mybus')

    '''
    svcbus = s_telepath.openurl(url,**opts)
    return SvcProxy(svcbus)
示例#38
0
def openurl(url, **opts):
    '''
    Open a remote service bus and return a SvcProxy class.

    Example:

        svcprox = openbus('tcp://svcbus.com/mybus')

    '''
    svcbus = s_telepath.openurl(url, **opts)
    return SvcProxy(svcbus)
示例#39
0
    def test_model_file_bytes_axon(self):

        fd = io.BytesIO(b'foobar')

        # create an cortex with access to an axon
        with self.getTestDir() as dirname:

            conf = {
                'ctors': (
                    ('axon00', 'syn:axon', {
                        'datadir': dirname
                    }),
                    ('core00', 'syn:cortex', {
                        'url': 'ram:///',
                        'axon:url': 'dmon://axon00'
                    }),
                ),
                'share': (('core00', {}), ),
            }

            with s_daemon.Daemon() as dmon:

                dmon.loadDmonConf(conf)
                link = dmon.listen('tcp://127.0.0.1:0/')

                port = link[1].get('port')

                core = s_telepath.openurl('tcp://127.0.0.1/core00', port=port)

                node = core.formNodeByBytes(b'visi', name='visi.bin')

                self.eq(node[1].get('file:bytes:size'), 4)
                self.eq(node[1].get('file:bytes:name'), 'visi.bin')

                self.eq(node[1].get('file:bytes'),
                        '442f602ecf8230b2a59a44b4f845be27')
                self.eq(node[1].get('file:bytes:md5'),
                        '1b2e93225959e3722efed95e1731b764')
                self.eq(node[1].get('file:bytes:sha1'),
                        '93de0c7d579384feb3561aa504acd8f23f388040')
                self.eq(
                    node[1].get('file:bytes:sha256'),
                    'e45bbb7e03acacf4d1cca4c16af1ec0c51d777d10e53ed3155bd3d8deb398f3f'
                )
                self.eq(
                    node[1].get('file:bytes:sha512'),
                    '8238be12bcc3c10da7e07dbea528e9970dc809c07c5aef545a14e5e8d2038563b29c2e818d167b06e6a33412e6beb8347fcc44520691347aea9ee21fcf804e39'
                )

                node = core.formNodeByFd(fd, name='foobar.exe')

                self.eq(node[1].get('file:bytes:size'), 6)
                self.eq(node[1].get('file:bytes:name'), 'foobar.exe')
示例#40
0
    def test_telepath_clientside(self):

        with s_daemon.Daemon() as dmon:

            link = dmon.listen('tcp://127.0.0.1:0/')
            port = link[1].get('port')

            dmon.share('foo', Foo())

            with s_telepath.openurl('tcp://127.0.0.1/foo', port=port) as prox:
                self.eq(prox.localthing(20), 20)
                self.eq(prox.localthing(30), 30)
示例#41
0
    def test_telepath_chop(self):

        dmon,link = self.getFooServ()

        port = link[1].get('port')

        foo = s_telepath.openurl('tcp://localhost:%d/foo' % (port,))

        self.assertEqual( foo.bar(10,20), 30 )

        foo.fini()
        dmon.fini()
示例#42
0
    def test_telepath_chop(self):

        dmon, link = self.getFooServ()

        port = link[1].get('port')

        foo = s_telepath.openurl('tcp://localhost:%d/foo' % (port, ))

        self.eq(foo.bar(10, 20), 30)

        foo.fini()
        dmon.fini()
示例#43
0
文件: droned.py 项目: jhsmith/synapse
def main(argv):

    p = argparse.ArgumentParser()
    p.add_argument('--size', default=mproc.cpu_count(), type=int, help='Number of parallel work units to run')
    p.add_argument('queenurl', help='synapse link URL to connect to queen')

    args = p.parse_args(argv)

    queen = s_telepath.openurl(args.queenurl)
    drone = s_hivemind.Drone(queen, size=args.size)

    drone.main()
示例#44
0
    def test_telepath_reqproxy(self):

        self.raises(MustBeProxy, s_telepath.reqIsProxy, 'woot')

        with s_daemon.Daemon() as dmon:

            dmon.share('foo', 'woot')

            link = dmon.listen('tcp://127.0.0.1:0/')
            port = link[1].get('port')

            with s_telepath.openurl('tcp://127.0.0.1/foo', port=port) as foo:
                self.raises(MustBeLocal, s_telepath.reqNotProxy, foo)
示例#45
0
    def test_telepath_push(self):

        # override default timeout=None for tests
        with s_threads.ScopeLocal(syntimeout=5):

            env = self.getFooEnv()
            port = env.link[1].get('port')

            prox0 = s_telepath.openurl('tcp://127.0.0.1/', port=port)
            prox0.push('foo1', Foo() )

            prox1 = s_telepath.openurl('tcp://127.0.0.1/foo1', port=port)

            self.eq( prox1.bar(10,20), 30 )

            prox0.fini()

            self.assertRaises( s_async.JobErr, prox1.bar, 10, 20 )

            prox1.fini()

            env.fini()
示例#46
0
文件: cat.py 项目: vivisect/synapse
def main(argv, outp=s_output.stdout):

    pars = argparse.ArgumentParser(prog='cryo.cat', description='display data items from a cryo cell')
    pars.add_argument('cryotank', help='The telepath URL for the remote cryotank.')
    pars.add_argument('--offset', default=0, type=int, help='Begin at offset index')
    pars.add_argument('--size', default=10, type=int, help='How many items to display')
    pars.add_argument('--omit-offset', default=False, action='store_true', help='Output raw items with no offsets.')
    # TODO: synapse.tools.cryo.list <cryocell>
    #pars.add_argument('--list', default=False, action='store_true', help='List tanks in the remote cell and return')
    group = pars.add_mutually_exclusive_group()
    group.add_argument('--jsonl', action='store_true', help='Input/Output items in jsonl format')
    group.add_argument('--msgpack', action='store_true', help='Input/Output items in msgpack format')
    pars.add_argument('--verbose', '-v', default=False, action='store_true', help='Verbose output')
    pars.add_argument('--ingest', '-i', default=False, action='store_true',
                      help='Reverses direction: feeds cryotank from stdin in msgpack or jsonl format')

    opts = pars.parse_args(argv)

    if opts.verbose:
        logger.setLevel(logging.INFO)

    if opts.ingest and not opts.jsonl and not opts.msgpack:
        outp.printf('Must specify exactly one of --jsonl or --msgpack if --ingest is specified')
        return 1

    logger.info(f'connecting to: {opts.cryotank}')

    with s_telepath.openurl(opts.cryotank) as tank:

        if opts.ingest:

            if opts.msgpack:
                items = list(s_msgpack.iterfd(sys.stdin.buffer))
                tank.puts(items)
                return 0

            items = [json.loads(l) for l in sys.stdin]
            tank.puts(items)
            return 0

        for item in tank.slice(opts.offset, opts.size):

            if opts.jsonl:
                outp.printf(json.dumps(item[1], sort_keys=True))

            elif opts.msgpack:
                sys.stdout.buffer.write(s_msgpack.en(item[1]))

            else:
                outp.printf(pprint.pformat(item))
    return 0
示例#47
0
    def test_link_local(self):
        self.thisHostMustNot(platform='windows')
        name = guid()

        dmon = s_daemon.Daemon()
        dmon.share('foo',FooBar())

        link = dmon.listen('local://%s' % (name,))

        prox = s_telepath.openurl('local://%s/foo' % name)

        self.assertEqual( prox.foo(), 'bar' )

        prox.fini()
        dmon.fini()
示例#48
0
文件: list.py 项目: vivisect/synapse
def main(argv, outp=s_output.stdout):

    pars = argparse.ArgumentParser(prog='cryo.list', description='List tanks within a cryo cell.')
    pars.add_argument('cryocell', nargs='+', help='Telepath URLs to cryo cells.')

    opts = pars.parse_args(argv)

    for url in opts.cryocell:

        outp.printf(url)

        with s_telepath.openurl(url) as cryo:

            for name, info in cryo.list():

                outp.printf(f'    {name}: {info}')
示例#49
0
    def test_telepath_pki(self):
        env = self.getFooEnv(url='tcp://127.0.0.1:0/foo?pki=1')
        port = env.link[1].get('port')

        pki = env.dmon.pki # steal his...

        user = pki.genUserToken('visi',bits=512)
        host = pki.genHostToken('127.0.0.1',bits=512)
        root = pki.genUserToken('root', bits=512, root=True)

        pki.genTokenCert(user, signas=root[0])
        pki.genTokenCert(host, signas=root[0])

        prox = s_telepath.openurl('tcp://127.0.0.1/foo?pki=1', port=port, pkistor=pki)
        self.assertEqual( prox.bar(10,20), 30 )

        env.fini()
示例#50
0
    def getSwarmEnv(self):
        tenv = TestEnv()

        core0 = s_cortex.openurl('ram://')
        core1 = s_cortex.openurl('ram://')

        tenv.add('core0',core0,fini=True)
        tenv.add('core1',core1,fini=True)

        tufo0 = core0.formTufoByProp('foo:bar','baz',vvv='visi')
        tufo1 = core0.formTufoByProp('foo:bar','faz',vvv='visi')
        tufo2 = core1.formTufoByProp('foo:bar','lol',vvv='visi')
        tufo3 = core1.formTufoByProp('foo:bar','hai',vvv='visi')

        tufo4 = core0.formTufoByProp('zzz:woot',10,vvv='visi')
        tufo5 = core1.formTufoByProp('zzz:woot',12,vvv='romp')

        tenv.add('tufo0',tufo0)
        tenv.add('tufo1',tufo1)
        tenv.add('tufo2',tufo2)
        tenv.add('tufo3',tufo3)

        dmon = s_daemon.Daemon()
        link = dmon.listen('tcp://127.0.0.1:0')

        tenv.add('link',link)
        tenv.add('dmon',dmon,fini=True)

        port = link[1].get('port')

        svcbus = s_service.SvcBus()
        tenv.add('svcbus',svcbus,fini=True)

        dmon.share('syn.svcbus',svcbus)

        svcrmi = s_telepath.openurl('tcp://127.0.0.1/syn.svcbus', port=port)
        tenv.add('svcrmi',svcrmi,fini=True)

        s_service.runSynSvc('cortex',core0,svcrmi,tags=('hehe.haha',))
        s_service.runSynSvc('cortex',core1,svcrmi,tags=('hehe.hoho',))

        runt = s_runtime.Runtime(svcrmi)

        tenv.add('runt',runt,fini=True)

        return tenv
示例#51
0
    def test_service_proxy(self):
        sbus = s_service.SvcBus()

        dmon = s_daemon.Daemon()
        dmon.share('syn.svcbus', sbus)

        link = dmon.listen('tcp://127.0.0.1:0/')

        port = link[1].get('port')

        prox = s_telepath.openurl('tcp://127.0.0.1/syn.svcbus', port=port)

        woot0 = Woot()
        woot1 = Woot()

        s_service.runSynSvc('woots.woot0', woot0, prox)
        s_service.runSynSvc('woots.woot1', woot1, prox, tags=('foo.bar',))

        svcp = s_service.SvcProxy(prox)

        foos = svcp.getTagProxy('foo')
        woots = svcp.getTagProxy('woots')

        vals = tuple( sorted( foos.foo(20,y=20) ) )
        self.assertEqual( vals, (40,) )

        vals = tuple( sorted( woots.foo(10,y=20) ) )
        self.assertEqual( vals, (30,30) )

        def runNewpMeth():
            for foo in woots.newp(44,y=33):
                pass

        self.assertEqual( 2, len(svcp.getSynSvcs()) )
        self.assertEqual( 2, len(svcp.getSynSvcsByTag('woots')) )

        #self.assertRaises( JobErr, runNewpMeth )

        woots = svcp.getTagProxy('class.synapse.tests.test_service.Woot')

        vals = tuple( sorted( woots.foo(10,y=20) ) )
        self.assertEqual( vals, (30,30) )

        prox.fini()
        dmon.fini()
        sbus.fini()
    def getSwarmEnv(self):
        tenv = TestEnv()

        core0 = s_cortex.openurl("ram://")
        core1 = s_cortex.openurl("ram://")

        tenv.add("core0", core0, fini=True)
        tenv.add("core1", core1, fini=True)

        tufo0 = core0.formTufoByProp("foo:bar", "baz", vvv="visi")
        tufo1 = core0.formTufoByProp("foo:bar", "faz", vvv="visi")
        tufo2 = core1.formTufoByProp("foo:bar", "lol", vvv="visi")
        tufo3 = core1.formTufoByProp("foo:bar", "hai", vvv="visi")

        tufo4 = core0.formTufoByProp("zzz:woot", 10, vvv="visi")
        tufo5 = core1.formTufoByProp("zzz:woot", 12, vvv="romp")

        tenv.add("tufo0", tufo0)
        tenv.add("tufo1", tufo1)
        tenv.add("tufo2", tufo2)
        tenv.add("tufo3", tufo3)

        dmon = s_daemon.Daemon()
        link = dmon.listen("tcp://127.0.0.1:0")

        tenv.add("link", link)
        tenv.add("dmon", dmon, fini=True)

        port = link[1].get("port")

        svcbus = s_service.SvcBus()
        tenv.add("svcbus", svcbus, fini=True)

        dmon.share("syn.svcbus", svcbus)

        svcrmi = s_telepath.openurl("tcp://127.0.0.1/syn.svcbus", port=port)
        tenv.add("svcrmi", svcrmi, fini=True)

        s_service.runSynSvc("cortex", core0, svcrmi, tags=("hehe.haha",))
        s_service.runSynSvc("cortex", core1, svcrmi, tags=("hehe.hoho",))

        runt = s_runtime.Runtime(svcrmi)

        tenv.add("runt", runt, fini=True)

        return tenv
示例#53
0
    def test_telepath_callx(self):

        class Baz:
            def faz(self, x, y=10):
                return '%d:%d' % (x,y)

        env = self.getFooEnv()
        env.dmon.share('baz', Baz())

        port = env.link[1].get('port')
        foo = s_telepath.openurl('tcp://127.0.0.1/foo', port=port)

        # make sure proxy is working normally...
        self.assertEqual( foo.bar(10,20), 30 )

        # carry out a cross item task
        job = foo.callx( 'baz', ('faz', (30,), {'y':40}), )

        self.assertEqual( foo.sync(job), '30:40' )
示例#54
0
    def test_link_ssl_nocheck(self):

        cafile = getTestPath('ca.pem')
        keyfile = getTestPath('server.key')
        certfile = getTestPath('server.pem')

        dmon = s_daemon.Daemon()
        dmon.share('foobar', FooBar() )

        link = dmon.listen('ssl://localhost:0/', keyfile=keyfile, certfile=certfile)

        port = link[1].get('port')

        url = 'ssl://localhost/foobar'
        self.assertRaises( LinkErr, s_telepath.openurl, url, port=port )

        foo = s_telepath.openurl(url, port=port, nocheck=True)

        foo.fini()
        dmon.fini()
示例#55
0
    def test_daemon_conf_fork(self):
        self.thisHostMustNot(platform='windows')

        iden = guid()

        conf = {
            'forks':(
                ('fork0',{
                    'ctors':(
                        ('haha','ctor://synapse.tests.test_daemon.Woot()'),
                    ),
                    'share': (
                        ('haha',{}),
                    ),
                    'listen':(
                        'local://%s' % (iden,),
                    ),
                }),
            ),
        }

        dmon = s_daemon.Daemon()
        dmon.loadDmonConf(conf)

        prox = s_telepath.openurl('local://%s/haha?retry=6' % (iden,))

        pid0 = prox.pid()
        self.assertNotEqual( pid0, os.getpid() )

        prox.fini()

        #dmon.killDmonFork('fork0')

        #prox = s_telepath.openurl('local://%s/haha?retry=6' % (iden,))

        #pid1 = prox.pid()
        #self.assertNotEqual( pid0, pid1 )
        #self.assertNotEqual( pid1, os.getpid() )

        #prox.fini()
        dmon.fini()
示例#56
0
    def newp_link_ssl_basic(self):

        # FIXME some kind of cert validation diffs in *py* vers killed us
        cafile = getTestPath('ca.pem')
        keyfile = getTestPath('server.key')
        certfile = getTestPath('server.pem')

        dmon = s_daemon.Daemon()
        dmon.share('foobar', FooBar() )

        link = dmon.listen('ssl://localhost:0/', keyfile=keyfile, certfile=certfile)

        port = link[1].get('port')

        url = 'ssl://localhost/foobar'
        foo = s_telepath.openurl(url, port=port, cafile=cafile)

        self.assertEqual( foo.foo(), 'bar' )

        foo.fini()
        dmon.fini()
示例#57
0
def main(argv, outp=None):

    pars = setup()
    opts = pars.parse_args(argv)

    if outp is None:  # pragma: no cover
        outp = s_output.OutPut()

    if opts.output is None:
        opts.output = '.'

    outdir = pathlib.Path(opts.output)

    s_common.gendir(opts.output)

    with s_telepath.openurl(opts.axon) as axon:

        # reminder: these are the hashes *not* available
        awants = axon.wants([binascii.unhexlify(h) for h in opts.hashes])
        for a in awants:
            outp.printf(f'{binascii.hexlify(a)} not in axon store')

        exists = [h for h in opts.hashes if binascii.unhexlify(h) not in awants]

        for h in exists:

            try:
                outp.printf(f'Fetching {h} to file')

                with open(outdir.joinpath(h), 'wb') as fd:
                    for b in axon.get(binascii.unhexlify(h)):
                        fd.write(b)

                outp.printf(f'Fetched {h} to file')

            except Exception as e:
                outp.printf('Error: Hit Exception: %s' % (str(e),))
                continue

    return 0
示例#58
0
    def test_daemon_conf_fork(self):
        self.thisHostMustNot(platform="windows")

        iden = guid()

        conf = {
            "forks": (
                (
                    "fork0",
                    {
                        "ctors": (("haha", "ctor://synapse.tests.test_daemon.Woot()"),),
                        "share": (("haha", {}),),
                        "listen": ("local://%s" % (iden,),),
                    },
                ),
            )
        }

        dmon = s_daemon.Daemon()
        dmon.loadDmonConf(conf)

        prox = s_telepath.openurl("local://%s/haha?retry=6" % (iden,))

        pid0 = prox.pid()
        self.assertNotEqual(pid0, os.getpid())

        prox.fini()

        # dmon.killDmonFork('fork0')

        # prox = s_telepath.openurl('local://%s/haha?retry=6' % (iden,))

        # pid1 = prox.pid()
        # self.assertNotEqual( pid0, pid1 )
        # self.assertNotEqual( pid1, os.getpid() )

        # prox.fini()
        dmon.fini()
示例#59
0
def subtask(job):
    jid = job[0]

    slot = job[1].get('slot')

    meld = job[1].get('meld')
    if meld != None:
        s_mindmeld.loadMindMeld(meld)

    hive = slot[1].get('hive')

    queen = s_telepath.openurl( job[1].get('queen') )

    s_threads.put('syn.queen',queen)

    try:
        dyntask = job[1].get('dyntask')
        ret = s_dyndeps.runDynTask(dyntask)

        queen.tell(hive, 'job:done', jid=jid, ret=ret)

    except Exception as e:
        queen.tell(hive, 'job:done', jid=jid, **excinfo(e))
示例#60
0
    async def test_cell_auth(self):

        with self.getTestDir() as dirn:

            async with await EchoAuth.anit(dirn) as echo:

                echo.insecure = False
                echo.dmon.share('echo00', echo)
                root = echo.auth.getUserByName('root')
                await root.setPasswd('secretsauce')

                host, port = await echo.dmon.listen('tcp://127.0.0.1:0/')

                url = f'tcp://127.0.0.1:{port}/echo00'
                await self.asyncraises(s_exc.AuthDeny, s_telepath.openurl(url))

                url = f'tcp://[email protected]:{port}/echo00'
                await self.asyncraises(s_exc.NoSuchUser, s_telepath.openurl(url))

                url = f'tcp://[email protected]:{port}/echo00'
                await self.asyncraises(s_exc.AuthDeny, s_telepath.openurl(url))

                url = f'tcp://*****:*****@127.0.0.1:{port}/echo00'
                await self.asyncraises(s_exc.AuthDeny, s_telepath.openurl(url))

                root_url = f'tcp://*****:*****@127.0.0.1:{port}/echo00'
                async with await s_telepath.openurl(root_url) as proxy:
                    self.true(await proxy.isadmin())
                    self.true(await proxy.allowed(('hehe', 'haha')))

                user = await echo.auth.addUser('visi')
                await user.setPasswd('foo')
                await user.addRule((True, ('foo', 'bar')))

                visi_url = f'tcp://*****:*****@127.0.0.1:{port}/echo00'
                async with await s_telepath.openurl(visi_url) as proxy:
                    self.true(await proxy.allowed(('foo', 'bar')))
                    self.false(await proxy.isadmin())
                    self.false(await proxy.allowed(('hehe', 'haha')))

                async with await s_telepath.openurl(root_url) as proxy:

                    await proxy.setUserLocked('visi', True)
                    info = await proxy.getAuthInfo('visi')
                    self.true(info[1].get('locked'))
                    await self.asyncraises(s_exc.AuthDeny,
                                           s_telepath.openurl(visi_url))

                    await proxy.setUserLocked('visi', False)
                    info = await proxy.getAuthInfo('visi')
                    self.false(info[1].get('locked'))
                    async with await s_telepath.openurl(visi_url) as visi_proxy:
                        self.false(await visi_proxy.isadmin())

                async with await s_telepath.openurl(root_url) as proxy:

                    await self.asyncraises(s_exc.NoSuchUser,
                                           proxy.setUserArchived('newp', True))
                    await proxy.setUserArchived('visi', True)
                    info = await proxy.getAuthInfo('visi')
                    self.true(info[1].get('archived'))
                    self.true(info[1].get('locked'))
                    users = await proxy.getAuthUsers()
                    self.len(1, users)
                    users = await proxy.getAuthUsers(archived=True)
                    self.len(2, users)
                    await self.asyncraises(s_exc.AuthDeny,
                                           s_telepath.openurl(visi_url))

                    await proxy.setUserArchived('visi', False)
                    info = await proxy.getAuthInfo('visi')
                    self.false(info[1].get('archived'))
                    self.true(info[1].get('locked'))
                    users = await proxy.getAuthUsers(archived=True)
                    self.len(2, users)

                    await self.asyncraises(s_exc.AuthDeny,
                                           s_telepath.openurl(visi_url))

                async with echo.getLocalProxy() as proxy:

                    await proxy.setHiveKey(('foo', 'bar'), [1, 2, 3, 4])
                    self.eq([1, 2, 3, 4], await proxy.getHiveKey(('foo', 'bar')))
                    self.isin('foo', await proxy.listHiveKey())
                    self.eq(['bar'], await proxy.listHiveKey(('foo', )))
                    await proxy.popHiveKey(('foo', 'bar'))
                    self.eq([], await proxy.listHiveKey(('foo', )))