Пример #1
0
class TestFakeReadDevice(unittest.TestCase):
    """
    FakeReadDevice class should work as intended to emluate a serial 
    port
    """
    def setUp(self):
        """
        Create a fake read device for each test
        """
        self.device = FakeReadDevice("test")
    
    def test_read_single_byte(self):
        """
        reading one byte at a time should work as expected
        """
        self.assertEqual(self.device.read(), 't')
        self.assertEqual(self.device.read(), 'e')
        self.assertEqual(self.device.read(), 's')
        self.assertEqual(self.device.read(), 't')
        
    def test_read_multiple_bytes(self):
        """
        reading multiple bytes at a time should work as expected
        """
        self.assertEqual(self.device.read(3), 'tes')
        self.assertEqual(self.device.read(), 't')
        
    def test_read_too_many(self):
        """
        attempting to read too many bytes should raise an exception
        """
        self.assertRaises(ValueError, self.device.read, 5)
Пример #2
0
class TestFakeReadDevice(unittest.TestCase):
    """
    FakeReadDevice class should work as intended to emluate a serial 
    port
    """
    def setUp(self):
        """
        Create a fake read device for each test
        """
        self.device = FakeReadDevice("test")

    def test_read_single_byte(self):
        """
        reading one byte at a time should work as expected
        """
        self.assertEqual(self.device.read(), 't')
        self.assertEqual(self.device.read(), 'e')
        self.assertEqual(self.device.read(), 's')
        self.assertEqual(self.device.read(), 't')

    def test_read_multiple_bytes(self):
        """
        reading multiple bytes at a time should work as expected
        """
        self.assertEqual(self.device.read(3), 'tes')
        self.assertEqual(self.device.read(), 't')

    def test_read_too_many(self):
        """
        attempting to read too many bytes should raise an exception
        """
        self.assertRaises(ValueError, self.device.read, 5)
Пример #3
0
 def test_read_io_data(self):
     """
     XBee class should properly read and parse incoming IO data
     """
     ## Build IO data
     # One sample, ADC 0 enabled
     # DIO 1,3,5,7 enabled
     header = b'\x01\x02\xAA'
     
     # First 7 bits ignored, DIO8 low, DIO 0-7 alternating
     # ADC0 value of 255
     sample = b'\x00\xAA\x00\xFF'
     data = header + sample
     
     ## Wrap data in frame
     # RX frame data
     rx_io_resp = b'\x83\x00\x01\x28\x00'
 
     device = FakeReadDevice(
         b'\x7E\x00\x0C'+ rx_io_resp + data + b'\xfd'
     )
     xbee = XBee(device)
     
     info = xbee.wait_read_frame()
     expected_info = {'id':'rx_io_data',
                      'source_addr':b'\x00\x01',
                      'rssi':b'\x28',
                      'options':b'\x00',
                      'samples': [{'dio-1':True,
                                   'dio-3':True,
                                   'dio-5':True,
                                   'dio-7':True,
                                   'adc-0':255}]
                     }
     self.assertEqual(info, expected_info)
Пример #4
0
 def test_is_remote_response_parsed_as_io(self):
     """
     I/O data in a Remote AT response for an IS command is parsed.
     """
      ## Build IO data
     # One sample, ADC 0 enabled
     # DIO 1,3,5,7 enabled
     header = b'\x01\x02\xAA'
     
     # First 7 bits ignored, DIO8 low, DIO 0-7 alternating
     # ADC0 value of 255
     sample = b'\x00\xAA\x00\xFF'
     data = header + sample
     
     device = FakeReadDevice(
         APIFrame(data = b'\x97D\x00\x13\xa2\x00@oG\xe4v\x1aIS\x00' + data).output()
     )
     
     xbee = XBee(device)
     
     info = xbee.wait_read_frame()
     expected_info = {'id':'remote_at_response',
                      'frame_id':b'D',
                      'source_addr_long': b'\x00\x13\xa2\x00@oG\xe4',
                      'source_addr': b'v\x1a',
                      'command':b'IS',
                      'status':b'\x00',
                      'parameter':[{'dio-1':True,
                                   'dio-3':True,
                                   'dio-5':True,
                                   'dio-7':True,
                                   'adc-0':255}]}
     self.assertEqual(info, expected_info)
Пример #5
0
    def test_read(self):
        """
        _wait_for_frame should properly read a frame of data
        """
        device = FakeReadDevice(b'\x7E\x00\x01\x00\xFF')
        xbee = XBeeBase(device)

        frame = xbee._wait_for_frame()
        self.assertEqual(frame.data, b'\x00')
Пример #6
0
    def test_read_invalid_followed_by_valid(self):
        """
        _wait_for_frame should skip invalid data
        """
        device = FakeReadDevice(b'\x7E\x00\x01\x00\xFA' +
                                b'\x7E\x00\x01\x05\xFA')
        xbee = XBeeBase(device)

        frame = xbee._wait_for_frame()
        self.assertEqual(frame.data, b'\x05')
Пример #7
0
    def test_read_escaped(self):
        """
        _wait_for_frame should properly read a frame of data
        Verify that API mode 2 escaped bytes are read correctly
        """
        device = FakeReadDevice('\x7E\x00\x04\x7D\x5E\x7D\x5D\x7D\x31\x7D\x33\xE0')

        xbee = XBeeBase(device,escaped=True)
        
        frame = xbee._wait_for_frame()
        self.assertEqual(frame.data, '\x7E\x7D\x11\x13')
Пример #8
0
 def test_read_at(self):
     """
     read and parse a parameterless AT command
     """
     device = FakeReadDevice(b'\x7E\x00\x05\x88DMY\x01\x8c')
     xbee = XBee(device)
     
     info = xbee.wait_read_frame()
     expected_info = {'id':'at_response',
                      'frame_id':b'D',
                      'command':b'MY',
                      'status':b'\x01'}
     self.assertEqual(info, expected_info)
Пример #9
0
 def test_read_rx_with_close_brace(self):
     """
     An rx data frame including a close brace must be read properly.
     """
     device = FakeReadDevice(APIFrame(b'\x81\x01\x02\x55\x00{test=1}').output())
     xbee = XBee(device)
     
     info = xbee.wait_read_frame()
     expected_info = {'id':'rx',
                      'source_addr':b'\x01\x02',
                      'rssi':b'\x55',
                      'options':b'\x00',
                      'rf_data':b'{test=1}'}
     self.assertEqual(info, expected_info)
Пример #10
0
 def test_empty_frame_ignored(self):
     """
     If an empty frame is received from a device, it must be ignored.
     """
     device = FakeReadDevice(b'\x7E\x00\x00\xFF\x7E\x00\x05\x88DMY\x01\x8c')
     xbee = XBee(device)
     
     #import pdb
     #pdb.set_trace()
     info = xbee.wait_read_frame()
     expected_info = {'id':'at_response',
                      'frame_id':b'D',
                      'command':b'MY',
                      'status':b'\x01'}
     self.assertEqual(info, expected_info)
Пример #11
0
 def test_read_at_params_in_escaped_mode(self):
     """
     read and parse an AT command with a parameter in escaped API mode
     """
     device = FakeReadDevice(
         b'~\x00\t\x88DMY\x01}^}]}1}3m'
     )
     xbee = XBee(device, escaped=True)
     
     info = xbee.wait_read_frame()
     expected_info = {'id':'at_response',
                      'frame_id':b'D',
                      'command':b'MY',
                      'status':b'\x01',
                      'parameter':b'\x7E\x7D\x11\x13'}
     self.assertEqual(info, expected_info)
Пример #12
0
    def test_read_at_params(self):
        """
        read and parse an AT command with a parameter
        """
        device = FakeReadDevice('\x7E\x00\x08\x88DMY\x01\x00\x00\x00\x8c')
        xbee = XBeePro900(device)

        info = xbee.wait_read_frame()
        expected_info = {
            'id': 'at_response',
            'frame_id': 'D',
            'command': 'MY',
            'status': '\x01',
            'parameter': '\x00\x00\x00'
        }
        self.assertEqual(info, expected_info)
Пример #13
0
    def test_read_90(self):
        """
        Read and parse an RX packet from an XBee-Pro 900MHz module.
        """
        data = '~\x00L\x90\x00}3\xa2\x00@x\xcd9\xff\xfe\x02\x00\x0f\x0e/AccelX\x00\x00\x00\x00\x00\x00\xc0L?AccelY\x00\x00\x00\x00\x00\x00\xc0L?AccelZ\x00\x00\x00\x00\x00\x00\xc0L?Yaw\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0L?\xc1'

        device = FakeReadDevice(data)
        xbee = XBeePro900(device, escaped=True)

        info = xbee.wait_read_frame()

        # import pprint
        # pprint.pprint(info)
        ## {'frame_id': '\x00',
        ##  'id': 'rx_pro',
        ##  'reserved': '\xfe\x02',
        ##  'rf_data': '\x0f\x0e/AccelX\x00\x00\x00\x00\x00\x00\xc0L?AccelY\x00\x00\x00\x00\x00\x00\xc0L?AccelZ\x00\x00\x00\x00\x00\x00\xc0L?Yaw\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0L?',
        ##  'rx_opt': '\x00',
        ##  'source_addr_long': '\x13\xa2\x00@x\xcd9\xff'}

        expected_info = {
            'id':
            'rx',
            'frame_id':
            '\x00',
            'source_addr':
            '\x13\xa2\x00\x40\x78\xcd\x39',
            'reserved':
            '\xff\xfe',
            'options':
            '\x02',
            'rf_data':
            '\x00\x0f\x0e/AccelX\x00\x00\x00\x00\x00\x00\xc0L?AccelY\x00\x00\x00\x00\x00\x00\xc0L?AccelZ\x00\x00\x00\x00\x00\x00\xc0L?Yaw\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0L?'
        }

        self.maxDiff = None
        self.assertEqual(info, expected_info)
Пример #14
0
 def setUp(self):
     """
     Create a fake read device for each test
     """
     self.device = FakeReadDevice("test")
Пример #15
0
 def setUp(self):
     self.xbee = None
     self.serial = FakeReadDevice([], silent_on_empty=True)
     self.callback = lambda data: None
Пример #16
0
 def setUp(self):
     """
     Create a fake read device for each test
     """
     self.device = FakeReadDevice("test")