def test_test(self): """ Test the hardware testing mode. """ # Test the driver is in state unconfigured. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, DriverConnectionState.UNCONFIGURED) # Configure driver for comms and transition to disconnected. reply = self._dvr_client.cmd_dvr('configure', COMMS_CONFIG) # Test the driver is configured for comms. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, DriverConnectionState.DISCONNECTED) # Configure driver for comms and transition to disconnected. reply = self._dvr_client.cmd_dvr('connect') # Test the driver is in unknown state. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, SBE37ProtocolState.UNKNOWN) # Configure driver for comms and transition to disconnected. reply = self._dvr_client.cmd_dvr('discover') # Test the driver is in command mode. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, SBE37ProtocolState.COMMAND) start_time = time.time() reply = self._dvr_client.cmd_dvr('execute_test') # Test the driver is in unknown state. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, SBE37ProtocolState.TEST) while state != SBE37ProtocolState.COMMAND: gevent.sleep(5) elapsed = time.time() - start_time mi_logger.info('Device testing %f seconds elapsed.' % elapsed) state = self._dvr_client.cmd_dvr('get_current_state') # Verify we received the test result and it passed. test_results = [evt for evt in self._events if evt['type']==DriverAsyncEvent.TEST_RESULT] self.assertTrue(len(test_results) == 1) self.assertEqual(test_results[0]['value']['success'], 'Passed') # Configure driver for comms and transition to disconnected. reply = self._dvr_client.cmd_dvr('disconnect') # Test the driver is configured for comms. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, DriverConnectionState.DISCONNECTED) # Initialize the driver and transition to unconfigured. reply = self._dvr_client.cmd_dvr('initialize') # Test the driver is in state unconfigured. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, DriverConnectionState.UNCONFIGURED)
def send_evt_msg(zmq_driver_process): """ Await events on the driver process event queue and publish them on a ZMQ PUB socket to the driver process client. """ context = zmq.Context() sock = context.socket(zmq.PUB) zmq_driver_process.evt_port = sock.bind_to_random_port( zmq_driver_process.event_host_string) mi_logger.info('Driver process event socket bound to %i', zmq_driver_process.evt_port) file(zmq_driver_process.evt_port_fname, 'w+').write(str(zmq_driver_process.evt_port) + '\n') zmq_driver_process.stop_evt_thread = False while not zmq_driver_process.stop_evt_thread: try: evt = zmq_driver_process.events.pop(0) mi_logger.debug('Event thread sending event %s', str(evt)) while evt: try: sock.send_pyobj(evt, flags=zmq.NOBLOCK) evt = None mi_logger.debug('Event sent!') except zmq.ZMQError: time.sleep(.1) if zmq_driver_process.stop_evt_thread: break except IndexError: time.sleep(.1) sock.close() context.term() mi_logger.info('Driver process event socket closed')
def recv_cmd_msg(zmq_driver_process): """ Await commands on a ZMQ REP socket, forwaring them to the driver for processing and returning the result. """ context = zmq.Context() sock = context.socket(zmq.REP) zmq_driver_process.cmd_port = sock.bind_to_random_port( zmq_driver_process.cmd_host_string) mi_logger.info('Driver process cmd socket bound to %i', zmq_driver_process.cmd_port) file(zmq_driver_process.cmd_port_fname, 'w+').write(str(zmq_driver_process.cmd_port) + '\n') zmq_driver_process.stop_cmd_thread = False while not zmq_driver_process.stop_cmd_thread: try: msg = sock.recv_pyobj(flags=zmq.NOBLOCK) mi_logger.debug('Processing message %s', str(msg)) reply = zmq_driver_process.cmd_driver(msg) while True: try: sock.send_pyobj(reply, flags=zmq.NOBLOCK) break except zmq.ZMQError: time.sleep(.1) if zmq_driver_process.stop_cmd_thread: break except zmq.ZMQError: time.sleep(.1) sock.close() context.term() mi_logger.info('Driver process cmd socket closed.')
def send_evt_msg(zmq_driver_process): """ Await events on the driver process event queue and publish them on a ZMQ PUB socket to the driver process client. """ context = zmq.Context() sock = context.socket(zmq.PUB) zmq_driver_process.evt_port = sock.bind_to_random_port(zmq_driver_process.event_host_string) mi_logger.info('Driver process event socket bound to %i', zmq_driver_process.evt_port) file(zmq_driver_process.evt_port_fname,'w+').write(str(zmq_driver_process.evt_port)+'\n') zmq_driver_process.stop_evt_thread = False while not zmq_driver_process.stop_evt_thread: try: evt = zmq_driver_process.events.pop(0) mi_logger.debug('Event thread sending event %s', str(evt)) while evt: try: sock.send_pyobj(evt, flags=zmq.NOBLOCK) evt = None mi_logger.debug('Event sent!') except zmq.ZMQError: time.sleep(.1) if zmq_driver_process.stop_evt_thread: break except IndexError: time.sleep(.1) sock.close() context.term() mi_logger.info('Driver process event socket closed')
def recv_cmd_msg(zmq_driver_process): """ Await commands on a ZMQ REP socket, forwaring them to the driver for processing and returning the result. """ context = zmq.Context() sock = context.socket(zmq.REP) zmq_driver_process.cmd_port = sock.bind_to_random_port(zmq_driver_process.cmd_host_string) mi_logger.info('Driver process cmd socket bound to %i', zmq_driver_process.cmd_port) file(zmq_driver_process.cmd_port_fname,'w+').write(str(zmq_driver_process.cmd_port)+'\n') zmq_driver_process.stop_cmd_thread = False while not zmq_driver_process.stop_cmd_thread: try: msg = sock.recv_pyobj(flags=zmq.NOBLOCK) mi_logger.debug('Processing message %s', str(msg)) reply = zmq_driver_process.cmd_driver(msg) while True: try: sock.send_pyobj(reply, flags=zmq.NOBLOCK) break except zmq.ZMQError: time.sleep(.1) if zmq_driver_process.stop_cmd_thread: break except zmq.ZMQError: time.sleep(.1) sock.close() context.term() mi_logger.info('Driver process cmd socket closed.')
def setUp(self): """ Setup test cases. """ self.device_addr = DEV_ADDR self.device_port = DEV_PORT self.work_dir = WORK_DIR self.delim = DELIM self.driver_class = DVR_CLS self.driver_module = DVR_MOD self._support = DriverIntegrationTestSupport(self.driver_module, self.driver_class, self.device_addr, self.device_port, self.delim, self.work_dir) # Clear driver event list. self._events = [] # The port agent object. Used to start and stop the port agent. self._pagent = None # The driver process popen object. self._dvr_proc = None # The driver client. self._dvr_client = None # Create and start the port agent. mi_logger.info('start') COMMS_CONFIG['port'] = self._support.start_pagent() self.addCleanup(self._support.stop_pagent) # Create and start the driver. self._support.start_driver() self.addCleanup(self._support.stop_driver) # Grab some variables from support that we need self._dvr_client = self._support._dvr_client self._dvr_proc = self._support._dvr_proc self._pagent = self._support._pagent self._events = self._support._events
def test_test(self): """ Test the hardware testing mode. """ # Test the driver is in state unconfigured. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, DriverConnectionState.UNCONFIGURED) # Configure driver for comms and transition to disconnected. reply = self._dvr_client.cmd_dvr('configure', COMMS_CONFIG) # Test the driver is configured for comms. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, DriverConnectionState.DISCONNECTED) # Configure driver for comms and transition to disconnected. reply = self._dvr_client.cmd_dvr('connect') # Test the driver is in unknown state. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, SBE37ProtocolState.UNKNOWN) # Configure driver for comms and transition to disconnected. reply = self._dvr_client.cmd_dvr('discover') # Test the driver is in command mode. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, SBE37ProtocolState.COMMAND) start_time = time.time() reply = self._dvr_client.cmd_dvr('execute_test') # Test the driver is in unknown state. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, SBE37ProtocolState.TEST) while state != SBE37ProtocolState.COMMAND: gevent.sleep(5) elapsed = time.time() - start_time mi_logger.info('Device testing %f seconds elapsed.' % elapsed) state = self._dvr_client.cmd_dvr('get_current_state') # Verify we received the test result and it passed. test_results = [ evt for evt in self._events if evt['type'] == DriverAsyncEvent.TEST_RESULT ] self.assertTrue(len(test_results) == 1) self.assertEqual(test_results[0]['value']['success'], 'Passed') # Configure driver for comms and transition to disconnected. reply = self._dvr_client.cmd_dvr('disconnect') # Test the driver is configured for comms. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, DriverConnectionState.DISCONNECTED) # Initialize the driver and transition to unconfigured. reply = self._dvr_client.cmd_dvr('initialize') # Test the driver is in state unconfigured. state = self._dvr_client.cmd_dvr('get_current_state') self.assertEqual(state, DriverConnectionState.UNCONFIGURED)