def test_client_execute_command(): c = Client() c.execute_command(Op.WRITE, "/foo/bar", "baz") # a) arguments contain invalid characters. with pytest.raises(ValueError): c.execute_command(Op.DEBUG, "\x07foo") # b) command validator fails. c.COMMAND_VALIDATORS[Op.DEBUG] = lambda *args: False with pytest.raises(ValueError): c.execute_command(Op.DEBUG, "foo") c.COMMAND_VALIDATORS.pop(Op.DEBUG) # c) ``Packet`` constructor fails. with pytest.raises(InvalidPayload): c.execute_command(Op.WRITE, "/foo/bar", "baz" * 4096) # d) XenStore returned an error code. with pytest.raises(PyXSError): c.execute_command(Op.READ, "/path/to/something") _old_recv = c.connection.recv # e) XenStore returns a packet with invalid operation in the header. c.connection.recv = lambda *args: Packet(Op.DEBUG, "boo") with pytest.raises(UnexpectedPacket): c.execute_command(Op.READ, "/foo/bar") c.connection.recv = _old_recv # d) XenStore returns a packet with invalid transaction id in the # header. c.connection.recv = lambda *args: Packet(Op.READ, "boo", tx_id=42) with pytest.raises(UnexpectedPacket): c.execute_command(Op.READ, "/foo/bar") c.connection.recv = _old_recv # e) ... and a hack for ``XenBusConnection`` c = Client(connection=XenBusConnection()) c.connection.recv = lambda *args: Packet(Op.READ, "boo", tx_id=42) try: c.execute_command(Op.READ, "/foo/bar") except UnexpectedPacket as e: pytest.fail("No error should've been raised, got: {0}" .format(e)) c.connection.recv = _old_recv # f) Got a WATCH_EVENT instead of an expected packet type, making # sure it's queued properly. def recv(*args): if hasattr(recv, "called"): return Packet(Op.READ, "boo") else: recv.called = True return Packet(Op.WATCH_EVENT, "boo") c.connection.recv = recv try: c.execute_command(Op.READ, "/foo/bar") except UnexpectedPacket as e: pytest.fail("No error should've been raised, got: {0}" .format(e)) else: assert len(c.events) is 1 assert c.events[0] == Packet(Op.WATCH_EVENT, "boo") c.connection.recv = _old_recv # Cleaning up. with Client() as c: c.execute_command(Op.RM, "/foo/bar")
def test_init(self): c = Client(router=xenbus.XenGuestRouter(XenBusConnection())) assert isinstance(c.router.connection, XenBusConnection) assert not c.router.thread.is_alive()
import sys import os from pyxs.connection import XenBusConnection from pyxs.client import Client from novaagent.xenbus import XenGuestRouter from novaagent.libs import centos from novaagent.libs import debian from novaagent.libs import redhat from novaagent import utils log = logging.getLogger(__name__) # Connect to Xenbus in order to interact with xenstore XENBUS_ROUTER = XenGuestRouter(XenBusConnection()) def action(server_os, client=None): for uuid in utils.list_xen_events(client): event = utils.get_xen_event(uuid, client) log.info('Event: {0} -> {1}'.format(uuid, event['name'])) command_return = ('', '') if hasattr(server_os, event['name']): run_command = getattr(server_os, event['name']) command_return = run_command(event['name'], event['value'], client) utils.remove_xenhost_event(uuid, client) message = command_return[1] return_code = command_return[0] if command_return[0] == '':