From 5569ecfa0ba1297bcf88628f3d49b774d7f6375e Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Mon, 19 Aug 2019 20:12:04 -0700 Subject: [PATCH] [toranj] test-case covering attach between single parent/child with poor link (#4114) --- tests/toranj/start.sh | 1 + .../test-034-poor-link-parent-child-attach.py | 76 +++++++++++++++++++ tests/toranj/wpan.py | 4 + 3 files changed, 81 insertions(+) create mode 100644 tests/toranj/test-034-poor-link-parent-child-attach.py diff --git a/tests/toranj/start.sh b/tests/toranj/start.sh index abc3709b5..311e1f94c 100755 --- a/tests/toranj/start.sh +++ b/tests/toranj/start.sh @@ -136,6 +136,7 @@ run test-030-slaac-address-ncp.py run test-031-meshcop-joiner-commissioner.py run test-032-child-attach-with-multiple-ip-addresses.py run test-033-mesh-local-prefix-change.py +run test-034-poor-link-parent-child-attach.py run test-100-mcu-power-state.py run test-600-channel-manager-properties.py run test-601-channel-manager-channel-change.py diff --git a/tests/toranj/test-034-poor-link-parent-child-attach.py b/tests/toranj/test-034-poor-link-parent-child-attach.py new file mode 100644 index 000000000..a10f9ca90 --- /dev/null +++ b/tests/toranj/test-034-poor-link-parent-child-attach.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python +# +# Copyright (c) 2019, The OpenThread Authors. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the copyright holder nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +import wpan + +# ----------------------------------------------------------------------------------------------------------------------- +# Test description: +# +# This test covers a situation where a single parent exists in network with poor link quality ensuding the child +# can attach the parent. + +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() + +# ----------------------------------------------------------------------------------------------------------------------- +# Test implementation + +parent.form("network") + +# Create a poor link between child and parent using MAC fixed RSSI filter + +parent.set(wpan.WPAN_MAC_FILTER_FIXED_RSSI, '-99') +parent.add(wpan.WPAN_MAC_FILTER_ENTRIES, child.get(wpan.WPAN_EXT_ADDRESS)[1:-1]) + +child.set(wpan.WPAN_MAC_FILTER_FIXED_RSSI, '-99') +child.add(wpan.WPAN_MAC_FILTER_ENTRIES, parent.get(wpan.WPAN_EXT_ADDRESS)[1:-1]) + +# Ensure child can still attach the single low-link quality parent +child.join_node(parent, node_type=wpan.JOIN_TYPE_END_DEVICE) + +# ----------------------------------------------------------------------------------------------------------------------- +# Test finished + +wpan.Node.finalize_all_nodes() + +print('\'{}\' passed.'.format(test_name)) diff --git a/tests/toranj/wpan.py b/tests/toranj/wpan.py index 410d93842..b16889a79 100644 --- a/tests/toranj/wpan.py +++ b/tests/toranj/wpan.py @@ -122,6 +122,10 @@ WPAN_MAC_BLACKLIST_ENABLED = "MAC:Blacklist:Enabled" WPAN_MAC_BLACKLIST_ENTRIES = "MAC:Blacklist:Entries" WPAN_MAC_BLACKLIST_ENTRIES_ASVALMAP = "MAC:Blacklist:Entries:AsValMap" +WPAN_MAC_FILTER_FIXED_RSSI = "MAC:Filter:FixedRssi" +WPAN_MAC_FILTER_ENTRIES = "MAC:Filter:Entries" +WPAN_MAC_FILTER_ENTRIES_ASVALMAP = "MAC:Filter:Entries:AsValMap" + WPAN_CHILD_SUPERVISION_INTERVAL = "ChildSupervision:Interval" WPAN_CHILD_SUPERVISION_CHECK_TIMEOUT = "ChildSupervision:CheckTimeout"