for lsnr in listeners:
        # `all_rx_msg` contains a list of (msg_content, (src_addr, src_port)).
        verify(
            len(lsnr.all_rx_msg) == 0 or all([
                msg[1][0] != sender.src_addr and msg[1][1] != sender.src_port
                for msg in lsnr.all_rx_msg
            ]))


# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

r1 = wpan.Node()
r2 = wpan.Node()
r3 = wpan.Node()
r4 = wpan.Node()
fed = wpan.Node()
sed = wpan.Node()

all_routers = [r1, r2, r3, r4]
all_nodes = all_routers + [fed, sed]

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
    start_time = time.time()

    while not all([(new_channel == int(node.get(wpan.WPAN_CHANNEL), 0))
                   for node in nodes]):
        if time.time() - start_time > wait_time:
            print('Took too long to switch to channel {} ({}>{} sec)'.format(
                new_channel,
                time.time() - start_time, wait_time))
            exit(1)
        time.sleep(0.1)


# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

router = wpan.Node()
c1 = wpan.Node()
c2 = wpan.Node()

all_nodes = [router, c1, c2]

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Build network topology

router.form('announce-tst', channel=11)
# Test description: Test MeshCop Joiner and Commissioner behavior
#
# This test covers Thread commissioning with a single commissioner and
# joiner device.

test_name = __file__[:-3] if __file__.endswith('.py') else __file__
print('-' * 120)
print('Starting \'{}\''.format(test_name))

# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

c = wpan.Node()
j = wpan.Node()

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Build network topology

c.form('meshcop')

# -----------------------------------------------------------------------------------------------------------------------
# Test implementation
예제 #4
0
#
# Verify router table entries on a network with 4 routers:
# {r1, r2, r3} forming a loop with r4 connecting to r3.
#

test_name = __file__[:-3] if __file__.endswith('.py') else __file__
print('-' * 120)
print('Starting \'{}\''.format(test_name))

# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

r1 = wpan.Node()
r2 = wpan.Node()
r3 = wpan.Node()
r4 = wpan.Node()
c4 = wpan.Node()

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Build network topology
#
#
#     r1 ------ r2
예제 #5
0
#  POSSIBILITY OF SUCH DAMAGE.

from wpan import verify
import wpan

# -----------------------------------------------------------------------------------------------------------------------
# Test description: simple wpanctl get and set commands

test_name = __file__[:-3] if __file__.endswith('.py') else __file__
print('-' * 120)
print('Starting \'{}\''.format(test_name))

# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

node = wpan.Node()

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Test implementation

verify(node.get(wpan.WPAN_STATE) == wpan.STATE_OFFLINE)

# set some of properties and check and verify that the value is indeed
# changed...

node.set(wpan.WPAN_NAME, 'test-network')
# - Verify that `sed2`'s address is present in `r2` (its parent) "Thread:ChildTable:Addresses".
# - Verify that addresses/prefixes are retained by wpantund over NCP reset.
# - Verify that when an IPv6 address is removed from network interface, its corresponding prefix is also removed from
#   all nodes.

test_name = __file__[:-3] if __file__.endswith('.py') else __file__
print '-' * 120
print 'Starting \'{}\''.format(test_name)

#-----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

r1   = wpan.Node()
fed1 = wpan.Node()
r2   = wpan.Node()
sed2 = wpan.Node()

all_nodes = [r1, fed1, r2, sed2]

#-----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

#-----------------------------------------------------------------------------------------------------------------------
# Build network topology
#
#   r1 ---- r2
예제 #7
0
            mode & wpan.THREAD_MODE_FLAG_RX_ON_WHEN_IDLE != 0))
        verify(entry.is_ftd() == (
            mode & wpan.THREAD_MODE_FLAG_FULL_THREAD_DEV != 0))
        verify(entry.is_full_net_data() == (
            mode & wpan.THREAD_MODE_FLAG_FULL_NETWORK_DATA != 0))
        verify(entry.is_sec_data_req() == (
            mode & wpan.THREAD_MODE_FLAG_SECURE_DATA_REQUEST != 0))


# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

parent = wpan.Node()
child1 = wpan.Node()
child2 = wpan.Node()

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Build network topology
#

parent.form("ModeChangeReset")

child1.join_node(parent, wpan.JOIN_TYPE_END_DEVICE)
def verify_address(node_list, prefix):
    """
    This function verifies that all nodes in the `node_list` contain an IPv6 address with the given `prefix`.
    """
    for node in node_list:
        all_addrs = wpan.parse_list(node.get(wpan.WPAN_IP6_ALL_ADDRESSES))
        verify(any([addr.startswith(prefix[:-1]) for addr in all_addrs]))


# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

leader = wpan.Node()
parent = wpan.Node()
child = wpan.Node()

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Build network topology

leader.form('multi-addr-test')

leader.whitelist_node(parent)
parent.whitelist_node(leader)
예제 #9
0
from wpan import verify

# -----------------------------------------------------------------------------------------------------------------------
# Test description: Verify transmission of data polls and poll interval change.

test_name = __file__[:-3] if __file__.endswith('.py') else __file__
print('-' * 120)
print('Starting \'{}\''.format(test_name))

# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

parent = wpan.Node()
child = wpan.Node()

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Build network topology
#

parent.form("poll-interval")

child.join_node(parent, wpan.JOIN_TYPE_SLEEPY_END_DEVICE)
예제 #10
0
#                  |            |
#               c2 (15.4)     c3 (15.4)
#
# c3 is used for quick router promotion of r3.
#
test_name = __file__[:-3] if __file__.endswith('.py') else __file__
print('-' * 120)
print('Starting \'{}\''.format(test_name))

# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

r1 = wpan.Node(wpan.NODE_TREL)
r2 = wpan.Node(wpan.NODE_15_4_TREL)
r3 = wpan.Node(wpan.NODE_15_4)
c2 = wpan.Node(wpan.NODE_15_4)
c3 = wpan.Node(wpan.NODE_15_4)

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Build network topology
#

r1.allowlist_node(r2)
#
# This test verifies that address cache entry associated with a SED child
# addresses is removed from new parent node ensuring we would not have a
# routing loop.

test_name = __file__[:-3] if __file__.endswith('.py') else __file__
print('-' * 120)
print('Starting \'{}\''.format(test_name))

# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

r1 = wpan.Node()
r2 = wpan.Node()
r3 = wpan.Node()
c = wpan.Node()
c3 = wpan.Node()

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Build network topology
#
#   r3 ---- r1 ---- r2
#   |               |
예제 #12
0
# -----------------------------------------------------------------------------------------------------------------------
# Test description: discover scan

test_name = __file__[:-3] if __file__.endswith('.py') else __file__
print('-' * 120)
print('Starting \'{}\''.format(test_name))

# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

NUM_NODES = 5

nodes = []
for i in range(NUM_NODES):
    nodes.append(wpan.Node())

scanner = wpan.Node()

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Build network topology

for node in nodes:
    node.form(node.interface_name)

# -----------------------------------------------------------------------------------------------------------------------
# -----------------------------------------------------------------------------------------------------------------------
# Test description: Test active scan with nodes supporting different radios
#

test_name = __file__[:-3] if __file__.endswith('.py') else __file__
print('-' * 120)
print('Starting \'{}\''.format(test_name))

# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 1
wpan.Node.set_time_speedup_factor(speedup)

n1 = wpan.Node(wpan.NODE_15_4)
n2 = wpan.Node(wpan.NODE_TREL)
n3 = wpan.Node(wpan.NODE_15_4_TREL)
s1 = wpan.Node(wpan.NODE_15_4)
s2 = wpan.Node(wpan.NODE_TREL)
s3 = wpan.Node(wpan.NODE_15_4_TREL)

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Build network topology

n1.form("n1", channel='20')
예제 #14
0
                verify(p.is_config() == configure)
                verify(p.is_preferred() == preferred)
                verify(p.priority == priority)
                break
        else:
            raise wpan.VerifyError("Did not find prefix {} on node {}".format(
                prefix, node))


# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 25
wpan.Node.set_time_speedup_factor(speedup)

r1 = wpan.Node()
r2 = wpan.Node()
c1 = wpan.Node()
c2 = wpan.Node()

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Build network topology
#

r1.form("partition")
예제 #15
0
                verify(p.is_config() == configure)
                verify(p.is_preferred() == preferred)
                verify(p.priority == priority)
                break
        else:
            print "Did not find prefix {} on node {}".format(prefix, node)
            exit(1)


#-----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

r1 = wpan.Node()
r2 = wpan.Node()
sc1 = wpan.Node()
sc2 = wpan.Node()

all_nodes = [r1, r2, sc1, sc2]

#-----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

#-----------------------------------------------------------------------------------------------------------------------
# Build network topology

r1.whitelist_node(r2)
# Test description: Test MeshCop Joiner, Commissioner and Joiner-router behavior
#
# This test covers Thread commissioning with a commissioner, a joiner-router and
# joiner device.

test_name = __file__[:-3] if __file__.endswith('.py') else __file__
print('-' * 120)
print('Starting \'{}\''.format(test_name))

# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

r1 = wpan.Node()
r2 = wpan.Node()
c2 = wpan.Node()
joiner = wpan.Node()

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Build network topology
#
#       r1 ---------- r2
#   (commissioner)   (joiner-router)
#                     |
예제 #17
0
print 'Starting \'{}\''.format(test_name)

#-----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

NUM_ROUTERS = 4

routers = []
sed_children = []
fed_children = []

for index in range(NUM_ROUTERS):
    routers.append(wpan.Node())
    sed_children.append(wpan.Node())

fed_children.append(wpan.Node())
fed_children.append(wpan.Node())

all_nodes = routers + sed_children + fed_children

#-----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

#-----------------------------------------------------------------------------------------------------------------------
# Build network topology
#
예제 #18
0
#  POSSIBILITY OF SUCH DAMAGE.

import wpan
from wpan import verify

# -----------------------------------------------------------------------------------------------------------------------
# Test description: Check insecure data transmission during joining.

test_name = __file__[:-3] if __file__.endswith('.py') else __file__
print('-' * 120)
print('Starting \'{}\''.format(test_name))

# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

node1 = wpan.Node()
node2 = wpan.Node()

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Build network topology

node1.form("insec-join-test")

# -----------------------------------------------------------------------------------------------------------------------
# Test implementation
#     /     |     \
#    /      |      \
#   c1     c2       c3
# (15.4)  (trel)  (trel+15.4)

test_name = __file__[:-3] if __file__.endswith('.py') else __file__
print('-' * 120)
print('Starting \'{}\''.format(test_name))

# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

parent = wpan.Node(wpan.NODE_15_4_TREL)
c1 = wpan.Node(wpan.NODE_15_4)
c2 = wpan.Node(wpan.NODE_TREL)
c3 = wpan.Node(wpan.NODE_15_4_TREL)

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------
# Test implementation

WAIT_TIME = 5

# Verify that each node supports the correct radio links:
예제 #20
0
test_name = __file__[:-3] if __file__.endswith('.py') else __file__
print('-' * 120)
print('Starting \'{}\''.format(test_name))

# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

NUM_ROUTERS = 2
NUM_CHILDREN = 1

routers = []
for num in range(NUM_ROUTERS):
    routers.append(wpan.Node())

children = []
for num in range(NUM_CHILDREN):
    children.append(wpan.Node())

# end-device per router used for quick promotion to router role
ed = [0]
for num in range(1, NUM_ROUTERS):
    ed.append(wpan.Node())

all_nodes = routers + children + ed

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes
            print(
                'Took too long to switch to channel {} ({}>{} sec)'.format(
                    new_channel, time.time() - start_time, wait_time
                )
            )
            exit(1)
        time.sleep(0.1)


# -----------------------------------------------------------------------------------------------------------------------
# Creating `wpan.Nodes` instances

speedup = 4
wpan.Node.set_time_speedup_factor(speedup)

r1 = wpan.Node()
r2 = wpan.Node()
r3 = wpan.Node()
sc1 = wpan.Node()
ec1 = wpan.Node()
sc2 = wpan.Node()
sc3 = wpan.Node()

all_nodes = [r1, r2, r3, sc1, ec1, sc2, sc3]

# -----------------------------------------------------------------------------------------------------------------------
# Init all nodes

wpan.Node.init_all_nodes()

# -----------------------------------------------------------------------------------------------------------------------