Skip to content

Commit 79d1dff

Browse files
authored
Merge pull request #940 from Bastian-Krause/bst/qemu-read-max-size
driver/qemudriver: let _read() handle max_size kwarg
2 parents a404bdc + cde4e2a commit 79d1dff

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

labgrid/driver/qemudriver.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,13 +231,15 @@ def monitor_command(self, command):
231231
"Can't use monitor command on non-running target")
232232
return self.qmp.execute(command)
233233

234-
def _read(self, size=1, timeout=10):
234+
def _read(self, size=1, timeout=10, max_size=None):
235235
ready, _, _ = select.select([self._clientsocket], [], [], timeout)
236236
if ready:
237237
# Collect some more data
238238
time.sleep(0.01)
239239
# Always read a page, regardless of size
240-
res = self._clientsocket.recv(4096)
240+
size = 4096
241+
size = min(max_size, size) if max_size else size
242+
res = self._clientsocket.recv(size)
241243
else:
242244
raise TIMEOUT(f"Timeout of {timeout:.2f} seconds exceeded")
243245
return res

tests/test_qemudriver.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,46 @@ def qemu_driver(qemu_target):
4141
rootfs='rootfs')
4242
return q
4343

44+
@pytest.fixture
45+
def qemu_mock(mocker):
46+
popen_mock = mocker.patch('subprocess.Popen')
47+
popen_mock.return_value.wait.return_value = 0
48+
popen_mock.return_value.stdout.readline.return_value = b"""
49+
{
50+
"QMP": {
51+
"version": {}
52+
},
53+
"return": {}
54+
}
55+
"""
56+
57+
select_mock = mocker.patch('select.select')
58+
select_mock.return_value = True, None, None
59+
60+
socket_mock = mocker.patch('socket.socket')
61+
socket_mock.return_value.accept.return_value = mocker.MagicMock(), ''
62+
4463
def test_qemu_instance(qemu_target, qemu_driver):
4564
assert (isinstance(qemu_driver, QEMUDriver))
4665

4766
def test_qemu_activate_deactivate(qemu_target, qemu_driver):
4867
qemu_target.activate(qemu_driver)
4968
qemu_target.deactivate(qemu_driver)
69+
70+
def test_qemu_on_off(qemu_target, qemu_driver, qemu_mock):
71+
qemu_target.activate(qemu_driver)
72+
73+
qemu_driver.on()
74+
qemu_driver.off()
75+
76+
qemu_target.deactivate(qemu_driver)
77+
78+
def test_qemu_read_write(qemu_target, qemu_driver, qemu_mock):
79+
qemu_target.activate(qemu_driver)
80+
81+
qemu_driver.on()
82+
qemu_driver.read()
83+
qemu_driver.read(max_size=10)
84+
qemu_driver.write(b'abc')
85+
86+
qemu_target.deactivate(qemu_driver)

0 commit comments

Comments
 (0)