selftests: mlxsw: Add helpers for skipping selftests
authorPetr Machata <petrm@nvidia.com>
Sun, 24 Oct 2021 07:19:09 +0000 (10:19 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 25 Oct 2021 13:10:11 +0000 (14:10 +0100)
A number of mlxsw-specific selftests currently detect whether they are run
on a compatible machine, and bail out silently when not. These tests are
however done in a somewhat impenetrable manner by directly comparing PCI
IDs against a blacklist or a whitelist, and bailing out silently if the
machine is not compatible.

Instead, add a helper, mlxsw_only_on_spectrum(), which allows specifying
the supported machines in a human-readable manner. If the current machine
is incompatible, the helper emits a SKIP message and returns an error code,
based on which the caller can gracefully bail out in a suitable way. This
allows a more readable conditions such as:

mlxsw_only_on_spectrum 2+ || return

Convert all existing open-coded guards to the new helper. Also add two new
guards to do_mark_test() and do_drop_test(), which are supported only on
Spectrum-2+, but the corresponding check was not there.

Signed-off-by: Petr Machata <petrm@nvidia.com>
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/drivers/net/mlxsw/devlink_trap_control.sh
tools/testing/selftests/drivers/net/mlxsw/mlxsw_lib.sh
tools/testing/selftests/drivers/net/mlxsw/sch_red_core.sh
tools/testing/selftests/drivers/net/mlxsw/spectrum-2/resource_scale.sh
tools/testing/selftests/drivers/net/mlxsw/spectrum/devlink_lib_spectrum.sh
tools/testing/selftests/drivers/net/mlxsw/tc_restrictions.sh
tools/testing/selftests/drivers/net/mlxsw/tc_sample.sh
tools/testing/selftests/net/forwarding/lib.sh

index a372734..d3a891d 100755 (executable)
@@ -87,6 +87,7 @@ ALL_TESTS="
 NUM_NETIFS=4
 source $lib_dir/lib.sh
 source $lib_dir/devlink_lib.sh
+source mlxsw_lib.sh
 
 h1_create()
 {
@@ -626,8 +627,7 @@ ipv6_redirect_test()
 
 ptp_event_test()
 {
-       # PTP is only supported on Spectrum-1, for now.
-       [[ "$DEVLINK_VIDDID" != "15b3:cb84" ]] && return
+       mlxsw_only_on_spectrum 1 || return
 
        # PTP Sync (0)
        devlink_trap_stats_test "PTP Time-Critical Event Message" "ptp_event" \
@@ -638,8 +638,7 @@ ptp_event_test()
 
 ptp_general_test()
 {
-       # PTP is only supported on Spectrum-1, for now.
-       [[ "$DEVLINK_VIDDID" != "15b3:cb84" ]] && return
+       mlxsw_only_on_spectrum 1 || return
 
        # PTP Announce (b)
        devlink_trap_stats_test "PTP General Message" "ptp_general" \
index cbe50f2..a95856a 100644 (file)
@@ -11,3 +11,53 @@ if [[ ! -v MLXSW_CHIP ]]; then
                exit 1
        fi
 fi
+
+MLXSW_SPECTRUM_REV=$(case $MLXSW_CHIP in
+                            mlxsw_spectrum)
+                                    echo 1 ;;
+                            mlxsw_spectrum*)
+                                    echo ${MLXSW_CHIP#mlxsw_spectrum} ;;
+                            *)
+                                    echo "Couldn't determine Spectrum chip revision." \
+                                         > /dev/stderr ;;
+                    esac)
+
+mlxsw_on_spectrum()
+{
+       local rev=$1; shift
+       local op="=="
+       local rev2=${rev%+}
+
+       if [[ $rev2 != $rev ]]; then
+               op=">="
+       fi
+
+       ((MLXSW_SPECTRUM_REV $op rev2))
+}
+
+__mlxsw_only_on_spectrum()
+{
+       local rev=$1; shift
+       local caller=$1; shift
+       local src=$1; shift
+
+       if ! mlxsw_on_spectrum "$rev"; then
+               log_test_skip $src:$caller "(Spectrum-$rev only)"
+               return 1
+       fi
+}
+
+mlxsw_only_on_spectrum()
+{
+       local caller=${FUNCNAME[1]}
+       local src=${BASH_SOURCE[1]}
+       local rev
+
+       for rev in "$@"; do
+               if __mlxsw_only_on_spectrum "$rev" "$caller" "$src"; then
+                       return 0
+               fi
+       done
+
+       return 1
+}
index dd90cd8..f260f01 100644 (file)
@@ -73,6 +73,7 @@ CHECK_TC="yes"
 lib_dir=$(dirname $0)/../../../net/forwarding
 source $lib_dir/lib.sh
 source $lib_dir/devlink_lib.sh
+source mlxsw_lib.sh
 source qos_lib.sh
 
 ipaddr()
@@ -479,10 +480,7 @@ do_ecn_test_perband()
        local vlan=$1; shift
        local limit=$1; shift
 
-       # Per-band ECN counters are not supported on Spectrum-1 and Spectrum-2.
-       [[ "$DEVLINK_VIDDID" == "15b3:cb84" ||
-          "$DEVLINK_VIDDID" == "15b3:cf6c" ]] && return
-
+       mlxsw_only_on_spectrum 3+ || return
        __do_ecn_test get_qdisc_nmarked "$vlan" "$limit" "per-band ECN"
 }
 
@@ -584,6 +582,8 @@ do_mark_test()
        local should_fail=$1; shift
        local base
 
+       mlxsw_only_on_spectrum 2+ || return
+
        RET=0
 
        start_tcp_traffic $h1.$vlan $(ipaddr 1 $vlan) $(ipaddr 3 $vlan) \
@@ -632,6 +632,8 @@ do_drop_test()
        local base
        local now
 
+       mlxsw_only_on_spectrum 2+ || return
+
        RET=0
 
        start_traffic $h1.$vlan $(ipaddr 1 $vlan) $(ipaddr 3 $vlan) $h3_mac
index 50654f8..02b7eea 100755 (executable)
@@ -7,12 +7,9 @@ NUM_NETIFS=6
 source $lib_dir/lib.sh
 source $lib_dir/tc_common.sh
 source $lib_dir/devlink_lib.sh
+source ../mlxsw_lib.sh
 
-if [[ "$DEVLINK_VIDDID" != "15b3:cf6c" && \
-       "$DEVLINK_VIDDID" != "15b3:cf70" ]]; then
-       echo "SKIP: test is tailored for Mellanox Spectrum-2 and Spectrum-3"
-       exit 1
-fi
+mlxsw_only_on_spectrum 2+ || exit 1
 
 current_test=""
 
index 73035e2..06a80f4 100644 (file)
@@ -2,11 +2,9 @@
 # SPDX-License-Identifier: GPL-2.0
 
 source "../../../../net/forwarding/devlink_lib.sh"
+source ../mlxsw_lib.sh
 
-if [ "$DEVLINK_VIDDID" != "15b3:cb84" ]; then
-       echo "SKIP: test is tailored for Mellanox Spectrum"
-       exit 1
-fi
+mlxsw_only_on_spectrum 1 || exit 1
 
 # Needed for returning to default
 declare -A KVD_DEFAULTS
index 5ec3beb..0441a18 100755 (executable)
@@ -20,6 +20,7 @@ NUM_NETIFS=2
 source $lib_dir/tc_common.sh
 source $lib_dir/lib.sh
 source $lib_dir/devlink_lib.sh
+source mlxsw_lib.sh
 
 switch_create()
 {
@@ -169,7 +170,7 @@ matchall_sample_egress_test()
 
        # It is forbidden in mlxsw driver to have matchall with sample action
        # bound on egress. Spectrum-1 specific restriction
-       [[ "$DEVLINK_VIDDID" != "15b3:cb84" ]] && return
+       mlxsw_only_on_spectrum 1 || return
 
        tc qdisc add dev $swp1 clsact
 
index 373d5f2..83a0210 100755 (executable)
@@ -51,6 +51,7 @@ NUM_NETIFS=8
 CAPTURE_FILE=$(mktemp)
 source $lib_dir/lib.sh
 source $lib_dir/devlink_lib.sh
+source mlxsw_lib.sh
 
 # Available at https://github.com/Mellanox/libpsample
 require_command psample
@@ -431,7 +432,7 @@ tc_sample_md_out_tc_test()
        RET=0
 
        # Output traffic class is not supported on Spectrum-1.
-       [[ "$DEVLINK_VIDDID" == "15b3:cb84" ]] && return
+       mlxsw_only_on_spectrum 2+ || return
 
        tc filter add dev $rp1 ingress protocol all pref 1 handle 101 matchall \
                skip_sw action sample rate 5 group 1
@@ -477,7 +478,7 @@ tc_sample_md_out_tc_occ_test()
        RET=0
 
        # Output traffic class occupancy is not supported on Spectrum-1.
-       [[ "$DEVLINK_VIDDID" == "15b3:cb84" ]] && return
+       mlxsw_only_on_spectrum 2+ || return
 
        tc filter add dev $rp1 ingress protocol all pref 1 handle 101 matchall \
                skip_sw action sample rate 1024 group 1
@@ -521,7 +522,7 @@ tc_sample_md_latency_test()
        RET=0
 
        # Egress sampling not supported on Spectrum-1.
-       [[ "$DEVLINK_VIDDID" == "15b3:cb84" ]] && return
+       mlxsw_only_on_spectrum 2+ || return
 
        tc filter add dev $rp2 egress protocol all pref 1 handle 101 matchall \
                skip_sw action sample rate 5 group 1
@@ -550,7 +551,7 @@ tc_sample_acl_group_conflict_test()
        # port with different groups.
 
        # Policy-based sampling is not supported on Spectrum-1.
-       [[ "$DEVLINK_VIDDID" == "15b3:cb84" ]] && return
+       mlxsw_only_on_spectrum 2+ || return
 
        tc filter add dev $rp1 ingress protocol ip pref 1 handle 101 flower \
                skip_sw action sample rate 1024 group 1
@@ -579,7 +580,7 @@ __tc_sample_acl_rate_test()
        RET=0
 
        # Policy-based sampling is not supported on Spectrum-1.
-       [[ "$DEVLINK_VIDDID" == "15b3:cb84" ]] && return
+       mlxsw_only_on_spectrum 2+ || return
 
        tc filter add dev $port $bind protocol ip pref 1 handle 101 flower \
                skip_sw dst_ip 198.51.100.1 action sample rate 32 group 1
@@ -631,7 +632,7 @@ tc_sample_acl_max_rate_test()
        RET=0
 
        # Policy-based sampling is not supported on Spectrum-1.
-       [[ "$DEVLINK_VIDDID" == "15b3:cb84" ]] && return
+       mlxsw_only_on_spectrum 2+ || return
 
        tc filter add dev $rp1 ingress protocol ip pref 1 handle 101 flower \
                skip_sw action sample rate $((2 ** 24 - 1)) group 1
index 520d8b5..dfd827b 100644 (file)
@@ -286,6 +286,15 @@ log_test()
        return 0
 }
 
+log_test_skip()
+{
+       local test_name=$1
+       local opt_str=$2
+
+       printf "TEST: %-60s  [SKIP]\n" "$test_name $opt_str"
+       return 0
+}
+
 log_info()
 {
        local msg=$1