def test_packet_from_buffer(): packet = packet_classes.GSEPacket(sync2_byte=0xFA, origin=1, payload='hi there!' * 30) buffer = packet.to_buffer() packets, remainder = packet_classes.get_packets_from_buffer( buffer, packet_classes.GSEPacket, packet_classes.GSEPacket.START_BYTE) packet2 = packets[0] assert remainder == '' assert packet.sync2_byte == packet2.sync2_byte assert packet.origin == packet2.origin assert packet.payload_length == packet2.payload_length assert packet.checksum == packet2.checksum assert packet.payload == packet2.payload packets, remainder = packet_classes.get_packets_from_buffer( buffer[:30], packet_classes.GSEPacket, packet_classes.GSEPacket.START_BYTE) assert packets == [] assert remainder == buffer[:30] buffer2 = buffer + chr(packet_classes.GSEPacket.START_BYTE) packets, remainder = packet_classes.get_packets_from_buffer( buffer2, packet_classes.GSEPacket, packet_classes.GSEPacket.START_BYTE) packet2 = packets[0] assert remainder == chr(packet_classes.GSEPacket.START_BYTE) assert packet.sync2_byte == packet2.sync2_byte assert packet.origin == packet2.origin assert packet.payload_length == packet2.payload_length assert packet.checksum == packet2.checksum assert packet.payload == packet2.payload buffer3 = buffer + 'asdb' + buffer2 packets, remainder = packet_classes.get_packets_from_buffer( buffer3, packet_classes.GSEPacket, packet_classes.GSEPacket.START_BYTE) assert remainder == chr(packet_classes.GSEPacket.START_BYTE) assert len(packets) == 2 for packet2 in packets: assert packet.sync2_byte == packet2.sync2_byte assert packet.origin == packet2.origin assert packet.payload_length == packet2.payload_length assert packet.checksum == packet2.checksum assert packet.payload == packet2.payload buffer3 = buffer + buffer[:30] + buffer * 20 packets, remainder = packet_classes.get_packets_from_buffer( buffer3, packet_classes.GSEPacket, packet_classes.GSEPacket.START_BYTE) print repr(remainder) assert remainder == '' assert len(packets) == 21 for packet2 in packets: assert packet.sync2_byte == packet2.sync2_byte assert packet.origin == packet2.origin assert packet.payload_length == packet2.payload_length assert packet.checksum == packet2.checksum assert packet.payload == packet2.payload
def bad_checksum_test(self): buffer = '\xfa\xff\x01\x00\x00\x00\x07' packets, remainder = packet_classes.get_packets_from_buffer( buffer, packet_class=packet_classes.GSEPacket, start_byte=packet_classes.GSEPacket.START_BYTE) assert (remainder == '\xff\x01\x00\x00\x00\x07') assert (packets == [])
def insufficient_length_for_checksum_test(self): buffer = '\xfa\xff\x01\x00\x00\x00' packets, remainder = packet_classes.get_packets_from_buffer( buffer, packet_class=packet_classes.GSEPacket, start_byte=packet_classes.GSEPacket.START_BYTE) assert (remainder == buffer) assert (packets == [])
def empty_packet_test(self): buffer = '\xfa\xff\x01\x00\x00\x00\x01' packets, remainder = packet_classes.get_packets_from_buffer( buffer, packet_class=packet_classes.GSEPacket, start_byte=packet_classes.GSEPacket.START_BYTE) assert (remainder == '') assert (packets[0].to_buffer() == buffer)
def main_loop(self): while not self._exit: buffer = self.get_next_data() if not buffer: self.logger.debug('%s: Waiting for data' % self.name) continue with open(self.raw_filename, 'ab+') as f: f.write(buffer) if self.use_gse_packets: gse_packets, gse_remainder = packet_classes.get_packets_from_buffer( self.last_gse_remainder + buffer, packet_class=packet_classes.GSEPacket, start_byte=packet_classes.GSEPacket.START_BYTE) self.last_gse_remainder = gse_remainder gse_hirate_packets, gse_lowrate_packets, other_gse_packets = packet_classes.separate_gse_packets_by_origin( gse_packets) self.logger.debug( "Found %d hirate, %d lowrate packets, %d other packets" % (len(gse_hirate_packets), len(gse_lowrate_packets), len(other_gse_packets))) self.write_gse_lowrate_packets_to_disk(gse_lowrate_packets, other_gse_packets) file_packet_buffer = '' for packet in gse_hirate_packets: file_packet_buffer += packet.payload else: file_packet_buffer = buffer file_packets, remainder = packet_classes.get_packets_from_buffer( self.file_packet_remainder + file_packet_buffer, packet_class=packet_classes.FilePacket, start_byte=packet_classes.FilePacket._valid_start_byte) for packet in file_packets: self.logger.debug( 'File_id: %d, Packet Number: %d of %d, length %d' % (packet.file_id, packet.packet_number, packet.total_packet_number, packet.payload_length)) self.file_packet_remainder = remainder self.gather_files_from_file_packets(file_packets)
def false_start_test(self): buffer = '\xfa\xfa\xff\x01\x00\x00\x00\x01' packets, remainder = packet_classes.get_packets_from_buffer( buffer, packet_class=packet_classes.GSEPacket, start_byte=packet_classes.GSEPacket.START_BYTE) packet = packets[0] print '%r' % packet.to_buffer() print packet.checksum print '%r' % packet.payload print packet.payload_length assert (packets[0].to_buffer() == '\xfa\xff\x01\x00\x00\x00\x01')
def sip_packet_in_data_test(self): initial_buffer = '\xfa\xff\x01\x00\x00\x00\x01' np.random.seed(0) random_msg = np.random.randint(0, 255, size=10000).astype('uint8').tostring() buffer = random_msg[:(len(random_msg) / 2)] + initial_buffer + random_msg[ (len(random_msg) / 2):] packets, remainder = packet_classes.get_packets_from_buffer( buffer, packet_class=packet_classes.GSEPacket, start_byte=packet_classes.GSEPacket.START_BYTE) assert (packets[0].to_buffer() == initial_buffer)
def long_sip_packet_test(self): sync = [0xFA, 0xFF] header = [0x01, 0x00] data = range(0, 100) length = [0x00, len(data)] # assumes payload is < 255 bytes checksum_data = np.array(header + length + data, dtype='uint8') checksum = int(np.sum(checksum_data, dtype='uint8')) #print "total sum:", np.sum(checksum_data) assert (checksum < 256) buffer = np.array(sync + header + length + data + [checksum], dtype='uint8').tostring() packets, remainder = packet_classes.get_packets_from_buffer( buffer, packet_class=packet_classes.GSEPacket, start_byte=packet_classes.GSEPacket.START_BYTE) assert (remainder == '') assert (packets[0].to_buffer() == buffer)
def run_through_good_test(self): # Tests filepacket packets = [] packet_size = 1000 num_packets = int(np.ceil(len(self.random_msg) / packet_size)) for i in range(num_packets): msg = self.random_msg[(i * packet_size):((i + 1) * packet_size)] packet = packet_classes.FilePacket(file_id=0, packet_number=i, total_packet_number=num_packets, payload=msg) packets.append(packet) buffer = '' for packet in packets: buffer += packet.to_buffer() packets_after, remainder = packet_classes.get_packets_from_buffer( buffer, packet_class=packet_classes.FilePacket, start_byte=packet_classes.FilePacket._valid_start_byte) data_buffer = ''.join([packet.payload for packet in packets_after]) assert (data_buffer == self.random_msg)