def test_hops_src_dst_addrs(self, ): # Pack f = heymac.APv6Frame( hops=b"\x33", src= b"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f", dst= b"\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDa\xDb\xDc\xDd\xDe\xDf" ) b = bytes(f) self.assertEqual( b, b"\xD0\x33\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDa\xDb\xDc\xDd\xDe\xDf" ) # Unpack f = heymac.APv6Frame(b) self.assertEqual(f.iphc_prefix, 6) self.assertEqual(f.iphc_nhc, 1) self.assertEqual(f.iphc_hlim, 0) self.assertEqual(f.iphc_sam, 0) self.assertEqual(f.iphc_dam, 0) self.assertEqual(f.hops, 0x33) self.assertEqual( f.src, b"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" ) self.assertEqual( f.dst, b"\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDa\xDb\xDc\xDd\xDe\xDf" )
def test_regression_hops_from_int(self, ): """Allow hops to be given as an int """ # Pack f = heymac.APv6Frame( hops=0x33, src= b"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f", dst= b"\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDa\xDb\xDc\xDd\xDe\xDf" ) b = bytes(f) self.assertEqual( b, b"\xD0\x33\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDa\xDb\xDc\xDd\xDe\xDf" ) # Unpack f = heymac.APv6Frame(b) self.assertEqual(f.iphc_prefix, 6) self.assertEqual(f.iphc_nhc, 1) self.assertEqual(f.iphc_hlim, 0) self.assertEqual(f.iphc_sam, 0) self.assertEqual(f.iphc_dam, 0) self.assertEqual(f.hops, 0x33) self.assertEqual( f.src, b"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" ) self.assertEqual( f.dst, b"\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDa\xDb\xDc\xDd\xDe\xDf" )
def test_hlim_3(self, ): # Pack f = heymac.APv6Frame(iphc_hlim=0b11) b = bytes(f) self.assertEqual(b, b"\xDF") # Unpack f = heymac.APv6Frame(b) self.assertEqual(f.iphc_prefix, 6) self.assertEqual(f.iphc_nhc, 1) self.assertEqual(f.iphc_hlim, 3) self.assertEqual(f.iphc_sam, 1) self.assertEqual(f.iphc_dam, 1) self.assertEqual(f.hops, 0xFF) self.assertEqual(f.src, b"") self.assertEqual(f.dst, b"")
def test_hops_32(self, ): # Pack f = heymac.APv6Frame(hops=b"\x20") b = bytes(f) self.assertEqual(b, b"\xD3\x20") # Unpack f = heymac.APv6Frame(b) self.assertEqual(f.iphc_prefix, 6) self.assertEqual(f.iphc_nhc, 1) self.assertEqual(f.iphc_hlim, 0) self.assertEqual(f.iphc_sam, 1) self.assertEqual(f.iphc_dam, 1) self.assertEqual(f.hops, 0x20) self.assertEqual(f.src, b"") self.assertEqual(f.dst, b"")
def test_nhc_default(self, ): # Pack f = heymac.APv6Frame(iphc_nhc=1) b = bytes(f) self.assertEqual(b, b"\xD7") # Unpack f = heymac.APv6Frame(b) self.assertEqual(f.iphc_prefix, 6) self.assertEqual(f.iphc_nhc, 1) self.assertEqual(f.iphc_hlim, 1) self.assertEqual(f.iphc_sam, 1) self.assertEqual(f.iphc_dam, 1) self.assertEqual(f.hops, 0x01) self.assertEqual(f.src, b"") self.assertEqual(f.dst, b"")
def test_hops_special_255(self, ): # Pack f = heymac.APv6Frame(hops=b"\xFF") b = bytes(f) self.assertEqual(b, b"\xDF") # Unpack f = heymac.APv6Frame(b) self.assertEqual(f.iphc_prefix, 6) self.assertEqual(f.iphc_nhc, 1) self.assertEqual(f.iphc_hlim, 3) self.assertEqual(f.iphc_sam, 1) self.assertEqual(f.iphc_dam, 1) self.assertEqual(f.hops, 0xFF) self.assertEqual(f.src, b"") self.assertEqual(f.dst, b"")
def test_mac_net_min(self, ): # Pack fmac = heymac.HeyMacFrame(fctl_type=heymac.HeyMacFrame.FCTL_TYPE_NET) fnet = heymac.APv6Frame() fmac.data = fnet b = bytes(fmac) self.assertEqual(b, b"\xe2\x80\xD7") # Unpack HeyMacFrame fmac = heymac.HeyMacFrame(b) self.assertEqual(fmac.pv_pid, fmac.PV_PID_HEYMAC) self.assertEqual(fmac.pv_ver, fmac.PV_VER_HEYMAC2) self.assertEqual(fmac.fctl_type, heymac.HeyMacFrame.FCTL_TYPE_NET) self.assertEqual(fmac.fctl_l, 0) self.assertEqual(fmac.fctl_p, 0) self.assertEqual(fmac.fctl_n, 0) self.assertEqual(fmac.fctl_d, 0) self.assertEqual(fmac.fctl_i, 0) self.assertEqual(fmac.fctl_s, 0) self.assertEqual(fmac.exttype, b"") self.assertEqual(fmac.netid, b"") self.assertEqual(fmac.daddr, b"") self.assertEqual(fmac.saddr, b"") self.assertTrue(len(fmac.data) > 0) # Unpack APv6Frame fnet = fmac.data self.assertEqual(type(fnet), heymac.APv6Frame) self.assertEqual(fnet.iphc_prefix, 6) self.assertEqual(fnet.iphc_nhc, 1) self.assertEqual(fnet.iphc_hlim, 1) self.assertEqual(fnet.iphc_sam, 1) self.assertEqual(fnet.iphc_dam, 1) self.assertEqual(fnet.hops, 0x01) self.assertEqual(fnet.src, b"") self.assertEqual(fnet.dst, b"")
def test_mac_net_udp_to_google(self, ): # Pack fmac = heymac.HeyMacFrame( fctl_type=heymac.HeyMacFrame.FCTL_TYPE_NET, pend=0, saddr=b"\x35\x16", ) google_ipv6_addr = b"\x20\x01\x48\x60\x48\x60\x00\x00\x00\x00\x00\x00\x00\x00\x88\x88" fnet = heymac.APv6Frame(dst=google_ipv6_addr, ) fudp = heymac.APv6Udp(src_port=0xF0B0, dst_port=53, data=b"DnsRequest") fmac.data = fnet fnet.data = fudp b = bytes(fmac) self.assertEqual( b, b"\xe2\x81\x35\x16\xD6" + google_ipv6_addr + b"\xF6\xB0\x00\x35DnsRequest") # Unpack HeyMacFrame fmac = heymac.HeyMacFrame(b) self.assertEqual(fmac.pv_pid, fmac.PV_PID_HEYMAC) self.assertEqual(fmac.pv_ver, fmac.PV_VER_HEYMAC2) self.assertEqual(fmac.fctl_type, heymac.HeyMacFrame.FCTL_TYPE_NET) self.assertEqual(fmac.fctl_l, 0) self.assertEqual(fmac.fctl_p, 0) self.assertEqual(fmac.fctl_n, 0) self.assertEqual(fmac.fctl_d, 0) self.assertEqual(fmac.fctl_i, 0) self.assertEqual(fmac.fctl_s, 1) self.assertEqual(fmac.exttype, b"") self.assertEqual(fmac.netid, b"") self.assertEqual(fmac.daddr, b"") self.assertEqual(fmac.saddr, b"\x35\x16") self.assertTrue(len(fmac.data) > 0) # Unpack APv6Frame fnet = fmac.data self.assertEqual(type(fnet), heymac.APv6Frame) self.assertEqual(fnet.iphc_prefix, 6) self.assertEqual(fnet.iphc_nhc, 1) self.assertEqual(fnet.iphc_hlim, 1) self.assertEqual(fnet.iphc_sam, 1) self.assertEqual(fnet.iphc_dam, 0) self.assertEqual(fnet.hops, 1) self.assertEqual(fnet.src, b"") self.assertEqual(fnet.dst, google_ipv6_addr) # Unpack UDP fudp = fnet.data self.assertEqual(type(fudp), heymac.APv6Udp) self.assertEqual(fudp.hdr_type, 0b11110) self.assertEqual(fudp.hdr_co, 1) self.assertEqual(fudp.hdr_ports, 0b10) self.assertEqual(fudp.chksum, b"") self.assertEqual(fudp.src_port, 0xF0B0) self.assertEqual(fudp.dst_port, 53) self.assertEqual(fudp.data, b"DnsRequest")
def test_mac_net_udp_to_node(self, ): # Pack fmac = heymac.HeyMacFrame(fctl_type=heymac.HeyMacFrame.FCTL_TYPE_NET, pend=0, saddr=b"\x35\x16", daddr=b"\x83\x11") fnet = heymac.APv6Frame() fudp = heymac.APv6Udp(src_port=0xF0BA, dst_port=0xF0BF, data=b"nodedata") fmac.data = fnet fnet.data = fudp b = bytes(fmac) self.assertEqual(b, b"\xe2\x85\x83\x11\x35\x16\xD7\xF7\xAFnodedata") # Unpack HeyMacFrame fmac = heymac.HeyMacFrame(b) self.assertEqual(fmac.pv_pid, fmac.PV_PID_HEYMAC) self.assertEqual(fmac.pv_ver, fmac.PV_VER_HEYMAC2) self.assertEqual(fmac.fctl_type, heymac.HeyMacFrame.FCTL_TYPE_NET) self.assertEqual(fmac.fctl_l, 0) self.assertEqual(fmac.fctl_p, 0) self.assertEqual(fmac.fctl_n, 0) self.assertEqual(fmac.fctl_d, 1) self.assertEqual(fmac.fctl_i, 0) self.assertEqual(fmac.fctl_s, 1) self.assertEqual(fmac.exttype, b"") self.assertEqual(fmac.netid, b"") self.assertEqual(fmac.daddr, b"\x83\x11") self.assertEqual(fmac.saddr, b"\x35\x16") self.assertTrue(len(fmac.data) > 0) # Unpack APv6Frame fnet = fmac.data self.assertEqual(type(fnet), heymac.APv6Frame) self.assertEqual(fnet.iphc_prefix, 6) self.assertEqual(fnet.iphc_nhc, 1) self.assertEqual(fnet.iphc_hlim, 1) self.assertEqual(fnet.iphc_sam, 1) self.assertEqual(fnet.iphc_dam, 1) self.assertEqual(fnet.hops, 1) self.assertEqual(fnet.src, b"") self.assertEqual(fnet.dst, b"") # Unpack UDP fudp = fnet.data self.assertEqual(type(fudp), heymac.APv6Udp) self.assertEqual(fudp.hdr_type, 0b11110) self.assertEqual(fudp.hdr_co, 1) self.assertEqual(fudp.hdr_ports, 0b11) self.assertEqual(fudp.chksum, b"") self.assertEqual(fudp.src_port, 0xF0BA) self.assertEqual(fudp.dst_port, 0xF0BF) self.assertEqual(fudp.data, b"nodedata")
def test_dst_addr(self, ): # Pack f = heymac.APv6Frame( dst= b"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" ) b = bytes(f) self.assertEqual( b, b"\xD6\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" ) # Unpack f = heymac.APv6Frame(b) self.assertEqual(f.iphc_prefix, 6) self.assertEqual(f.iphc_nhc, 1) self.assertEqual(f.iphc_hlim, 1) self.assertEqual(f.iphc_sam, 1) self.assertEqual(f.iphc_dam, 0) self.assertEqual(f.hops, 0x01) self.assertEqual(f.src, b"") self.assertEqual( f.dst, b"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" )
def test_net_data(self,): # Pack f = heymac.HeyMacFrame() f.data = heymac.APv6Frame() b = bytes(f) self.assertEqual(b, b"\xE0\x00\xD7") # Unpack f = heymac.HeyMacFrame(b) self.assertEqual(f.fctl_x, 0) self.assertEqual(f.fctl_l, 0) self.assertEqual(f.fctl_n, 0) self.assertEqual(f.fctl_d, 0) self.assertEqual(f.fctl_i, 0) self.assertEqual(f.fctl_s, 0) self.assertEqual(f.fctl_m, 0) self.assertEqual(f.fctl_p, 0) self.assertEqual(f.netid, b"") self.assertEqual(f.daddr, b"") self.assertEqual(f.saddr, b"") self.assertEqual(type(f.payld), heymac.APv6Frame)
def test_nhc_extreme_value(self, ): # Pack with self.assertRaises(AssertionError): f = heymac.APv6Frame(iphc_nhc=999)
def test_nhc_uncompressed(self, ): # Only compressed next-headers are supported at this time # Uncompressed headers should raise an AssertionError with self.assertRaises(AssertionError): f = heymac.APv6Frame(iphc_nhc=0)