Ejemplo n.º 1
0
    def test_sock_plex(self):

        def onmesg(event):
            sock = event[1].get('sock')
            mesg = event[1].get('mesg')

            sock.tx(tufo('hi:got', mesg=mesg))

        plex = s_socket.Plex()

        s1, s2 = s_socket.socketpair()
        s2.on('link:sock:mesg', onmesg)

        waiter = self.getTestWait(s2, 1, 'link:sock:mesg')

        plex.addPlexSock(s2)

        s1.tx(tufo('hi:there', whee='whee'))

        ret = s1.recvobj()
        mesg = ret[1].get('mesg')

        self.eq(ret[0], 'hi:got')

        s1.fini()
        plex.fini()
Ejemplo n.º 2
0
    def test_sock_plex_txbuf(self):

        # windows sockets seem to allow *huge* buffers in non-blocking
        # so triggering txbuf takes *way* too much ram to be a feasable test
        if s_thishost.get('platform') == 'windows':
            return

        plex = s_socket.Plex()

        s1, s2 = s_socket.socketpair()

        plex.addPlexSock(s2)

        s2.tx(tufo('hi', there='there'))

        self.assertEqual(s1.recvobj()[0], 'hi')

        s2.tx(tufo('OMG', y='A' * 409000))

        self.assertIsNotNone(s2.txbuf)

        s2.tx(tufo('foo', bar='baz'))

        self.assertEqual(len(s2.txque), 1)

        m1 = s1.recvobj()
        m2 = s1.recvobj()

        self.assertEqual(len(m1[1].get('y')), 409000)
        self.assertEqual(m2[0], 'foo')

        s1.fini()
        s2.fini()

        plex.fini()
Ejemplo n.º 3
0
    def __init__(self, relay, plex=None, sock=None):

        s_eventbus.EventBus.__init__(self)
        self.onfini(self._onProxyFini)

        # NOTE: the _tele_ prefixes are designed to prevent accidental
        #       derefs with overlapping names from working correctly

        self._tele_sid = None

        self._tele_q = s_queue.Queue()
        self._tele_pushed = {}

        # allow the server to give us events to fire back on
        # reconnect so we can help re-init our server-side state
        self._tele_reminders = []

        if plex is None:
            plex = s_socket.Plex()
            self.onfini(plex.fini)

        self._tele_plex = plex
        self._tele_boss = s_async.Boss()

        self._tele_plex.on('link:sock:mesg', self._onLinkSockMesg)

        self._raw_on('tele:yield:init', self._onTeleYieldInit)
        self._raw_on('tele:yield:item', self._onTeleYieldItem)
        self._raw_on('tele:yield:fini', self._onTeleYieldFini)

        self._raw_on('tele:reminder', self._onTeleReminder)

        self._raw_on('fifo:xmit', self._onFifoXmit)
        self._raw_on('job:done', self._tele_boss.dist)
        self._raw_on('sock:gzip', self._onSockGzip)
        self._raw_on('tele:call', self._onTeleCall)
        self._raw_on('tele:sock:init', self._onTeleSockInit)

        self._tele_cthr = self.consume(self._tele_q)

        self._tele_ons = {}

        self._tele_sock = None
        self._tele_relay = relay  # LinkRelay()
        self._tele_link = relay.link
        self._tele_yields = {}
        self._tele_csides = {}
        self._tele_reflect = None

        # obj name is path minus leading "/"
        self._tele_name = relay.link[1].get('path')[1:]

        if sock is None:
            sock = self._tele_relay.connect()

        self._initTeleSock(sock=sock)
Ejemplo n.º 4
0
    def test_socket_glob_plex(self):
        plex0 = s_scope.get('plex')

        self.nn(plex0)

        with s_scope.enter():
            plex1 = s_socket.Plex()
            s_scope.set('plex', plex1)
            self.ne(id(plex0), id(s_scope.get('plex')))
            plex1.fini()

        self.eq(id(plex0), id(s_scope.get('plex')))
Ejemplo n.º 5
0
    def __init__(self, relay, plex=None, sock=None):

        s_eventbus.EventBus.__init__(self)
        self.onfini(self._onProxyFini)

        # NOTE: the _tele_ prefixes are designed to prevent accidental
        #       derefs with overlapping names from working correctly

        self._tele_sid = None

        self._tele_q = s_queue.Queue()
        self._tele_pushed = {}

        if plex is None:
            plex = s_socket.Plex()

        self._tele_plex = plex
        self._tele_boss = s_async.Boss()

        self._tele_plex.on('link:sock:mesg', self._onLinkSockMesg)

        self._raw_on('tele:yield:init', self._onTeleYieldInit)
        self._raw_on('tele:yield:item', self._onTeleYieldItem)
        self._raw_on('tele:yield:fini', self._onTeleYieldFini)

        self._raw_on('job:done', self._tele_boss.dist)
        self._raw_on('sock:gzip', self._onSockGzip)
        self._raw_on('tele:call', self._onTeleCall)

        poolmax = relay.getLinkProp('poolmax', -1)
        poolsize = relay.getLinkProp('poolsize', 0)

        self._tele_cthr = self.consume(self._tele_q)
        self._tele_pool = s_threads.Pool(size=poolsize, maxsize=poolmax)

        self._tele_ons = {}

        self._tele_sock = None
        self._tele_relay = relay  # LinkRelay()
        self._tele_link = relay.link
        self._tele_yields = {}
        self._tele_csides = {}
        self._tele_reflect = None

        # obj name is path minus leading "/"
        self._tele_name = relay.link[1].get('path')[1:]

        if sock is None:
            sock = self._tele_relay.connect()

        self._initTeleSock(sock=sock)
Ejemplo n.º 6
0
    def __init__(self, relay, plex=None):

        s_eventbus.EventBus.__init__(self)
        self.onfini(self._onProxyFini)

        # NOTE: the _tele_ prefixes are designed to prevent accidental
        #       derefs with overlapping names from working correctly

        self._tele_sid = None
        self._tele_pki = None

        self._tele_q = s_queue.Queue()
        self._tele_pushed = {}

        if plex == None:
            plex = s_socket.Plex()

        self._tele_plex = plex
        self._tele_boss = s_async.Boss()

        self._raw_on('tele:yield:init', self._onTeleYieldInit)
        self._raw_on('tele:yield:item', self._onTeleYieldItem)
        self._raw_on('tele:yield:fini', self._onTeleYieldFini)

        self._raw_on('job:done', self._tele_boss.dist)
        self._raw_on('tele:call', self._onTeleCall)

        poolmax = relay.getLinkProp('poolmax', -1)
        poolsize = relay.getLinkProp('poolsize', 0)

        self._tele_cthr = self.consume(self._tele_q)
        self._tele_pool = s_threads.Pool(size=poolsize, maxsize=poolmax)

        self._tele_ons = set()
        self._tele_sock = None
        self._tele_relay = relay  # LinkRelay()
        self._tele_yields = {}

        # obj name is path minus leading "/"
        self._tele_name = relay.link[1].get('path')[1:]

        if relay.getLinkProp('pki'):

            #TODO pkiurl

            self._tele_pki = relay.getLinkProp('pkistor')
            if self._tele_pki == None:
                self._tele_pki = s_pki.getUserPki()

        self._initTeleSock()
Ejemplo n.º 7
0
    def __init__(self, pool=None):
        EventBus.__init__(self)
        DmonConf.__init__(self)

        self.auth = None
        self.socks = {}  # sockets by iden
        self.shared = {}  # objects provided by daemon
        self.pushed = {}  # objects provided by sockets
        self.csides = {}  # item:[ (name,path), ... ]
        self.reflect = {}  # objects reflect info by name

        self._dmon_ons = {}
        self._dmon_links = []  # list of listen links
        self._dmon_yields = set()

        if pool is None:
            pool = s_threads.Pool(size=8, maxsize=-1)

        self.pool = pool
        self.plex = s_socket.Plex()
        self.cura = s_session.Curator()

        self.onfini(self.plex.fini)
        self.onfini(self.pool.fini)
        self.onfini(self.cura.fini)

        self.on('link:sock:init', self._onLinkSockInit)
        self.plex.on('link:sock:mesg', self._onLinkSockMesg)

        self.mesgfuncs = {}

        self.setMesgFunc('tele:syn', self._onTeleSynMesg)
        self.setMesgFunc('sock:gzip', self._onSockGzipMesg)

        self.setMesgFunc('tele:call', self._onTeleCallMesg)

        # for "client shared" objects...
        self.setMesgFunc('tele:push', self._onTelePushMesg)
        self.setMesgFunc('tele:retn', self._onTeleRetnMesg)

        self.setMesgFunc('tele:on', self._onTeleOnMesg)
        self.setMesgFunc('tele:off', self._onTeleOffMesg)

        self.setMesgFunc('tele:yield:fini', self._onTeleYieldFini)
Ejemplo n.º 8
0
    def test_sock_plex_txbuf(self):
        # windows sockets seem to allow *huge* buffers in non-blocking
        # so triggering txbuf takes *way* too much ram to be a feasable test
        if s_thishost.get('platform') == 'windows':
            return

        plex = s_socket.Plex()

        s1, s2 = s_socket.socketpair()

        plex.addPlexSock(s2)
        self.eq(len(plex.getPlexSocks()), 2)

        # the rx socket is a blocking socket which cause calls to
        # rx() to block on the recv() call in the main thread of
        # the python program

        t0 = tufo('hi', there='there')
        t1 = tufo('OMG', y='A' * 409000)
        t2 = tufo('foo', bar='baz')

        s2.tx(t0)
        m0 = s1.recvobj()
        self.eq(m0[0], 'hi')

        # So this is pushing a large message which is going to be
        # transmitted in parts - hence the NEXT assertion statement
        s2.tx(t1)

        self.nn(s2.txbuf)

        s2.tx(t2)

        self.eq(len(s2.txque), 1)

        m1 = s1.recvobj()
        m2 = s1.recvobj()

        self.eq(len(m1[1].get('y')), 409000)
        self.eq(m2[0], 'foo')

        s1.fini()
        s2.fini()
        plex.fini()
Ejemplo n.º 9
0
    def __init__(self, core=None, pool=None):
        EventBus.__init__(self)
        DmonConf.__init__(self)

        if core == None:
            core = s_cortex.openurl('ram:///')

        self.socks = {}  # sockets by iden
        self.shared = {}  # objects provided by daemon
        self.pushed = {}  # objects provided by sockets

        self._dmon_links = []  # list of listen links
        self._dmon_yields = set()

        if pool == None:
            pool = s_threads.Pool(size=8, maxsize=-1)

        self.pki = s_pki.PkiStor(core)

        self.pool = pool
        self.core = core
        self.plex = s_socket.Plex()

        self.onfini(self.plex.fini)
        self.onfini(self.pool.fini)

        self.on('link:sock:init', self._onLinkSockInit)
        self.plex.on('link:sock:mesg', self._onLinkSockMesg)

        self.mesgfuncs = {}

        self.setMesgFunc('tele:syn', self._onTeleSynMesg)

        self.setMesgFunc('tele:skey', self._onTeleSkeyMesg)
        self.setMesgFunc('tele:call', self._onTeleCallMesg)

        # for "client shared" objects...
        self.setMesgFunc('tele:push', self._onTelePushMesg)
        self.setMesgFunc('tele:retn', self._onTeleRetnMesg)

        self.setMesgFunc('tele:on', self._onTeleOnMesg)
        self.setMesgFunc('tele:off', self._onTeleOffMesg)

        self.setMesgFunc('tele:yield:fini', self._onTeleYieldFini)