def test_1_reporting(): print "[1] Errors reports are sent and formatted properly" # Enable reporting of all errors regardless of priority r = run_and_read(ser, CmdGetErr, False, True, test_apid) (opcode, length, source, payload) = extract_and_assert(r, CmdGetErr.opcode, 1, 1) mask = ord(payload) run_and_read(ser, CmdSetErr, 0x1F, False, True, test_apid) # Register Value Clipping r = run_and_read(ser, CmdSetRegs, 1, [0x31], [0xFF], True, True, test_apid) try: (opcode, length, source, payload) = extract_and_assert(r, ErrRegClip, 0, 1) except: print readify(r) raise r = blocking_read(ser) # receive the valid reply which we do get # Invalid Opcode r = header(0xFF, 0, False, True, 1) ser.write(slip.stuff(spp.packetize(r, elysium_apid))) r = blocking_read(ser) try: (opcode, length, source, payload) = extract_and_assert(r, ErrInvalidOpcode, 0, 1) except: print readify(r) raise # FCS Error pkt = spp.packetize(CmdGetGPO(True, True, test_apid), elysium_apid) pkt = pkt[:-2] + chr(random.getrandbits(8)) + chr(random.getrandbits(8)) ser.write(slip.stuff(pkt)) exception = False r = blocking_read(ser) try: (opcode, length, source, payload) = extract_and_assert(r, ErrFCSError, 0, 1) except: print readify(r) raise # Unreported Command Failure r = run_and_read(ser, CmdSetTXFreq, 0, True, False, test_apid) try: (opcode, length, source, payload) = extract_and_assert(r, ErrCmdFailure, 0, 1) except: print readify(r) raise # UART Error (?) # Subscription Overwritten (?) # Restore error settings run_and_read(ser, CmdSetErr, mask, False, True, test_apid) print "> SUCCESS"
def test_4_invalid(): print "[4] Invalid CRCs cause otherwise correct packets to be rejected. Invalid headers cause otherwise correct packets to be rejected." # Start by turning off event reporting r = run_and_read(ser, CmdGetErr, False, True, test_apid) (opcode, length, source, payload) = extract_and_assert(r, CmdGetErr.opcode, 1, 1) mask = ord(payload) run_and_read(ser, CmdSetErr, 0, False, True, test_apid) pkt = spp.packetize(CmdGetGPO(True, True, test_apid), elysium_apid) pkt = pkt[:-2] + str(random.getrandbits(8)) + str(random.getrandbits(8)) ser.write(slip.stuff(pkt)) exception = False r = blocking_read(ser) try: assert r == '', "FAILURE - Elysium responded to command packet with invalid CRC" except: print "Returned %s" % readify(r) raise pkt = spp.packetize(CmdGetGPO(True, True, test_apid), elysium_apid) pkt = chr(ord(pkt[0]) | 0xE0) + pkt[1:] ser.write(slip.stuff(pkt)) exception = False r = blocking_read(ser) try: assert r == '', "FAILURE - Elysium responded to packet with invalid Packet Version Number" except: print "Returned %s" % readify(r) raise # Restore error settings run_and_read(ser, CmdSetErr, mask, False, True, test_apid) print "> SUCCESS"
def rand_packet(apid=None, timestamp=None, pfield=None, length=None, maxlength=None, tc=True): if apid is None: apid = random.getrandbits(11) if pfield is None: pfield = random.getrandbits(1) if timestamp is None: timestamp = random.getrandbits(1) if length is None: if maxlength is None: length = random.randint(1, 4085) else: length = random.randint(1, maxlength) # Create payload here payload = str(bytearray(random.getrandbits(8) for _ in xrange(length))) packet = spp.packetize(payload, apid, tc=tc, timestamp=timestamp, pfield=pfield) return packet
def test_6_escape(): print "[6] Receive packet with > 2 consecutive escape sequences. Transmit packet with > 2 consecutive escape sequences." for arg in itertools.product('\xc0\xdb', repeat=4): arg = ''.join(arg) pkt = spp.packetize(arg, random.getrandbits(11)) ser.write(slip.stuff(pkt)) result = slip.unstuff(blocking_read(ser)) try: assert result == pkt, "FAILURE - sent and received multi-escape packets not equal" except: print "result is: " + readify(result) print "pkt is: " + readify(pkt) raise print "> SUCCESS\n"
def test_6_escape(): print "[6] Receive packet with > 2 consecutive escape sequences. Transmit packet with > 2 consecutive escape sequences." for arg in itertools.product('\xc0\xdb', repeat=4): arg = ''.join(arg) pkt = spp.packetize(arg, elysium_apid, tc=False) ser.write(slip.stuff(pkt)) result = slip.unstuff(blocking_read(ser)) try: assert ord(result[0]) & ~0x10 == ord( pkt[0] ), "FAILURE - sent and received multi-escape packets not equal" assert result[1:] == pkt[ 1:], "FAILURE - sent and received multi-escape packets not equal" except: print "result is: " + readify(result) print "pkt is: " + readify(pkt) raise print "> SUCCESS\n"
def test_7_noescape(): print "[7] Receive packet with no escape sequences. Transmit packet with no escape sequences." length = random.randint(1, 2036) arg = '' while len(arg) < length: c = '\xc0' while c in ['\xc0', '\xdb']: c = chr(random.getrandbits(8)) arg += c pkt = spp.packetize(arg, random.getrandbits(11)) ser.write(slip.stuff(pkt)) result = slip.unstuff(blocking_read(ser)) try: assert result == pkt, "FAILURE - sent and received no-escape packets not equal" except: print "result is: " + readify(result) print "pkt is: " + readify(pkt) raise print "> SUCCESS\n"
def test_2_priority(): print "[2] Errors reports are sent based on priority correctly" # Save error settings and active bank r = run_and_read(ser, CmdGetErr, False, True, test_apid) (opcode, length, source, payload) = extract_and_assert(r, CmdGetErr.opcode, 1, 1) mask = ord(payload) r = run_and_read(ser, CmdGetActiveBank, False, True, test_apid) try: (opcode, length, source, payload) = extract_and_assert(r, CmdGetActiveBank.opcode, 1, 1) value = ord(payload[0]) assert value in range( 1, 5), "FAILURE - value error in GetActiveBank response" except: print r print "GetActiveBank returned %d" % value raise # DEBUG run_and_read(ser, CmdSetRegs, 1, [0x30], [0x01], True, True, test_apid) run(ser, CmdReloadConfig, 1) time.sleep(5) ser.flushInput() ser.flushOutput() run_and_read(ser, CmdSetErr, 0x01, False, True, test_apid) r = header(0xFF, 0, False, True, 1) ser.write(slip.stuff(spp.packetize(r, elysium_apid))) r = blocking_read(ser) try: (opcode, length, source, payload) = extract_and_assert(r, ErrInvalidOpcode, 0, 1) except: print readify(r) raise run_and_read(ser, CmdSetErr, 0x1E, False, True, test_apid) r = header(0xFF, 0, False, True, 1) ser.write(slip.stuff(spp.packetize(r, elysium_apid))) r = blocking_read(ser) try: assert r == '' except: print readify(r) raise # INFO run_and_read(ser, CmdSetRegs, 1, [0x30], [0x02], True, True, test_apid) run(ser, CmdReloadConfig, 1) time.sleep(5) ser.flushInput() ser.flushOutput() run_and_read(ser, CmdSetErr, 0x02, False, True, test_apid) r = header(0xFF, 0, False, True, 1) ser.write(slip.stuff(spp.packetize(r, elysium_apid))) r = blocking_read(ser) try: (opcode, length, source, payload) = extract_and_assert(r, ErrInvalidOpcode, 0, 1) except: print readify(r) raise run_and_read(ser, CmdSetErr, 0x1D, False, True, test_apid) r = header(0xFF, 0, False, True, 1) ser.write(slip.stuff(spp.packetize(r, elysium_apid))) r = blocking_read(ser) try: assert r == '' except: print readify(r) raise # WARNING run_and_read(ser, CmdSetRegs, 1, [0x30], [0x04], True, True, test_apid) run(ser, CmdReloadConfig, 1) time.sleep(5) ser.flushInput() ser.flushOutput() run_and_read(ser, CmdSetErr, 0x04, False, True, test_apid) r = header(0xFF, 0, False, True, 1) ser.write(slip.stuff(spp.packetize(r, elysium_apid))) r = blocking_read(ser) try: (opcode, length, source, payload) = extract_and_assert(r, ErrInvalidOpcode, 0, 1) except: print readify(r) raise run_and_read(ser, CmdSetErr, 0x1B, False, True, test_apid) r = header(0xFF, 0, False, True, 1) ser.write(slip.stuff(spp.packetize(r, elysium_apid))) r = blocking_read(ser) try: assert r == '' except: print readify(r) raise # ERROR run_and_read(ser, CmdSetRegs, 1, [0x30], [0x08], True, True, test_apid) run(ser, CmdReloadConfig, 1) time.sleep(5) ser.flushInput() ser.flushOutput() run_and_read(ser, CmdSetErr, 0x08, False, True, test_apid) r = header(0xFF, 0, False, True, 1) ser.write(slip.stuff(spp.packetize(r, elysium_apid))) r = blocking_read(ser) try: (opcode, length, source, payload) = extract_and_assert(r, ErrInvalidOpcode, 0, 1) except: print readify(r) raise run_and_read(ser, CmdSetErr, 0x17, False, True, test_apid) r = header(0xFF, 0, False, True, 1) ser.write(slip.stuff(spp.packetize(r, elysium_apid))) r = blocking_read(ser) try: assert r == '' except: print readify(r) raise ## CRITICAL #run_and_read(ser, CmdSetRegs, 1, [0x30], [0x10], True, True, test_apid) #run(ser, CmdReloadConfig, 1) #time.sleep(5) #ser.flushInput() #ser.flushOutput() #run_and_read(ser, CmdSetErr, 0x10, False, True, test_apid) #r = header(0xFF, 0, False, True, 1) #ser.write(slip.stuff(spp.packetize(r, elysium_apid))) #r = blocking_read(ser) #try: # (opcode, length, source, payload) = extract_and_assert(r, ErrInvalidOpcode, 0, 1) #except: # print readify(r) # raise #run_and_read(ser, CmdSetErr, 0x0F, False, True, test_apid) #r = header(0xFF, 0, False, True, 1) #ser.write(slip.stuff(spp.packetize(r, elysium_apid))) #r = blocking_read(ser) #try: # assert r == '' #except: # print readify(r) # raise # Restore error settings run_and_read(ser, CmdSetErr, mask, False, True, test_apid) print "> SUCCESS"
#!/usr/bin/env python import spp import slip import math import itertools import serial import sys import time from cmds import * from ely_util import * pkt = spp.packetize( "ASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASD", apid=7, tc=False, timestamp=False, pfield=False) print(len(pkt)) string = ':'.join(hex(ord(x))[2:] for x in pkt) print string #while True: ser.write(slip.stuff(pkt)) # time.sleep(0.5)
def run_and_read(ser, cmd, *args): ser.write(slip.stuff(spp.packetize(cmd(*args), elysium_apid))) return blocking_read(ser)
def run(ser, cmd, *args): ser.write(slip.stuff(spp.packetize(cmd(*args), elysium_apid)))