mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 10:44:09 -04:00
Add tests for the ring buffer
This commit is contained in:
parent
f527f41389
commit
a485b61fe1
@ -29,6 +29,59 @@ class LoopTest(BaseTest):
|
|||||||
server.join()
|
server.join()
|
||||||
self.ae(0, sum(int(w.is_alive()) for w in server.loop.pool.workers))
|
self.ae(0, sum(int(w.is_alive()) for w in server.loop.pool.workers))
|
||||||
|
|
||||||
|
def test_ring_buffer(self):
|
||||||
|
class FakeSocket(object):
|
||||||
|
def __init__(self, data):
|
||||||
|
self.data = data
|
||||||
|
|
||||||
|
def recv_into(self, mv):
|
||||||
|
sz = min(len(mv), len(self.data))
|
||||||
|
mv[:sz] = self.data[:sz]
|
||||||
|
return sz
|
||||||
|
from calibre.srv.loop import ReadBuffer, READ, WRITE
|
||||||
|
buf = ReadBuffer(100)
|
||||||
|
def write(data):
|
||||||
|
return buf.recv_from(FakeSocket(data))
|
||||||
|
def set(data, rpos, wpos, state):
|
||||||
|
buf.ba = bytearray(data)
|
||||||
|
buf.buf = memoryview(buf.ba)
|
||||||
|
buf.read_pos, buf.write_pos, buf.full_state = rpos, wpos, state
|
||||||
|
|
||||||
|
self.ae(b'', buf.read(10))
|
||||||
|
self.assertTrue(buf.has_space), self.assertFalse(buf.has_data)
|
||||||
|
self.ae(write(b'a'*50), 50)
|
||||||
|
self.ae(write(b'a'*50), 50)
|
||||||
|
self.ae(write(b'a'*50), 0)
|
||||||
|
self.ae(buf.read(1000), bytes(buf.ba))
|
||||||
|
self.ae(b'', buf.read(10))
|
||||||
|
self.ae(write(b'a'*10), 10)
|
||||||
|
numbers = bytes(bytearray(xrange(10)))
|
||||||
|
set(numbers, 1, 3, READ)
|
||||||
|
self.ae(buf.read(1), b'\x01')
|
||||||
|
self.ae(buf.read(10), b'\x02')
|
||||||
|
self.ae(buf.full_state, WRITE)
|
||||||
|
set(numbers, 3, 1, READ)
|
||||||
|
self.ae(buf.read(1), b'\x03')
|
||||||
|
self.ae(buf.read(10), b'\x04\x05\x06\x07\x08\x09\x00')
|
||||||
|
set(numbers, 1, 3, READ)
|
||||||
|
self.ae(buf.readline(), b'\x01\x02')
|
||||||
|
set(b'123\n', 0, 3, READ)
|
||||||
|
self.ae(buf.readline(), b'123')
|
||||||
|
set(b'123\n', 0, 0, READ)
|
||||||
|
self.ae(buf.readline(), b'123\n')
|
||||||
|
self.ae(buf.full_state, WRITE)
|
||||||
|
set(b'1\n2345', 2, 2, READ)
|
||||||
|
self.ae(buf.readline(), b'23451\n')
|
||||||
|
self.ae(buf.full_state, WRITE)
|
||||||
|
set(b'1\n2345', 1, 1, READ)
|
||||||
|
self.ae(buf.readline(), b'\n')
|
||||||
|
set(b'1\n2345', 4, 1, READ)
|
||||||
|
self.ae(buf.readline(), b'451')
|
||||||
|
set(b'1\n2345', 4, 2, READ)
|
||||||
|
self.ae(buf.readline(), b'451\n')
|
||||||
|
set(b'123456\n7', 4, 2, READ)
|
||||||
|
self.ae(buf.readline(), b'56\n')
|
||||||
|
|
||||||
@skipIf(create_server_cert is None, 'certgen module not available')
|
@skipIf(create_server_cert is None, 'certgen module not available')
|
||||||
def test_ssl(self):
|
def test_ssl(self):
|
||||||
'Test serving over SSL'
|
'Test serving over SSL'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user