Ejemplo n.º 1
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"
Ejemplo n.º 2
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"
Ejemplo n.º 3
0
def test_3_max():
    print "[3] Receive 2048-byte packet. Transmit 2048-byte packet. Receive packet containing timestamp. Transmit packet containing timestamp. Receive packet containing p-field. Transmit packet containing p-field."
    pkt = rand_packet(length = 2037, timestamp = 1, pfield = 1) # TODO fix this in more fully featured sandboxes
    ser.write(slip.stuff(pkt))
    result = slip.unstuff(blocking_read(ser))
    try:
      assert result == pkt, "FAILURE - sent and received 2048-byte packets not equal"
    except:
      print "result is: " + readify(result)
      print "pkt is: " + readify(pkt)
      raise
    print "> SUCCESS\n"
Ejemplo n.º 4
0
def test_2_min():
    print "[2] Receive 7-byte packet. Transmit 7-byte packet."
    pkt = rand_packet(length = 1, timestamp = 1, pfield = 1, tc=0)
    ser.write(slip.stuff(pkt))
    result = slip.unstuff(blocking_read(ser))
    try:
      assert result == pkt, "FAILURE - sent and received 7-byte packets not equal"
    except:
      print "result is: " + readify(result)
      print "pkt is: " + readify(pkt)
      raise
    print "> SUCCESS\n"
Ejemplo n.º 5
0
def test_4_long():
    print "[4] Reject malformed packets - > max length. Recover from invalid packet rejections."
    pkt = rand_packet(length = 4096) 
    ser.write(slip.stuff(pkt))
    result = slip.unstuff(blocking_read(ser))
    try:
      assert result == '', "FAILURE - long packet not rejected"
    except:
      print "result is: " + readify(result)
      print "pkt is: " + readify(pkt)
      raise
      
    pkt = rand_packet(maxlength=2036)
    ser.write(slip.stuff(pkt))
    result = slip.unstuff(blocking_read(ser))
    try:
      assert result == pkt, "FAILURE - state machine did not recover from long packet rejection"
    except:
      print "result is: " + readify(result)
      print "pkt is: " + readify(pkt)
      raise
    print "> SUCCESS\n"
Ejemplo n.º 6
0
def test_8_short():
    print "[8] Reject malformed packets - < min length. Recover from invalid packet rejections."
    pkt = str(bytearray(random.getrandbits(8) for _ in xrange(6)))
    ser.write(slip.stuff(pkt))
    result = slip.unstuff(blocking_read(ser))
    try:
      assert result == '', "FAILURE - short packet not rejected"
    except:
      print "result is: " + readify(result)
      print "pkt is: " + readify(pkt)
      raise
  
    pkt = rand_packet(maxlength=2036)
    ser.write(slip.stuff(pkt))
    result = slip.unstuff(blocking_read(ser))
    try:
      assert result == pkt, "FAILURE - state machine did not recover from short packet rejection"
    except:
      print "result is: " + readify(result)
      print "pkt is: " + readify(pkt)
      raise
    print "> SUCCESS\n"
Ejemplo n.º 7
0
def test_5_len():
    print "[5] Reject malformed packets - > specified length. Recover from invalid packet rejections."
    pkt = rand_packet(maxlength=2036)
    pkt = pkt[:len(pkt)/2] + str(random.getrandbits(8) for _ in xrange(16)) + pkt[len(pkt)/2:]
    ser.write(slip.stuff(pkt))
    result = slip.unstuff(blocking_read(ser))
    try:
      assert result == '', "FAILURE - invalid packet not rejected"
    except:
      print "result is: " + readify(result)
      print "pkt is: " + readify(pkt)
      raise
    pkt = rand_packet(maxlength=2036)
    ser.write(slip.stuff(pkt))
    result = slip.unstuff(blocking_read(ser))
    try:
      assert result == pkt, "FAILURE - state machine did not recover from invalid packet rejection"
    except:
      print "result is: " + readify(result)
      print "pkt is: " + readify(pkt)
      raise
    print "> SUCCESS\n"
Ejemplo n.º 8
0
def test_1_nominal():
    print "[1] Receive > 4 packets. Transmit > 4 packets."
    for i in range(0, 8):
      pkt = rand_packet(length = None, maxlength=1008, tc=0)
      ser.write(slip.stuff(pkt))
      result = slip.unstuff(blocking_read(ser))
      try:
        assert result == pkt, "FAILURE - sent and received packets not equal"
      except:
        print "result is: " + readify(result)
        print "pkt is: " + readify(pkt)
        raise
    print "> SUCCESS\n" 
Ejemplo n.º 9
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"
Ejemplo n.º 10
0
def test_5_len():
    print "[5] Reject malformed packets - > specified length. Recover from invalid packet rejections."
    # 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 = rand_packet(apid=elysium_apid, tc=False, length=None, maxlength=2036)
    pkt = pkt[:len(pkt) / 2] + str(random.getrandbits(8)
                                   for _ in xrange(16)) + pkt[len(pkt) / 2:]
    ser.write(slip.stuff(pkt))
    tmp = blocking_read(ser)
    result = slip.unstuff(tmp)
    try:
        assert result == '', "FAILURE - invalid packet not rejected"
    except:
        print "result is: " + readify(result)
        print "pkt is: " + readify(pkt)
        raise
    pkt = rand_packet(apid=elysium_apid, tc=False, maxlength=2036)
    ser.write(slip.stuff(pkt))
    result = slip.unstuff(blocking_read(ser))
    try:
        assert ord(result[0]) & ~0x10 == ord(
            pkt[0]), "FAILURE - state machine did not recover"
        assert result[1:] == pkt[1:], "FAILURE - state machine did not recover"
    except:
        print "result is: " + readify(result)
        print "pkt is: " + readify(pkt)
        raise

    # Restore error settings
    run_and_read(ser, CmdSetErr, mask, False, True, test_apid)

    print "> SUCCESS\n"
Ejemplo n.º 11
0
def test_3_max():
    print "[3] Receive 2048-byte packet. Transmit 2048-byte packet. Receive packet containing timestamp. Transmit packet containing timestamp. Receive packet containing p-field. Transmit packet containing p-field."
    #pkt = rand_packet(apid = elysium_apid, tc = False, length = 2037, timestamp = 1, pfield = 1) # TODO fix this in more fully featured sandboxes
    pkt = rand_packet(
        apid=elysium_apid, tc=False, timestamp=0, pfield=0,
        length=2042)  # TODO fix this in more fully featured sandboxes
    ser.write(slip.stuff(pkt))
    result = slip.unstuff(blocking_read(ser))
    try:
        assert ord(result[0]) & ~0x10 == ord(
            pkt[0]), "FAILURE - sent and received packets not equal"
        assert result[1:] == pkt[
            1:], "FAILURE - sent and received packets not equal"
    except:
        print "result is: " + readify(result)
        print "pkt is: " + readify(pkt)
        raise
    print "> SUCCESS\n"
Ejemplo n.º 12
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"
Ejemplo n.º 13
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"
Ejemplo n.º 14
0
def test_2_min():
    print "[2] Receive 7-byte packet. Transmit 7-byte packet."
    pkt = rand_packet(apid=elysium_apid,
                      tc=False,
                      length=1,
                      timestamp=1,
                      pfield=1)
    ser.write(slip.stuff(pkt))
    result = slip.unstuff(blocking_read(ser))
    try:
        assert ord(result[0]) & ~0x10 == ord(
            pkt[0]), "FAILURE - sent and received packets not equal"
        assert result[1:] == pkt[
            1:], "FAILURE - sent and received packets not equal"
    except:
        print "result is: " + readify(result)
        print "pkt is: " + readify(pkt)
        raise
    print "> SUCCESS\n"
Ejemplo n.º 15
0
def test_1_nominal():
    print "[1] Receive > 4 packets. Transmit > 4 packets."
    for i in range(0, 8):
        pkt = rand_packet(apid=elysium_apid,
                          tc=False,
                          length=None,
                          maxlength=2036)
        ser.write(slip.stuff(pkt))
        result = slip.unstuff(blocking_read(ser))
        try:
            assert ord(result[0]) & ~0x10 == ord(
                pkt[0]), "FAILURE - sent and received packets not equal"
            assert result[1:] == pkt[
                1:], "FAILURE - sent and received packets not equal"
        except:
            print "result is: " + readify(result)
            print "pkt is: " + readify(pkt)
            raise
        print i
    print "> SUCCESS\n"
Ejemplo n.º 16
0
def test_1_nominal():
    print "[1] Receive > 4 packets. Transmit > 4 packets."
    for i in range(0, 8):
        pkt = rand_packet(length=None,
                          maxlength=1008,
                          tc=0,
                          timestamp=0,
                          pfield=0)
        ser.write(slip.stuff(pkt))
        result = slip.unstuff(blocking_read(ser))
        try:
            assert result == pkt, "FAILURE - sent and received packets not equal"
        except:
            print "result is: " + readify(result)
            print "pkt is: " + readify(pkt)
            raise
        #try:
        #  blocking_read(ser) # discard idle packet
        #except:
        #  pass
        print "small success"
    print "> SUCCESS\n"
Ejemplo n.º 17
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"
Ejemplo n.º 18
0
def run(ser, cmd, *args):
    ser.write(slip.stuff(spp.packetize(cmd(*args), elysium_apid)))
Ejemplo n.º 19
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)
Ejemplo n.º 20
0
def run_and_read(ser, cmd, *args):
    ser.write(slip.stuff(spp.packetize(cmd(*args), elysium_apid)))
    return blocking_read(ser)