Beispiel #1
0
    def get_bs_pair():
        x, y = socket.socketpair()
        bx, by = BufferedSocket(x), BufferedSocket(y)

        # sanity check
        by.sendall(b'123')
        bx.recv_size(3) == b'123'

        return bx, by
Beispiel #2
0
    def get_bs_pair():
        x, y = socket.socketpair()
        bx, by = BufferedSocket(x), BufferedSocket(y)

        # sanity check
        by.sendall(b'123')
        bx.recv_size(3) == b'123'

        return bx, by
Beispiel #3
0
 def call(self, *commands):
     '''
     Helper function that implements a (subset of) the RESP
     protocol used by Redis >= 1.2
     '''
     cm = context.get_context().connection_mgr
     sock = BufferedSocket(cm.get_connection(self.address))
     # ARRAY: first byte *, decimal length, \r\n, contents
     out = ['*' + str(len(commands))] + \
         ["${0}\r\n{1}".format(len(e), e) for e in commands]
     out = "\r\n".join(out) + "\r\n"
     sock.send(out)
     fbyte = sock.peek(1)
     if fbyte == "-":  # error string
         raise RedisError(sock.recv_until('\r\n'))
     elif fbyte == '+':  # simple string
         resp = sock.recv_until('\r\n')[1:]
     elif fbyte == '$':  # bulk string
         length = int(sock.recv_until('\r\n')[1:])
         if length == -1:
             resp = None
         else:
             resp = sock.recv_size(length)
     cm.release_connection(sock)
     return resp
Beispiel #4
0
def test_short_lines():
    for ms in (2, 4, 6, 1024, None):
        x, y = socket.socketpair()
        bs = BufferedSocket(x)
        y.sendall(b'1\n2\n3\n')
        assert bs.recv_until(b'\n', maxsize=ms) == b'1'
        assert bs.recv_until(b'\n', maxsize=ms) == b'2'
        y.close()
        assert bs.recv_close(maxsize=ms) == b'3\n'

        try:
            bs.recv_size(1)
        except ConnectionClosed:
            pass
        else:
            assert False, 'expected ConnectionClosed'

        bs.close()
    return
Beispiel #5
0
def test_short_lines():
    for ms in (2, 4, 6, 1024, None):
        x, y = socket.socketpair()
        bs = BufferedSocket(x)
        y.sendall(b'1\n2\n3\n')
        assert bs.recv_until(b'\n', maxsize=ms) == b'1'
        assert bs.recv_until(b'\n', maxsize=ms) == b'2'
        y.close()
        assert bs.recv_close(maxsize=ms) == b'3\n'

        try:
            bs.recv_size(1)
        except ConnectionClosed:
            pass
        else:
            assert False, 'expected ConnectionClosed'

        bs.close()
    return
Beispiel #6
0
def test_buffers():
    x, y = socket.socketpair()
    bx, by = BufferedSocket(x), BufferedSocket(y)

    assert by.getrecvbuffer() == b''
    assert by.getsendbuffer() == b''

    assert bx.getrecvbuffer() == b''

    by.buffer(b'12')
    by.sendall(b'3')
    assert bx.recv_size(1) == b'1'

    assert bx.getrecvbuffer() == b'23'

    return
Beispiel #7
0
def test_buffers():
    x, y = socket.socketpair()
    bx, by = BufferedSocket(x), BufferedSocket(y)

    assert by.getrecvbuffer() == b''
    assert by.getsendbuffer() == b''

    assert bx.getrecvbuffer() == b''

    by.buffer(b'12')
    by.sendall(b'3')
    assert bx.recv_size(1) == b'1'

    assert bx.getrecvbuffer() == b'23'

    return
Beispiel #8
0
 def handle_client(self, sock, addr):
     'Make sockets available to next process.'
     bsock = BufferedSocket(sock)
     secret = bsock.recv_size(len(self.secret))
     if secret != self.secret:
         bsock.send('BAD SECRET.')
         sock.close()
         return
     send_socks = []
     for server_sock in self.sockets.values():
         if sock.getsockname() == server_sock.getsockname():
             continue  # exclude the socket-passing-socket
         send_socks.append(server_sock)
     sock.send(str(len(send_socks)) + '.')
     for server_sock in send_socks:
         sendfileobj.sendfileobj(sock, server_sock)
     sock.close()
Beispiel #9
0
def test_split_delim():
    delim = b'\r\n'
    first = b'1234\r'
    second = b'\n5'

    x, y = socket.socketpair()
    bs = BufferedSocket(x)

    y.sendall(first)
    try:
        bs.recv_until(delim, timeout=0.0001)
    except Timeout:
        pass
    y.sendall(second)

    assert bs.recv_until(delim, with_delimiter=True) == b'1234\r\n'
    assert bs.recv_size(1) == b'5'
    return
Beispiel #10
0
def test_split_delim():
    delim = b'\r\n'
    first = b'1234\r'
    second = b'\n5'

    x, y = socket.socketpair()
    bs = BufferedSocket(x)

    y.sendall(first)
    try:
        bs.recv_until(delim, timeout=0.0001)
    except Timeout:
        pass
    y.sendall(second)

    assert bs.recv_until(delim, with_delimiter=True) == b'1234\r\n'
    assert bs.recv_size(1) == b'5'
    return