diff options
Diffstat (limited to 'tests/mocks.py')
-rw-r--r-- | tests/mocks.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/mocks.py b/tests/mocks.py new file mode 100644 index 0000000..d7d450e --- /dev/null +++ b/tests/mocks.py @@ -0,0 +1,41 @@ +# Various mocks for testing + + +class MockSocket: + """ + A class simulating an readable socket, optionally raising a + special exception every other read. + """ + + class TestError(BaseException): + pass + + def __init__(self, data, interrupt_every=0): + self.data = data + self.counter = 0 + self.pos = 0 + self.interrupt_every = interrupt_every + + def tick(self): + self.counter += 1 + if not self.interrupt_every: + return + if (self.counter % self.interrupt_every) == 0: + raise self.TestError() + + def recv(self, bufsize): + self.tick() + bufsize = min(5, bufsize) # truncate the read size + result = self.data[self.pos : self.pos + bufsize] + self.pos += len(result) + return result + + def recv_into(self, buffer, nbytes=0, flags=0): + self.tick() + if nbytes == 0: + nbytes = len(buffer) + nbytes = min(5, nbytes) # truncate the read size + result = self.data[self.pos : self.pos + nbytes] + self.pos += len(result) + buffer[: len(result)] = result + return len(result) |