Go to the documentation of this file.00001 """
00002 test_zigbee.py
00003
00004 By Paul Malmsten, 2010
00005 pmalmsten@gmail.com
00006
00007 Tests the XBee ZB (ZigBee) implementation class for API compliance
00008 """
00009 import unittest
00010 from xbee.zigbee import ZigBee
00011
00012 class TestZigBee(unittest.TestCase):
00013 """
00014 Tests ZigBee-specific features
00015 """
00016
00017 def setUp(self):
00018 self.zigbee = ZigBee(None)
00019
00020 def test_null_terminated_field(self):
00021 """
00022 Packets with null-terminated fields
00023 should be properly parsed
00024 """
00025 expected_data = '\x01\x02\x03\x04'
00026 terminator = '\x00'
00027 node_identifier = '\x95' + '\x00' * 21 + expected_data + terminator + '\x00' * 8
00028
00029 data = self.zigbee._split_response(node_identifier)
00030
00031 self.assertEqual(data['node_id'], expected_data)
00032
00033 def test_split_node_identification_identifier(self):
00034 data = '\x95\x00\x13\xa2\x00\x40\x52\x2b\xaa\x7d\x84\x02\x7d\x84\x00\x13\xa2\x00\x40\x52\x2b\xaa\x20\x00\xff\xfe\x01\x01\xc1\x05\x10\x1e'
00035 info = self.zigbee._split_response(data)
00036 expected_info = {
00037 'id': 'node_id_indicator',
00038 'sender_addr_long': '\x00\x13\xa2\x00\x40\x52\x2b\xaa',
00039 'sender_addr': '\x7d\x84',
00040 'options': '\x02',
00041 'source_addr': '\x7d\x84',
00042 'source_addr_long': '\x00\x13\xa2\x00\x40\x52\x2b\xaa',
00043 'node_id': ' ',
00044 'parent_source_addr': '\xff\xfe',
00045 'device_type': '\x01',
00046 'source_event': '\x01',
00047 'digi_profile_id': '\xc1\x05',
00048 'manufacturer_id': '\x10\x1e',
00049 }
00050
00051 self.assertEqual(info, expected_info)
00052
00053 def test_split_node_identification_identifier2(self):
00054 data = '\x95\x00\x13\xa2\x00\x40\x52\x2b\xaa\x7d\x84\x02\x7d\x84\x00\x13\xa2\x00\x40\x52\x2b\xaaCoordinator\x00\xff\xfe\x01\x01\xc1\x05\x10\x1e'
00055 info = self.zigbee._split_response(data)
00056 expected_info = {
00057 'id': 'node_id_indicator',
00058 'sender_addr_long': '\x00\x13\xa2\x00\x40\x52\x2b\xaa',
00059 'sender_addr': '\x7d\x84',
00060 'options': '\x02',
00061 'source_addr': '\x7d\x84',
00062 'source_addr_long': '\x00\x13\xa2\x00\x40\x52\x2b\xaa',
00063 'node_id': 'Coordinator',
00064 'parent_source_addr': '\xff\xfe',
00065 'device_type': '\x01',
00066 'source_event': '\x01',
00067 'digi_profile_id': '\xc1\x05',
00068 'manufacturer_id': '\x10\x1e',
00069 }
00070
00071 self.assertEqual(info, expected_info)
00072
00073 class TestParseZigBeeIOData(unittest.TestCase):
00074 """
00075 Test parsing ZigBee specific IO data
00076 """
00077
00078 def setUp(self):
00079 self.zigbee = ZigBee(None)
00080
00081 def test_parse_dio_adc(self):
00082 data = '\x01\x08\x00\x0e\x08\x00\x00\x00\x02P\x02\x06'
00083 expected_results = [{'dio-11': True,
00084 'adc-1': 0,
00085 'adc-2': 592,
00086 'adc-3': 518}]
00087 results = self.zigbee._parse_samples(data)
00088 self.assertEqual(results, expected_results)