Ejemplo n.º 1
0
    def test_unix_abort(self):
        item = mkdtemp()

        try:
            url = f'unix://{item}/socket.sock'
            with Transport.from_url(url + '#bind') as s, Transport.from_url(url) as c:
                c.send(Packet(url, b'123'))

                c.close()

                for x in s.read():
                    break
                else:
                    raise ValueError('asd')

                try:
                    for _ in s.read():
                        pass
                except ConnectionAbortedError:
                    pass

                self.assertEqual(0, len(s._fd_clients))

                s.send(Packet(x.addr, x.data + b'__rep'))
        finally:
            shutil.rmtree(item)
Ejemplo n.º 2
0
    def test_max_sendto(self):
        S_ADDR = 'udp://0.0.0.0:23454'
        ATTEMPTS = 5
        with Transport.from_url(S_ADDR) as ts, Transport.from_url('udp://') as tc:
            for i in [1, 100, 1000, 10000, 50000] + [2**16-1000]:
                for y in range(ATTEMPTS):
                    pkt = Packet(S_ADDR, b'\x00' * i)
                    tc.send(pkt)

                    select_helper([ts.fd], max_wait=1.)

                    for pkt2 in ts.read():
                        pass
Ejemplo n.º 3
0
    def test_unix_autopath(self):

        url = 'unix://'

        with Transport.from_url(url + '#bind') as s:
            with Transport.from_url(s.origin) as c:
                pkt = Packet(s.origin, b'asd')
                c.send(pkt)

                for x in s.read(select_helper(s.fds)):
                    pkt_addr = urlparse(pkt.addr)
                    pkt_addr = urlunparse(pkt_addr._replace(netloc='0'))
                    pkt = replace(pkt, addr=pkt_addr)
                    self.assertEqual(pkt, x)
Ejemplo n.º 4
0
def generic_b_main(addr_b, addr_a):
    rpc = GenericRPC[int]

    t = Transport.from_url(addr_b, )

    with t:
        ts = EventLoop()
        tref = ts.transport_add(t)
        pt = ServiceDefn.from_cls(rpc)
        r: GenericRPC[int] = build_wrapper(pt,
                                           tref,
                                           addr_a,
                                           conf=ClientConfig(timeout_total=5))

        while True:
            try:
                a = r.process(5)

                assert a == Data(5), a
                break
            except HorizonPassedError:
                sleep(0)

        while True:
            try:
                a = r.process_blunt(5)

                assert a == 5, a
                return
            except HorizonPassedError:
                sleep(0)
Ejemplo n.º 5
0
    def add_transport(self, group: str, url: str) -> ELTransportRef:
        tran = Transport.from_url(url)

        tref = self.el.transport_add(tran)

        self.chans[group] = tref.idx

        return tref
Ejemplo n.º 6
0
    def test_unix_abort_select(self):
        item = mkdtemp()

        try:
            url = f'unix://{item}/socket.sock'
            with Transport.from_url(url + '#bind') as s, Transport.from_url(url) as c:
                for _ in s.read():
                    pass
                c.close()

                try:
                    for _ in s.read():
                        pass
                except ConnectionAbortedError:
                    pass

                self.assertEqual(0, len(s._fd_clients))
        finally:
            shutil.rmtree(item)
Ejemplo n.º 7
0
    def establish_transport(self):

        self.has_transport = True

        self.path_temp = mkdtemp()

        self.path_unix = 'unix://' + os.path.join(self.path_temp, 'sock.sock')
        self.tran = Transport.from_url(self.path_unix + '#bind')
        self.tran_ref = self.el.transport_add(self.tran)
        self.tran_ref.push_raw(ELPollEntry(self.handle_packet, ))

        self.logger('tran.est').debug('%s', self.path_unix)
Ejemplo n.º 8
0
def main(server_url, conf=ClientConfig(timeout_total=5), **kwargs):
    service_type = Broker[str, str]
    T: Type[service_type] = service_type.__class__

    t = Transport.from_url('udp://0.0.0.0')

    with t:
        ts = EventLoop()
        ets = ts.transport_add(t)
        pt = ServiceDefn.from_cls(service_type)
        r: T = build_wrapper(pt, ets, server_url, conf=conf)

        print(r.metrics())
Ejemplo n.º 9
0
    def test_unix(self):
        item = mkdtemp()

        try:
            url = f'unix://{item}/socket.sock'
            with Transport.from_url(url + '#bind') as s, Transport.from_url(url) as c:
                c.send(Packet(url, b'123'))

                for x in s.read():
                    break
                else:
                    raise ValueError('asd')

                s.send(Packet(x.addr, x.data + b'__rep'))

                for x in c.read():
                    break
                else:
                    raise ValueError('asd')

                self.assertEqual(b'123__rep', x.data)
        finally:
            shutil.rmtree(item)
Ejemplo n.º 10
0
    def test_udp(self):
        rpc = ExemplaryRPC

        t = Transport.from_url('udp://127.0.0.1:8905')

        with t:
            ts = EventLoop()
            tref = ts.transport_add(t)
            pt = ServiceDefn.from_cls(rpc)
            with self.assertRaises(error.TimeoutError):
                r: ExemplaryRPC = build_wrapper(
                    pt,
                    tref,
                    'udp://127.0.0.1:7483',
                    conf=ClientConfig(timeout_total=2.))

                a = r.move_something(5, 6, 8, pop='asd')
                b = r.reply(5, 6, 8, pop='asd')
Ejemplo n.º 11
0
def client_transport(rpc: Type[T],
                     dest: str = 'udp://127.0.0.1:7483',
                     conf: Optional[ClientConfig] = None,
                     origin: str = 'udp://127.0.0.1',
                     **kwargs) -> ContextManager[T]:
    t = Transport.from_url(origin)

    if conf is None:
        conf = ClientConfig(**kwargs)

    def client_cb(p):
        raise ClientTransportCircuitBreaker(p)

    with t:
        ts = EventLoop()
        tref = ts.transport_add(t)
        # we may receive packets which are replies to things that are too late
        tref.push(
            ELPktEntry(lambda p: p.packet.type != RPCPacketType.Rep, client_cb,
                       raise_exc_handler))
        pt = ServiceDefn.from_cls(rpc)
        r: T = build_wrapper(pt, tref, dest, conf=conf)

        yield r
Ejemplo n.º 12
0
 def test_sendto_url(self):
     with Transport.from_url('udp://0.0.0.0:23454') as t:
         t.send(Packet('udp://127.0.0.1:23453', b''))
Ejemplo n.º 13
0
 def test_cool(self):
     with Transport.from_url('udp://0.0.0.0:23454') as t:
         pass
Ejemplo n.º 14
0
 def test_empty_addr_any(self):
     with Transport.from_url('udp://') as t:
         pass
Ejemplo n.º 15
0
 def test_empty_port_any(self):
     with Transport.from_url('udp://0.0.0.0') as t:
         pass
Ejemplo n.º 16
0
    def signal_handler(self, sig, frame):
        self.logger('hdlr.x').info('%s %s', sig, frame)

        with Transport.from_url(self.path_unix) as t:
            sig = str(sig).encode()
            t.send(Packet(self.path_unix, sig))
Ejemplo n.º 17
0
 def test_unknown_hostname(self):
     with Transport.from_url('udp://0.0.0.0') as t:
         t.send(Packet('udp://unknown_hostname:234', b'123'))
Ejemplo n.º 18
0
 def test_empty_port_local(self):
     with Transport.from_url('udp://127.0.0.1') as t:
         pass