Skip to content

Commit 1483f9d

Browse files
toudimindflayer
authored andcommitted
Add missing truncate() call on BytesIO object (#52)
* When subsequent payload to be pushed by mocket was shorter than previous one, additional data were dumped. This was because BytesIO object had the longer length; calling truncate() on the BytesIO object solves this problem
1 parent 53cc4cf commit 1483f9d

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

mocket/mocket.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ def sendall(self, data, *args, **kwargs):
199199

200200
self.fd.seek(0)
201201
self.fd.write(response)
202+
self.fd.truncate()
202203
self.fd.seek(0)
203204

204205
def recv(self, buffersize, flags=None):

tests/main/test_mocket.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,25 @@ def test_getresponse(self):
7474
def test_empty_getresponse(self):
7575
entry = MocketEntry(('localhost', 8080), [])
7676
self.assertEqual(entry.get_response(), encode_to_bytes(''))
77+
78+
@mocketize
79+
def test_subsequent_recv_requests_have_correct_length(self):
80+
Mocket.register(
81+
MocketEntry(
82+
('localhost', 80),
83+
[
84+
b'Long payload',
85+
b'Short'
86+
]
87+
)
88+
)
89+
_so = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
90+
_so.connect(('localhost', 80))
91+
_so.sendall(b'first\r\n')
92+
assert _so.recv(4096) == b'Long payload'
93+
_so.sendall(b'second\r\n')
94+
assert _so.recv(4096) == b'Short'
95+
_so.close()
7796

7897

7998
class MocketizeTestCase(TestCase):

0 commit comments

Comments
 (0)