예제 #1
0
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"
예제 #2
0
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"
예제 #3
0
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
예제 #4
0
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"
예제 #5
0
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"
예제 #6
0
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"
예제 #7
0
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"
예제 #8
0
#!/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)
예제 #9
0
def run_and_read(ser, cmd, *args):
    ser.write(slip.stuff(spp.packetize(cmd(*args), elysium_apid)))
    return blocking_read(ser)
예제 #10
0
def run(ser, cmd, *args):
    ser.write(slip.stuff(spp.packetize(cmd(*args), elysium_apid)))