示例#1
0
def testfunc(child):
    global sniffer
    tap = get_bridge(os.environ["TAP"])
    child.sendline("unittests")
    check_unittests(child)  # wait for and check result of unittests
    print("." * int(child.match.group(1)), end="", flush=True)
    lladdr_src = get_host_lladdr(tap)
    child.sendline("ifconfig")
    child.expect(r"HWaddr: (?P<hwaddr>[A-Fa-f:0-9]+)\s")
    hwaddr_dst = child.match.group("hwaddr").lower()
    child.expect(r"(?P<lladdr>fe80::[A-Fa-f:0-9]+)\s")
    lladdr_dst = child.match.group("lladdr").lower()
    sniffer = Sniffer(tap)
    sniffer.start()

    def run(func):
        if child.logfile == sys.stdout:
            func(child, tap, hwaddr_dst, lladdr_dst, lladdr_src)
        else:
            try:
                func(child, tap, hwaddr_dst, lladdr_dst, lladdr_src)
                print(".", end="", flush=True)
            except Exception as e:
                print("FAILED")
                raise e

    run(test_wrong_type)
    run(test_seg_left_gt_len_addresses)
    run(test_multicast_dst)
    run(test_multicast_addr)
    run(test_multiple_addrs_of_mine_uncomp)
    run(test_forward_uncomp)
    run(test_forward_uncomp_not_first_ext_hdr)
    # compressed tests hard to implement with scapy and also covered in
    # unittests
    run(test_seq_left_0)
    run(test_time_exc)
    print("SUCCESS")
    sniffer.stop()
示例#2
0
def testfunc(child):
    # embUnit tests
    check_unittests(child)
    # output cross-checked hex data with WireShark -> "Import from Hex Dump..."
    # test_netapi_send__raw_unicast_ethernet_packet
    child.expect("Sending data from Ethernet device:")
    child.expect("00000000  3E  E6  B5  0F  19  23  3E  E6  B5  22  FD  0A  FF  FF  41  42")
    child.expect("00000010  43  44  45  46  47  00")
    # test_netapi_send__raw_broadcast_ethernet_packet
    child.expect("Sending data from Ethernet device:")
    child.expect("00000000  FF  FF  FF  FF  FF  FF  3E  E6  B5  22  FD  0A  FF  FF  41  42")
    child.expect("00000010  43  44  45  46  47  00")
    # test_netapi_send__raw_unicast_ieee802154_long_long_packet
    child.expect(r"Sending data from IEEE 802\.15\.4 device:")
    child.expect("00000000  41  DC  00  00  00  0B  FD  22  19  0F  B5  E6  3E  0A  FD  22")
    child.expect("00000010  19  0F  B5  E6  3E  31  32  33  41  42  43  44  45  46  47  00")
    # test_netapi_send__raw_unicast_ieee802154_long_short_packet
    child.expect(r"Sending data from IEEE 802\.15\.4 device:")
    child.expect("00000000  41  D8  01  00  00  0B  FD  0A  FD  22  19  0F  B5  E6  3E  31")
    child.expect("00000010  32  33  41  42  43  44  45  46  47  00")
    # test_netapi_send__raw_unicast_ieee802154_short_long_packet1
    child.expect(r"Sending data from IEEE 802\.15\.4 device:")
    child.expect("00000000  41  9C  02  00  00  0B  FD  22  19  0F  B5  E6  3E  0A  FD  31")
    child.expect("00000010  32  33  41  42  43  44  45  46  47  00")
    # test_netapi_send__raw_unicast_ieee802154_short_long_packet2
    child.expect(r"Sending data from IEEE 802\.15\.4 device:")
    child.expect("00000000  41  9C  03  00  00  0B  FD  22  19  0F  B5  E6  3E  0A  FD  31")
    child.expect("00000010  32  33  41  42  43  44  45  46  47  00")
    # test_netapi_send__raw_unicast_ieee802154_short_short_packet
    child.expect(r"Sending data from IEEE 802\.15\.4 device:")
    child.expect("00000000  41  98  04  00  00  0B  FD  0A  FD  31  32  33  41  42  43  44")
    child.expect("00000010  45  46  47  00")
    # test_netapi_send__raw_broadcast_ieee802154_long_packet
    child.expect(r"Sending data from IEEE 802\.15\.4 device:")
    child.expect("00000000  41  D8  05  00  00  FF  FF  0A  FD  22  19  0F  B5  E6  3E  31")
    child.expect("00000010  32  33  41  42  43  44  45  46  47  00")
    # test_netapi_send__raw_broadcast_ieee802154_short_packet
    child.expect(r"Sending data from IEEE 802\.15\.4 device:")
    child.expect("00000000  41  98  06  00  00  FF  FF  0A  FD  31  32  33  41  42  43  44")
    child.expect("00000010  45  46  47  00")
    # test_netapi_send__ipv6_unicast_ethernet_packet
    child.expect("Sending data from Ethernet device:")
    child.expect("00000000  3E  E6  B5  0F  19  23  3E  E6  B5  22  FD  0A  86  DD  60  00")
    child.expect("00000010  00  00  00  08  3B  40  FE  80  00  00  00  00  00  00  3C  E6")
    child.expect("00000020  B5  FF  FE  22  FD  0A  FE  80  00  00  00  00  00  00  3C  E6")
    child.expect("00000030  B5  FF  FE  0F  19  23  41  42  43  44  45  46  47  00")
    # test_netapi_send__ipv6_multicast_ethernet_packet
    child.expect("Sending data from Ethernet device:")
    child.expect("00000000  33  33  00  00  00  01  3E  E6  B5  22  FD  0A  86  DD  60  00")
    child.expect("00000010  00  00  00  08  3B  40  FE  80  00  00  00  00  00  00  3C  E6")
    child.expect("00000020  B5  FF  FE  22  FD  0A  FF  02  00  00  00  00  00  00  00  00")
    child.expect("00000030  00  00  00  00  00  01  41  42  43  44  45  46  47  00")
    # test_netapi_send__ipv6_unicast_ieee802154_packet
    child.expect("Sending data from IEEE 802.15.4 device:")
    child.expect("00000000  41  DC  07  00  00  0B  FD  22  19  0F  B5  E6  3E  0A  FD  22")
    child.expect("00000010  19  0F  B5  E6  3E  60  00  00  00  00  08  3B  40  FE  80  00")
    child.expect("00000020  00  00  00  00  00  3C  E6  B5  0F  19  22  FD  0A  FE  80  00")
    child.expect("00000030  00  00  00  00  00  3C  E6  B5  FF  FE  0F  19  23  41  42  43")
    child.expect("00000040  44  45  46  47  00")
    # test_netapi_send__ipv6_multicast_ieee802154_packet
    child.expect("Sending data from IEEE 802.15.4 device:")
    child.expect("00000000  41  D8  08  00  00  FF  FF  0A  FD  22  19  0F  B5  E6  3E  60")
    child.expect("00000010  00  00  00  00  08  3B  40  FE  80  00  00  00  00  00  00  3C")
    child.expect("00000020  E6  B5  0F  19  22  FD  0A  FF  02  00  00  00  00  00  00  00")
    child.expect("00000030  00  00  00  00  00  00  01  41  42  43  44  45  46  47  00")
    # test_netapi_recv__empty_ethernet_payload
    child.expect("pktdump dumping Ethernet packet with empty payload")
    child.expect("PKTDUMP: data received:")
    child.expect(r"~~ SNIP  0 - size:   0 byte, type: NETTYPE_UNDEF \(0\)")
    child.expect(r"00000000~~ SNIP  1 - size:  \d+ byte, type: NETTYPE_NETIF \(-1\)")
    child.expect(r"if_pid: (\d+)  rssi: -?\d+  lqi: \d+")
    assert 0 < int(child.match.group(1))
    child.expect("flags: 0x0")
    child.expect("src_l2addr: 3E:E6:B5:22:FD:0B")
    child.expect("dst_l2addr: 3E:E6:B5:22:FD:0A")
    child.expect(r"~~ PKT    -  2 snips, total size:  \d+ byte")
    # test_netapi_recv__empty_ieee802154_payload
    child.expect(r"pktdump dumping IEEE 802\.15\.4 packet with empty payload")
    child.expect("PKTDUMP: data received:")
    child.expect(r"~~ SNIP  0 - size:   0 byte, type: NETTYPE_UNDEF \(0\)")
    child.expect(r"00000000~~ SNIP  1 - size:  \d+ byte, type: NETTYPE_NETIF \(-1\)")
    child.expect(r"if_pid: (\d+)  rssi: -?\d+  lqi: \d+")
    assert 0 < int(child.match.group(1))
    child.expect("flags: 0x0")
    child.expect("src_l2addr: 3E:E6:B5:0F:19:22:FD:0B")
    child.expect("dst_l2addr: 3E:E6:B5:0F:19:22:FD:0A")
    child.expect(r"~~ PKT    -  2 snips, total size:  \d+ byte")
    # test_netapi_recv__raw_ethernet_payload
    child.expect("pktdump dumping Ethernet packet with payload 12 34 45 56")
    child.expect("PKTDUMP: data received:")
    child.expect(r"~~ SNIP  0 - size:   4 byte, type: NETTYPE_UNDEF \(0\)")
    child.expect("00000000  12  34  45  56")
    child.expect(r"~~ SNIP  1 - size:  \d+ byte, type: NETTYPE_NETIF \(-1\)")
    child.expect(r"if_pid: (\d+)  rssi: -?\d+  lqi: \d+")
    assert 0 < int(child.match.group(1))
    child.expect("flags: 0x0")
    child.expect("src_l2addr: 3E:E6:B5:22:FD:0B")
    child.expect("dst_l2addr: 3E:E6:B5:22:FD:0A")
    child.expect(r"~~ PKT    -  2 snips, total size:  \d+ byte")
    # test_netapi_recv__raw_ieee802154_payload
    child.expect(r"pktdump dumping IEEE 802\.15\.4 packet with payload 12 34 45 56")
    child.expect("PKTDUMP: data received:")
    child.expect(r"~~ SNIP  0 - size:   4 byte, type: NETTYPE_UNDEF \(0\)")
    child.expect("00000000  12  34  45  56")
    child.expect(r"~~ SNIP  1 - size:  \d+ byte, type: NETTYPE_NETIF \(-1\)")
    child.expect(r"if_pid: (\d+)  rssi: -?\d+  lqi: \d+")
    assert 0 < int(child.match.group(1))
    child.expect("flags: 0x0")
    child.expect("src_l2addr: 3E:E6:B5:0F:19:22:FD:0B")
    child.expect("dst_l2addr: 3E:E6:B5:0F:19:22:FD:0A")
    child.expect(r"~~ PKT    -  2 snips, total size:  \d+ byte")
    # test_netapi_recv__ipv6_ethernet_payload
    child.expect("pktdump dumping IPv6 over Ethernet packet with payload 01")
    child.expect("PKTDUMP: data received:")
    # payload not dumped because not parsed yet, but header looks okay, so let's
    # assume the payload is as well
    child.expect(r"~~ SNIP  0 - size:  41 byte, type: NETTYPE_IPV6 \(2\)")
    child.expect(r"traffic class: 0x00 \(ECN: 0x0, DSCP: 0x00\)")
    child.expect("flow label: 0x00000")
    child.expect("length: 1  next header: 59  hop limit: 64")
    child.expect("source address: fe80::3fe6:b5ff:fe22:fd0a")
    child.expect("destination address: fe80::3fe6:b5ff:fe22:fd0b")
    child.expect(r"~~ SNIP  1 - size:  \d+ byte, type: NETTYPE_NETIF \(-1\)")
    child.expect(r"if_pid: (\d+)  rssi: -?\d+  lqi: \d+")
    assert 0 < int(child.match.group(1))
    child.expect("flags: 0x0")
    child.expect("src_l2addr: 3E:E6:B5:22:FD:0B")
    child.expect("dst_l2addr: 3E:E6:B5:22:FD:0A")
    child.expect(r"~~ PKT    -  2 snips, total size:  \d+ byte")
示例#3
0
def testfunc(child):
    debug_enabled = child.expect([
        r"OK \(\d+ tests\)",
        r"6lo iphc: VRB present, trying to create entry for dst 2001:db8::2",
    ])
    if debug_enabled:
        # only import scapy dependency if DEBUG_ENABLE=1
        from scapy.all import SixLoWPAN, LoWPANFragmentationFirst, \
                              LoWPAN_IPHC, IPv6, ICMPv6EchoRequest

        # test_recv__success
        child.expect_exact("6lo iphc: found route, trying to forward")
        child.expect(
            r"6lo iphc: Do not know how to forward fragment from "
            r"\((?P<vrb_src>[a-fA-F0-9:]+), (?P<vrb_src_tag>\d+)\) to "
            r"\((?P<vrb_dst>[a-fA-F0-9:]+), (?P<vrb_dst_tag>\d+)\)")
        vrb_src_tag = int(child.match.group("vrb_src_tag"))
        child.expect_exact("Original fragmentation header:")
        child.expect("(?P<hex>(  [A-Fa-f0-9]{2})+)")
        frag = SixLoWPAN(bytes.fromhex(child.match.group("hex")))
        assert LoWPANFragmentationFirst in frag
        assert frag[LoWPANFragmentationFirst].datagramTag == vrb_src_tag
        stream = ""
        child.expect_exact("IPHC headers + payload:")
        for _ in range(7):
            child.expect("(?P<hex>(  [A-Fa-f0-9]{2})+)")
            stream += child.match.group("hex")
        iphc = SixLoWPAN(bytes.fromhex(stream))
        assert LoWPAN_IPHC in iphc
        assert IPv6 in iphc  # The IPHC header after compression
        assert ICMPv6EchoRequest in iphc
        # check against fields of original fragment specified in main.c
        assert iphc[LoWPAN_IPHC].tf == 0x3
        assert iphc[LoWPAN_IPHC].nh == 0b0  # Inline (ICMPv6)
        assert iphc[LoWPAN_IPHC].hlim == 0b00  # Inline as it was decremented
        assert not iphc[LoWPAN_IPHC].cid
        assert iphc[LoWPAN_IPHC].sac == 0b0  # Stateless
        assert iphc[LoWPAN_IPHC].sam == 0b00  # Inline
        assert not iphc[LoWPAN_IPHC].m  # not multicast
        assert iphc[LoWPAN_IPHC].dac == 0b0  # Stateless
        assert iphc[LoWPAN_IPHC].dam == 0b00  # Inline
        assert iphc[IPv6].src == "2001:db8::1"
        assert iphc[IPv6].dst == "2001:db8::2"
        assert iphc[IPv6].hlim == (64 - 1)  # hop limit was decremented
        assert iphc[ICMPv6EchoRequest].code == 0
        assert iphc[ICMPv6EchoRequest].cksum == 0x8ea0
        assert iphc[ICMPv6EchoRequest].id == 0x238f
        assert iphc[ICMPv6EchoRequest].seq == 2
        assert iphc[ICMPv6EchoRequest].data.startswith(
            bytes.fromhex("9d4bb21c5353535353535353535353535353535353535353"))

        # test_recv__no_route
        child.expect_exact(
            "6lo iphc: VRB present, trying to create entry for dst 2001:db8::2"
        )
        child.expect_exact(
            "6lo iphc: no route found, reassemble datagram normally")

        # test_recv__vrb_full
        child.expect_exact(
            "6lo iphc: VRB present, trying to create entry for dst 2001:db8::2"
        )
        child.expect_exact(
            "6lo iphc: no route found, reassemble datagram normally")

        # test_recv__pkt_held
        child.expect_exact("6lo iphc: found route, trying to forward")
        child.expect(
            r"6lo iphc: Do not know how to forward fragment from "
            r"\((?P<vrb_src>[a-fA-F0-9:]+), (?P<vrb_src_tag>\d+)\) to "
            r"\((?P<vrb_dst>[a-fA-F0-9:]+), (?P<vrb_dst_tag>\d+)\)")
        child.expect_exact("Original fragmentation header:")
        child.expect_exact("IPHC headers + payload:")
        check_unittests(child)
        assert int(child.match.group(1)) >= 4
示例#4
0
def testfunc(child):
    board = os.environ['BOARD']
    # Increase timeout on "real" hardware
    timeout = 120 if board != 'native' else -1
    check_unittests(child, timeout=timeout)
示例#5
0
def testfunc(child):
    # embUnit tests
    check_unittests(child)
示例#6
0
def testfunc(child):
    tap = get_bridge(os.environ["TAP"])

    child.sendline("unittests")
    check_unittests(child)  # wait for and check result of unittests
    print("." * int(child.match.group(1)), end="", flush=True)

    lladdr_src = get_host_lladdr(tap)

    def run_sock_test(func, s):
        if child.logfile == sys.stdout:
            func(child, s, tap, lladdr_src)
        else:
            try:
                func(child, s, tap, lladdr_src)
                print(".", end="", flush=True)
            except PermissionError:
                print("\n\x1b[1;33mSkipping {} because of missing "
                      "privileges\x1b[0m".format(func.__name__))
            except Exception as e:
                print("FAILED")
                raise e

    child.sendline("send-test-pkt")
    child.expect(r"Sending UDP test packets to port (\d+)\r\n")

    port = int(child.match.group(1))
    with socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) as s:
        res = socket.getaddrinfo("{}%{}".format(lladdr_src, tap), port)
        s.bind(res[0][4])
        s.settimeout(.3)
        run_sock_test(test_ipv6_ext_frag_shell_test_0, s)
        run_sock_test(test_ipv6_ext_frag_shell_test_1, s)
        run_sock_test(test_ipv6_ext_frag_send_success, s)
        run_sock_test(test_ipv6_ext_frag_send_last_fragment_filled, s)
        run_sock_test(test_ipv6_ext_frag_send_last_fragment_only_one_byte, s)
        run_sock_test(test_ipv6_ext_frag_send_full_pktbuf, s)
        run_sock_test(test_ipv6_ext_frag_fwd_success, s)
        run_sock_test(test_ipv6_ext_frag_fwd_too_big, s)

    if os.environ.get("BOARD", "") != "native":
        # ethos currently can't handle the larger, rapidly sent packets by the
        # IPv6 fragmentation of the Linux Kernel
        print("SUCCESS")
        print("Skipping datagram reception tests due to ethos bug.")
        return

    # datagram reception tests
    res = 1
    count = 0
    while res:
        # check `ifconfig` and also get addresses from it until
        # link-local address becomes valid
        time.sleep(1)
        child.sendline("ifconfig")
        child.expect(r"HWaddr: (?P<hwaddr>[A-Fa-f:0-9]+)\s")
        hwaddr_dst = child.match.group("hwaddr").lower()
        res = child.expect([
            r"(?P<lladdr>fe80::[A-Fa-f:0-9]+)\s+scope:\s+link\s+VAL",
            pexpect.TIMEOUT
        ])
        count += 1
        if res and (count > 5):
            raise pexpect.TIMEOUT("Link-local address did not become valid")
    lladdr_dst = child.match.group("lladdr").lower()

    def run(func):
        if child.logfile == sys.stdout:
            func(child, tap, hwaddr_dst, lladdr_dst, lladdr_src)
        else:
            try:
                func(child, tap, hwaddr_dst, lladdr_dst, lladdr_src)
                print(".", end="", flush=True)
            except PermissionError:
                print("\n\x1b[1;33mSkipping {} because of missing "
                      "privileges\x1b[0m".format(func.__name__))
            except Exception as e:
                print("FAILED")
                raise e

    run(test_reass_successful_udp)
    run(test_reass_too_short_header)
    run(test_reass_offset_too_large)
    print("SUCCESS")
示例#7
0
文件: 01-run.py 项目: dylad/RIOT
 def test_embedded_unittests(self):
     self.spawn.sendline("unittests")
     check_unittests(self.spawn)