Пример #1
0
 def test_error_reporting(self):
   """Tests that StreamWriter records errors received correctly
   and stores those values in the TransmissionError Thrown.
   """
   expected_errors = [
       'CRCMismatchError',
       'CRCMismatchError',
       'CRCMismatchError',
       'GenericError',
       'GenericError',
       ]
   response_payload = bytearray()
   response_payload.append(constants.response_code_dict['CRC_MISMATCH'])
   for i in range(3):
     self.outputstream.write(Encoder.encode_payload(response_payload))
   response_payload = bytearray()
   response_payload.append(constants.response_code_dict['GENERIC_PACKET_ERROR'])
   for i in range(2):
     self.outputstream.write(Encoder.encode_payload(response_payload))
   self.outputstream.seek(0)
   payload = 'asdf'
   try:
     self.w.send_command(payload) 
   except errors.TransmissionError as e:
     self.assertEqual(expected_errors, e.value)
Пример #2
0
  def test_build_and_send_action_payload(self):
    command = constants.host_action_command_dict['QUEUE_EXTENDED_POINT_NEW']
    point = [1, 2, 3, 4, 5]
    duration = 42
    relativeAxes = 0
    expected_payload = struct.pack(
      '<BiiiiiIB',
      command,
      point[0], point[1], point[2], point[3], point[4],
      duration,
      relativeAxes
    )

    response_payload = bytearray()
    response_payload.append(constants.response_code_dict['SUCCESS'])
    self.outputstream.write(Encoder.encode_payload(response_payload))
    self.outputstream.seek(0)

    payload = struct.pack(
      '<BiiiiiIB',
      command,
      point[0], point[1], point[2], point[3], point[4],
      duration,
      relativeAxes,
    )
    self.w.send_action_payload(payload)
    self.assertEquals(Encoder.encode_payload(expected_payload), self.inputstream.getvalue())
Пример #3
0
  def test_send_command(self):
    """
    Passing case: Preload the buffer with a correctly formatted expected response, and verigy that it works correctly
    """
    payload = 'abcde'

    response_payload = bytearray()
    response_payload.append(constants.response_code_dict['SUCCESS'])
    response_payload.extend('12345')
    self.outputstream.write(Encoder.encode_payload(response_payload))
    self.outputstream.seek(0)

    self.assertEqual(response_payload, self.w.send_command(payload))
    self.assertEqual(Encoder.encode_payload(payload), self.inputstream.getvalue())
Пример #4
0
  def test_send_packet_timeout(self):
    """
    Time out when no data is received. The input stream should have max_rety_count copies of the
    payload packet in it.
    """
    payload = 'abcde'
    packet = Encoder.encode_payload(payload)
    expected_packet = Encoder.encode_payload(payload)

    self.assertRaises(errors.TransmissionError,self.w.send_packet, packet)

    self.inputstream.seek(0)
    for i in range (0, constants.max_retry_count):
      for byte in expected_packet:
        self.assertEquals(byte, ord(self.inputstream.read(1)))
Пример #5
0
    def test_send_packet(self):
        """
    Passing case: Preload the buffer with a correctly formatted expected response, and
    verify that it works correctly.
    """
        payload = "abcde"
        packet = Encoder.encode_payload(payload)
        response_payload = bytearray()
        response_payload.append(constants.response_code_dict["SUCCESS"])
        response_payload.extend("12345")
        self.outputstream.write(Encoder.encode_payload(response_payload))
        self.outputstream.seek(0)

        self.assertEquals(response_payload, self.w.send_packet(packet))
        self.assertEquals(Encoder.encode_payload(payload), self.inputstream.getvalue())
Пример #6
0
 def test_external_stop_works_precondition(self):
   response_payload = bytearray()
   response_payload.append(constants.response_code_dict['SUCCESS'])
   self.outputstream.write(Encoder.encode_payload(response_payload))
   self.outputstream.seek(0)
   self.w.set_external_stop()
   self.assertRaises(errors.ExternalStopError, self.w.send_command, 'asdf')
Пример #7
0
    def test_build_and_send_query_payload(self):
        cmd = constants.host_query_command_dict["GET_VERSION"]
        s3gVersion = 123
        botVersion = 456
        expected_payload = struct.pack("<bH", cmd, s3gVersion)

        response_payload = bytearray()
        response_payload.append(constants.response_code_dict["SUCCESS"])
        response_payload.extend(Encoder.encode_uint16(botVersion))
        self.outputstream.write(Encoder.encode_payload(response_payload))
        self.outputstream.seek(0)

        payload = struct.pack("<bH", cmd, s3gVersion)

        self.assertEquals(response_payload, self.w.send_query_payload(payload))
        self.assertEquals(Encoder.encode_payload(expected_payload), self.inputstream.getvalue())
Пример #8
0
    def test_build_and_send_query_payload_with_null_terminated_string(self):
        cmd = constants.host_query_command_dict["GET_NEXT_FILENAME"]
        flag = 0x01
        payload = struct.pack("<BB", cmd, flag)
        filename = "asdf\x00"

        response_payload = bytearray()
        response_payload.append(constants.response_code_dict["SUCCESS"])
        response_payload.append(constants.sd_error_dict["SUCCESS"])
        response_payload.extend(filename)
        self.outputstream.write(Encoder.encode_payload(response_payload))
        self.outputstream.seek(0)

        payload = struct.pack("<bb", cmd, flag)
        self.assertEqual(response_payload, self.w.send_query_payload(payload))
        self.assertEqual(Encoder.encode_payload(payload), self.inputstream.getvalue())
Пример #9
0
    def test_build_and_send_query_payload(self):
        cmd = constants.host_query_command_dict['GET_VERSION']
        s3gVersion = 123
        botVersion = 456
        expected_payload = struct.pack('<bH', cmd, s3gVersion)

        response_payload = bytearray()
        response_payload.append(constants.response_code_dict['SUCCESS'])
        response_payload.extend(Encoder.encode_uint16(botVersion))
        self.outputstream.write(Encoder.encode_payload(response_payload))
        self.outputstream.seek(0)

        payload = struct.pack(
            '<bH',
            cmd,
            s3gVersion,
        )

        self.assertEquals(response_payload, self.w.send_query_payload(payload))
        self.assertEquals(Encoder.encode_payload(expected_payload),
                          self.inputstream.getvalue())
Пример #10
0
    def test_build_and_send_query_payload_with_null_terminated_string(self):
        cmd = constants.host_query_command_dict['GET_NEXT_FILENAME']
        flag = 0x01
        payload = struct.pack('<BB', cmd, flag)
        filename = 'asdf\x00'

        response_payload = bytearray()
        response_payload.append(constants.response_code_dict['SUCCESS'])
        response_payload.append(constants.sd_error_dict['SUCCESS'])
        response_payload.extend(filename)
        self.outputstream.write(Encoder.encode_payload(response_payload))
        self.outputstream.seek(0)

        payload = struct.pack(
            '<bb',
            cmd,
            flag,
        )
        self.assertEqual(response_payload, self.w.send_query_payload(payload))
        self.assertEqual(Encoder.encode_payload(payload),
                         self.inputstream.getvalue())
Пример #11
0
  def test_send_packet_many_bad_responses(self):
    """
    Passing case: test that the transmission can recover from one less than the alloted
    number of errors.
    """
    payload = 'abcde'
    packet = Encoder.encode_payload(payload)
    expected_packet = Encoder.encode_payload(payload)

    response_payload = bytearray()
    response_payload.append(constants.response_code_dict['SUCCESS'])
    response_payload.extend('12345')

    for i in range (0, constants.max_retry_count - 1):
      self.outputstream.write('a')
    self.outputstream.write(Encoder.encode_payload(response_payload))
    self.outputstream.seek(0)

    self.assertEquals(response_payload, self.w.send_packet(packet))

    self.inputstream.seek(0)
    for i in range (0, constants.max_retry_count - 1):
      for byte in expected_packet:
        self.assertEquals(byte, ord(self.inputstream.read(1)))
Пример #12
0
 def test_packet_crc(self):
   payload = 'abcd'
   packet = Encoder.encode_payload(payload)
   assert packet[6] == Encoder.CalculateCRC(payload);
Пример #13
0
 def test_packet_length_field(self):
   payload = 'abcd'
   packet = Encoder.encode_payload(payload)
   assert packet[1] == len(payload)
Пример #14
0
  def test_packet_header(self):
    payload = 'abcd'
    packet = Encoder.encode_payload(payload)

    assert packet[0] == constants.header
Пример #15
0
 def test_packet_length(self):
   payload = 'abcd'
   packet = Encoder.encode_payload(payload)
   assert len(packet) == len(payload) + 3