diff mbox series

[net,01/17] selftests: mptcp: lib: skip if not below kernel version

Message ID 20230609-upstream-net-20230610-mptcp-selftests-support-old-kernels-part-3-v1-1-2896fe2ee8a3@tessares.net (mailing list archive)
State Accepted
Commit b1a6a38ab8a633546cefae890da842f19e006c74
Delegated to: Netdev Maintainers
Headers show
Series [net,01/17] selftests: mptcp: lib: skip if not below kernel version | expand

Checks

Context Check Description
netdev/series_format fail Series does not have a cover letter; Series longer than 15 patches (and no cover letter)
netdev/tree_selection success Clearly marked for net
netdev/fixes_present success Fixes tag present in non-next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 8 this patch: 8
netdev/cc_maintainers success CCed 14 of 14 maintainers
netdev/build_clang success Errors and warnings before: 8 this patch: 8
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success net selftest script(s) already in Makefile
netdev/verify_fixes success Fixes tag looks correct
netdev/build_allmodconfig_warn success Errors and warnings before: 8 this patch: 8
netdev/checkpatch warning WARNING: line length of 84 exceeds 80 columns
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Matthieu Baerts June 10, 2023, 4:11 p.m. UTC
Selftests are supposed to run on any kernels, including the old ones not
supporting all MPTCP features.

A new function is now available to easily detect if a feature is
missing by looking at the kernel version. That's clearly not ideal and
this kind of check should be avoided as soon as possible. But sometimes,
there are no external sign that a "feature" is available or not:
internal behaviours can change without modifying the uAPI and these
selftests are verifying the internal behaviours. Sometimes, the only
(easy) way to verify if the feature is present is to run the test but
then the validation cannot determine if there is a failure with the
feature or if the feature is missing. Then it looks better to check the
kernel version instead of having tests that can never fail. In any case,
we need a solution not to have a whole selftest being marked as failed
just because one sub-test has failed.

Note that this env var car be set to 1 not to do such check and run the
linked sub-test: SELFTESTS_MPTCP_LIB_NO_KVERSION_CHECK.

This new helper is going to be used in the following commits. In order
to ease the backport of such future patches, it would be good if this
patch is backported up to the introduction of MPTCP selftests, hence the
Fixes tag below: this type of check was supposed to be done from the
beginning.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: 048d19d444be ("mptcp: add basic kselftest for mptcp")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/mptcp_lib.sh | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

Comments

patchwork-bot+netdevbpf@kernel.org June 13, 2023, midnight UTC | #1
Hello:

This series was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Sat, 10 Jun 2023 18:11:36 +0200 you wrote:
> Selftests are supposed to run on any kernels, including the old ones not
> supporting all MPTCP features.
> 
> A new function is now available to easily detect if a feature is
> missing by looking at the kernel version. That's clearly not ideal and
> this kind of check should be avoided as soon as possible. But sometimes,
> there are no external sign that a "feature" is available or not:
> internal behaviours can change without modifying the uAPI and these
> selftests are verifying the internal behaviours. Sometimes, the only
> (easy) way to verify if the feature is present is to run the test but
> then the validation cannot determine if there is a failure with the
> feature or if the feature is missing. Then it looks better to check the
> kernel version instead of having tests that can never fail. In any case,
> we need a solution not to have a whole selftest being marked as failed
> just because one sub-test has failed.
> 
> [...]

Here is the summary with links:
  - [net,01/17] selftests: mptcp: lib: skip if not below kernel version
    https://git.kernel.org/netdev/net/c/b1a6a38ab8a6
  - [net,02/17] selftests: mptcp: join: use 'iptables-legacy' if available
    https://git.kernel.org/netdev/net/c/0c4cd3f86a40
  - [net,03/17] selftests: mptcp: join: helpers to skip tests
    https://git.kernel.org/netdev/net/c/cdb50525345c
  - [net,04/17] selftests: mptcp: join: skip check if MIB counter not supported
    (no matching commit)
  - [net,05/17] selftests: mptcp: join: skip test if iptables/tc cmds fail
    https://git.kernel.org/netdev/net/c/4a0b866a3f7d
  - [net,06/17] selftests: mptcp: join: support local endpoint being tracked or not
    https://git.kernel.org/netdev/net/c/d4c81bbb8600
  - [net,07/17] selftests: mptcp: join: skip Fastclose tests if not supported
    https://git.kernel.org/netdev/net/c/ae947bb2c253
  - [net,08/17] selftests: mptcp: join: support RM_ADDR for used endpoints or not
    https://git.kernel.org/netdev/net/c/425ba803124b
  - [net,09/17] selftests: mptcp: join: skip implicit tests if not supported
    https://git.kernel.org/netdev/net/c/36c4127ae8dd
  - [net,10/17] selftests: mptcp: join: skip backup if set flag on ID not supported
    https://git.kernel.org/netdev/net/c/07216a3c5d92
  - [net,11/17] selftests: mptcp: join: skip fullmesh flag tests if not supported
    https://git.kernel.org/netdev/net/c/9db34c4294af
  - [net,12/17] selftests: mptcp: join: skip userspace PM tests if not supported
    https://git.kernel.org/netdev/net/c/f2b492b04a16
  - [net,13/17] selftests: mptcp: join: skip fail tests if not supported
    https://git.kernel.org/netdev/net/c/ff8897b51894
  - [net,14/17] selftests: mptcp: join: skip MPC backups tests if not supported
    https://git.kernel.org/netdev/net/c/632978f0a961
  - [net,15/17] selftests: mptcp: join: skip PM listener tests if not supported
    https://git.kernel.org/netdev/net/c/0471bb479af0
  - [net,16/17] selftests: mptcp: join: uniform listener tests
    https://git.kernel.org/netdev/net/c/96b84195df61
  - [net,17/17] selftests: mptcp: join: skip mixed tests if not supported
    https://git.kernel.org/netdev/net/c/6673851be0fc

You are awesome, thank you!
diff mbox series

Patch

diff --git a/tools/testing/selftests/net/mptcp/mptcp_lib.sh b/tools/testing/selftests/net/mptcp/mptcp_lib.sh
index 29b65f4b73b2..f32045b23b89 100644
--- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh
@@ -76,3 +76,29 @@  mptcp_lib_kallsyms_doesnt_have() {
 
 	mptcp_lib_fail_if_expected_feature "${sym} symbol has been found"
 }
+
+# !!!AVOID USING THIS!!!
+# Features might not land in the expected version and features can be backported
+#
+# $1: kernel version, e.g. 6.3
+mptcp_lib_kversion_ge() {
+	local exp_maj="${1%.*}"
+	local exp_min="${1#*.}"
+	local v maj min
+
+	# If the kernel has backported features, set this env var to 1:
+	if [ "${SELFTESTS_MPTCP_LIB_NO_KVERSION_CHECK:-}" = "1" ]; then
+		return 0
+	fi
+
+	v=$(uname -r | cut -d'.' -f1,2)
+	maj=${v%.*}
+	min=${v#*.}
+
+	if   [ "${maj}" -gt "${exp_maj}" ] ||
+	   { [ "${maj}" -eq "${exp_maj}" ] && [ "${min}" -ge "${exp_min}" ]; }; then
+		return 0
+	fi
+
+	mptcp_lib_fail_if_expected_feature "kernel version ${1} lower than ${v}"
+}