def test_start_paClient_with_port_agent(self): self.init_instrument_simulator() self.startPortAgent() paClient = PortAgentClient(self.ipaddr, self.data_port, self.cmd_port) paClient.init_comms(self.myGotData, self.myGotRaw, self.myGotError) data = "this is a great big test" paClient.send(data) time.sleep(1) self._instrument_simulator.send(data) time.sleep(5) paClient.stop_comms() self.assertTrue(self.rawCallbackCalled) self.assertTrue(self.dataCallbackCalled)
def test_start_paClient_with_port_agent(self): self.resetTestVars() self.init_instrument_simulator() self.startPortAgent() paClient = PortAgentClient(self.ipaddr, self.data_port, self.cmd_port) try: paClient.init_comms(self.myGotData, self.myGotRaw, self.myGotListenerError, self.myGotError) except InstrumentConnectionException as e: log.error("Exception caught: %r" % (e)) exceptionCaught = True else: exceptionCaught = False data = "this is a great big test" paClient.send(data) time.sleep(1) self._instrument_simulator.send(data) time.sleep(5) paClient.stop_comms() """ Assert that the error_callback was not called, that an exception was not caught, and that the data and raw callbacks were called. """ self.assertFalse(self.errorCallbackCalled) self.assertFalse(exceptionCaught) self.assertTrue(self.rawCallbackCalled) self.assertTrue(self.dataCallbackCalled)
def test_start_pa_client_no_port_agent_big_data(self): self.resetTestVars() logging.getLogger('mi.core.instrument.port_agent_client').setLevel(logging.DEBUG) # I put this in here because PortAgentPacket cannot make a new packet # with a valid checksum. def makepacket(msgtype, timestamp, data): from struct import Struct SYNC = (0xA3, 0x9D, 0x7A) HEADER_FORMAT = "!BBBBHHd" header_struct = Struct(HEADER_FORMAT) HEADER_SIZE = header_struct.size def calculate_checksum(data, seed=0): n = seed for datum in data: n ^= datum return n def pack_header(buf, msgtype, pktsize, checksum, timestamp): sync1, sync2, sync3 = SYNC header_struct.pack_into(buf, 0, sync1, sync2, sync3, msgtype, pktsize, checksum, timestamp) pktsize = HEADER_SIZE + len(data) pkt = bytearray(pktsize) pack_header(pkt, msgtype, pktsize, 0, timestamp) pkt[HEADER_SIZE:] = data checksum = calculate_checksum(pkt) pack_header(pkt, msgtype, pktsize, checksum, timestamp) return pkt # Make a BIG packet data = "A" * (2 ** 16 - HEADER_SIZE - 1) txpkt = makepacket(PortAgentPacket.DATA_FROM_INSTRUMENT, 0.0, data) def handle(sock, addr): # Send it in pieces sock.sendall(txpkt[:1500]) time.sleep(1) sock.sendall(txpkt[1500:]) time.sleep(10) import gevent.server dataserver = gevent.server.StreamServer((self.ipaddr, self.data_port), handle) cmdserver = gevent.server.StreamServer((self.ipaddr, self.cmd_port), lambda x, y: None) pa_client = PortAgentClient(self.ipaddr, self.data_port, self.cmd_port) try: dataserver.start() cmdserver.start() pa_client.init_comms(self.myGotData, self.myGotRaw, self.myGotListenerError, self.myGotError) except InstrumentConnectionException as e: log.error("Exception caught: %r" % e) raise else: time.sleep(5) finally: pa_client.stop_comms() dataserver.kill() cmdserver.kill() # Assert that the error_callback was not called, that an exception was not # caught, and that the data and raw callbacks were called. self.assertFalse(self.errorCallbackCalled) self.assertTrue(self.rawCallbackCalled) self.assertTrue(self.dataCallbackCalled) self.assertEquals(self.pa_packet.get_data_length(), len(data)) self.assertEquals(len(self.pa_packet.get_data()), len(data)) # don't use assertEquals b/c it will print 64kb self.assert_(self.pa_packet.get_data() == data)
def test_start_pa_client_no_port_agent_big_data(self): self.resetTestVars() logging.getLogger('mi.core.instrument.port_agent_client').setLevel( logging.DEBUG) # I put this in here because PortAgentPacket cannot make a new packet # with a valid checksum. def makepacket(msgtype, timestamp, data): from struct import Struct SYNC = (0xA3, 0x9D, 0x7A) HEADER_FORMAT = "!BBBBHHd" header_struct = Struct(HEADER_FORMAT) HEADER_SIZE = header_struct.size def calculate_checksum(data, seed=0): n = seed for datum in data: n ^= datum return n def pack_header(buf, msgtype, pktsize, checksum, timestamp): sync1, sync2, sync3 = SYNC header_struct.pack_into(buf, 0, sync1, sync2, sync3, msgtype, pktsize, checksum, timestamp) pktsize = HEADER_SIZE + len(data) pkt = bytearray(pktsize) pack_header(pkt, msgtype, pktsize, 0, timestamp) pkt[HEADER_SIZE:] = data checksum = calculate_checksum(pkt) pack_header(pkt, msgtype, pktsize, checksum, timestamp) return pkt # Make a BIG packet data = "A" * (2**16 - HEADER_SIZE - 1) txpkt = makepacket(PortAgentPacket.DATA_FROM_INSTRUMENT, 0.0, data) def handle(sock, addr): # Send it in pieces sock.sendall(txpkt[:1500]) time.sleep(1) sock.sendall(txpkt[1500:]) time.sleep(10) import gevent.server dataserver = gevent.server.StreamServer((self.ipaddr, self.data_port), handle) cmdserver = gevent.server.StreamServer((self.ipaddr, self.cmd_port), lambda x, y: None) pa_client = PortAgentClient(self.ipaddr, self.data_port, self.cmd_port) try: dataserver.start() cmdserver.start() pa_client.init_comms(self.myGotData, self.myGotRaw, self.myGotListenerError, self.myGotError) except InstrumentConnectionException as e: log.error("Exception caught: %r" % e) raise else: time.sleep(5) finally: pa_client.stop_comms() dataserver.kill() cmdserver.kill() # Assert that the error_callback was not called, that an exception was not # caught, and that the data and raw callbacks were called. self.assertFalse(self.errorCallbackCalled) self.assertTrue(self.rawCallbackCalled) self.assertTrue(self.dataCallbackCalled) self.assertEquals(self.pa_packet.get_data_length(), len(data)) self.assertEquals(len(self.pa_packet.get_data()), len(data)) # don't use assertEquals b/c it will print 64kb self.assert_(self.pa_packet.get_data() == data)