Revision 55e711aa test/py/ganeti.hypervisor.hv_kvm_unittest.py
b/test/py/ganeti.hypervisor.hv_kvm_unittest.py | ||
---|---|---|
86 | 86 |
""" |
87 | 87 |
threading.Thread.__init__(self) |
88 | 88 |
self.socket_filename = socket_filename |
89 |
self.script = server_responses |
|
89 |
self.script = server_responses[:]
|
|
90 | 90 |
|
91 | 91 |
self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) |
92 | 92 |
self.socket.bind(self.socket_filename) |
... | ... | |
168 | 168 |
|
169 | 169 |
|
170 | 170 |
class TestQmp(testutils.GanetiTestCase): |
171 |
def testQmp(self): |
|
172 |
requests = [ |
|
173 |
{"execute": "query-kvm", "arguments": []}, |
|
174 |
{"execute": "eject", "arguments": {"device": "ide1-cd0"}}, |
|
175 |
{"execute": "query-status", "arguments": []}, |
|
176 |
{"execute": "query-name", "arguments": []}, |
|
177 |
] |
|
178 |
|
|
179 |
server_responses = [ |
|
180 |
# One message, one send() |
|
181 |
'{"return": {"enabled": true, "present": true}}\r\n', |
|
182 |
|
|
183 |
# Message sent using multiple send() |
|
184 |
['{"retur', 'n": {}}\r\n'], |
|
185 |
|
|
186 |
# Multiple messages sent using one send() |
|
187 |
'{"return": [{"name": "quit"}, {"name": "eject"}]}\r\n' |
|
188 |
'{"return": {"running": true, "singlestep": false}}\r\n', |
|
189 |
] |
|
190 |
|
|
191 |
expected_responses = [ |
|
192 |
{"enabled": True, "present": True}, |
|
193 |
{}, |
|
194 |
[{"name": "quit"}, {"name": "eject"}], |
|
195 |
{"running": True, "singlestep": False}, |
|
196 |
] |
|
171 |
REQUESTS = [ |
|
172 |
{"execute": "query-kvm", "arguments": []}, |
|
173 |
{"execute": "eject", "arguments": {"device": "ide1-cd0"}}, |
|
174 |
{"execute": "query-status", "arguments": []}, |
|
175 |
{"execute": "query-name", "arguments": []}, |
|
176 |
] |
|
177 |
|
|
178 |
SERVER_RESPONSES = [ |
|
179 |
# One message, one send() |
|
180 |
'{"return": {"enabled": true, "present": true}}\r\n', |
|
181 |
|
|
182 |
# Message sent using multiple send() |
|
183 |
['{"retur', 'n": {}}\r\n'], |
|
184 |
|
|
185 |
# Multiple messages sent using one send() |
|
186 |
'{"return": [{"name": "quit"}, {"name": "eject"}]}\r\n' |
|
187 |
'{"return": {"running": true, "singlestep": false}}\r\n', |
|
188 |
] |
|
189 |
|
|
190 |
EXPECTED_RESPONSES = [ |
|
191 |
{"enabled": True, "present": True}, |
|
192 |
{}, |
|
193 |
[{"name": "quit"}, {"name": "eject"}], |
|
194 |
{"running": True, "singlestep": False}, |
|
195 |
] |
|
197 | 196 |
|
197 |
def testQmp(self): |
|
198 | 198 |
# Set up the stub |
199 | 199 |
socket_file = tempfile.NamedTemporaryFile() |
200 | 200 |
os.remove(socket_file.name) |
201 |
qmp_stub = QmpStub(socket_file.name, server_responses)
|
|
201 |
qmp_stub = QmpStub(socket_file.name, self.SERVER_RESPONSES)
|
|
202 | 202 |
qmp_stub.start() |
203 | 203 |
|
204 | 204 |
# Set up the QMP connection |
... | ... | |
206 | 206 |
qmp_connection.connect() |
207 | 207 |
|
208 | 208 |
# Format the script |
209 |
for request, expected_response in zip(requests, expected_responses): |
|
209 |
for request, expected_response in zip(self.REQUESTS, |
|
210 |
self.EXPECTED_RESPONSES): |
|
210 | 211 |
response = qmp_connection.Execute(request["execute"], |
211 | 212 |
request["arguments"]) |
212 | 213 |
self.assertEqual(response, expected_response) |
... | ... | |
218 | 219 |
qmp_connection.Execute, |
219 | 220 |
"unsupported-command") |
220 | 221 |
|
222 |
def testQmpContextManager(self): |
|
223 |
# Set up the stub |
|
224 |
socket_file = tempfile.NamedTemporaryFile() |
|
225 |
os.remove(socket_file.name) |
|
226 |
qmp_stub = QmpStub(socket_file.name, self.SERVER_RESPONSES) |
|
227 |
qmp_stub.start() |
|
228 |
|
|
229 |
# Test the context manager functionality |
|
230 |
with hv_kvm.QmpConnection(socket_file.name) as qmp: |
|
231 |
for request, expected_response in zip(self.REQUESTS, |
|
232 |
self.EXPECTED_RESPONSES): |
|
233 |
response = qmp.Execute(request["execute"], request["arguments"]) |
|
234 |
self.assertEqual(response, expected_response) |
|
235 |
|
|
221 | 236 |
|
222 | 237 |
class TestConsole(unittest.TestCase): |
223 | 238 |
def _Test(self, instance, node, group, hvparams): |
Also available in: Unified diff