def test_avp_vendor(self): """ Test the range of AVP vendors is 1-0xFFFFFFFF """ # Vendor specific flags means you need a non default vendor ID with self.assertRaises(CodecException): avp_val = avp.UnknownAVP( 0, b'', flags=avp.FLAG_VENDOR, vendor=avp.VendorId.DEFAULT, ) out_buf = bytearray(avp_val.length) avp_val.encode(out_buf, 0) avp_val = avp.UnknownAVP( 0, b'', flags=avp.FLAG_VENDOR, vendor=1, ) out_buf = bytearray(avp_val.length) avp_val.encode(out_buf, 0) self._compare_avp(avp_val, out_buf) avp_val = avp.UnknownAVP( 0, b'', flags=avp.FLAG_VENDOR, vendor=0x00FFFFFF, ) out_buf = bytearray(avp_val.length) avp_val.encode(out_buf, 0) self._compare_avp(avp_val, out_buf) # Avp vendor in range with self.assertRaises(CodecException): avp_val = avp.UnknownAVP( 0, b'', flags=avp.FLAG_VENDOR, vendor=-1, ) out_buf = bytearray(avp_val.length) avp_val.encode(out_buf, 0) # Avp vendor in range with self.assertRaises(CodecException): avp_val = avp.UnknownAVP( 0, b'', flags=avp.FLAG_VENDOR, vendor=0xFFFFFFFF + 1, ) out_buf = bytearray(avp_val.length) avp_val.encode(out_buf, 0)
def test_integer_identifier(self): """ Tests we can create an AVP with a code and it defaults to the defaults vendor. """ self._compare_avp( avp.AVP(1, 'Hello'), avp.UTF8StringAVP( 1, value='Hello', vendor=avp.VendorId.DEFAULT, flags=avp.FLAG_MANDATORY, name='User-Name', ), ) # Unknown AVPs default to unknown AVP self._compare_avp( avp.AVP(0xdeadb33f, b'wut'), avp.UnknownAVP( 0xdeadb33f, value=b'wut', vendor=avp.VendorId.DEFAULT, flags=0, name='Unknown-AVP', ), )
def test_tuple_identifier(self): """ Tests we can create an AVP with a (vendor, code) tuple """ # This will resolve to the Username AVP self._compare_avp( avp.AVP((avp.VendorId.DEFAULT, 1), 'a username'), avp.UTF8StringAVP(1, value='a username', vendor=avp.VendorId.DEFAULT, flags=avp.FLAG_MANDATORY, name='User-Name')) self._compare_avp( avp.AVP((avp.VendorId.TGPP, 701), b'msisdn'), avp.OctetStringAVP(701, value=b'msisdn', vendor=avp.VendorId.TGPP, flags=avp.FLAG_MANDATORY | avp.FLAG_VENDOR, name='MSISDN')) # Unknown AVPs default to unknown AVP self._compare_avp( avp.AVP((0xfac3b00c, 1), b'wut'), avp.UnknownAVP(1, value=b'wut', vendor=0xfac3b00c, flags=0, name='Unknown-AVP'))
def test_octet_strings(self): """ Tests we can encode and decode octet strings """ self._compare_avp( avp.UnknownAVP(0, b'hello\x23'), memoryview(b'\x00\x00\x00\x00\x00\x00\x00\x0ehello#\x00\x00')) # Unicode strings won't load with self.assertRaises(CodecException): avp.OctetStringAVP(0, u'hello')
def test_avp_code(self): """ Test the range of AVP codes is 0-0xFFFFFFFF """ avp_val = avp.UnknownAVP(0, b'') out_buf = bytearray(avp_val.length) avp_val.encode(out_buf, 0) avp_val = avp.UnknownAVP(0xFFFFFFFF, b'') out_buf = bytearray(avp_val.length) avp_val.encode(out_buf, 0) with self.assertRaises(CodecException): avp_val = avp.UnknownAVP(-1, b'') out_buf = bytearray(avp_val.length) avp_val.encode(out_buf, 0) with self.assertRaises(CodecException): avp_val = avp.UnknownAVP(0xFFFFFFFF + 1, b'') out_buf = bytearray(avp_val.length) avp_val.encode(out_buf, 0)
def test_avp_flags(self): """ Tests we can encode and decode AVPs with different flags """ self._compare_avp(avp.UnknownAVP(0, b''), memoryview(b'\x00\x00\x00\x00\x00\x00\x00\x08')) avp_val = avp.UnknownAVP(0, b'', flags=avp.FLAG_MANDATORY) self._compare_avp(avp_val, b'\x00\x00\x00\x00@\x00\x00\x08') self.assertFalse(avp_val.vendor_specific) self.assertTrue(avp_val.mandatory) self.assertFalse(avp_val.protected) avp_val = avp.UnknownAVP(0, b'', flags=avp.FLAG_PROTECTED) self._compare_avp(avp_val, b'\x00\x00\x00\x00 \x00\x00\x08') self.assertFalse(avp_val.vendor_specific) self.assertFalse(avp_val.mandatory) self.assertTrue(avp_val.protected) avp_val = avp.UnknownAVP(0, b'', flags=avp.FLAG_VENDOR, vendor=avp.VendorId.TGPP) self._compare_avp(avp_val, b'\x00\x00\x00\x00\x80\x00\x00\x0c\x00\x00(\xaf') self.assertTrue(avp_val.vendor_specific) self.assertFalse(avp_val.mandatory) self.assertFalse(avp_val.protected) avp_val = avp.UnknownAVP(0, b'', flags=avp.FLAG_VENDOR | avp.FLAG_MANDATORY, vendor=avp.VendorId.TGPP) self._compare_avp(avp_val, b'\x00\x00\x00\x00\xc0\x00\x00\x0c\x00\x00(\xaf') self.assertTrue(avp_val.vendor_specific) self.assertTrue(avp_val.mandatory) self.assertFalse(avp_val.protected) avp_val = avp.UnknownAVP(0, b'', flags=avp.FLAG_VENDOR | avp.FLAG_MANDATORY | avp.FLAG_PROTECTED, vendor=avp.VendorId.TGPP) self._compare_avp(avp_val, b'\x00\x00\x00\x00\xe0\x00\x00\x0c\x00\x00(\xaf') self.assertTrue(avp_val.vendor_specific) self.assertTrue(avp_val.mandatory) self.assertTrue(avp_val.protected)