mbox series

[net-next,0/6] selftests: Add TEST_INCLUDES directive and adjust tests to use it

Message ID 20240124170222.261664-1-bpoirier@nvidia.com
Headers show
Series selftests: Add TEST_INCLUDES directive and adjust tests to use it | expand

Message

Benjamin Poirier Jan. 24, 2024, 5:02 p.m. UTC
After commit 25ae948b4478 ("selftests/net: add lib.sh") but before commit
2114e83381d3 ("selftests: forwarding: Avoid failures to source
net/lib.sh"), some net selftests encountered errors when they were being
exported and run. This was because the new net/lib.sh was not exported
along with the tests. The errors were crudely avoided by duplicating some
content between net/lib.sh and net/forwarding/lib.sh in 2114e83381d3.

In order to restore the sourcing of net/lib.sh from net/forwarding/lib.sh
and remove the duplicated content, this series introduces a new selftests
Makefile variable to list extra files to export from other directories and
makes use of it to avoid reintroducing the errors mentioned above.

v1:
* "selftests: Introduce Makefile variable to list shared bash scripts"
Changed TEST_INCLUDES to take relative paths, like other TEST_* variables.
Paths are adjusted accordingly in the subsequent patches. (Vladimir Oltean)

* selftests: bonding: Change script interpreter
  selftests: forwarding: Remove executable bits from lib.sh
Removed from this series, submitted separately.

Since commit 2114e83381d3 ("selftests: forwarding: Avoid failures to source
net/lib.sh") resolved the test errors, this version of the series is
focused on removing the duplication that was added in that commit. Directly
rebasing the series would reintroduce the problems that 2114e83381d3
avoided before fixing them again. In order to prevent such breakage partway
through the series, patches are reordered and content changed slightly but
there is no diff at the end compared with the simple rebasing approach. I
have dropped most review tags on account of this reordering.

RFC:
https://lore.kernel.org/netdev/20231222135836.992841-1-bpoirier@nvidia.com/

Link: https://lore.kernel.org/netdev/ZXu7dGj7F9Ng8iIX@Laptop-X1/

Benjamin Poirier (5):
  selftests: Introduce Makefile variable to list shared bash scripts
  selftests: bonding: Add net/forwarding/lib.sh to TEST_INCLUDES
  selftests: team: Add shared library scripts to TEST_INCLUDES
  selftests: dsa: Replace test symlinks by wrapper script
  selftests: forwarding: Redefine relative_path variable

Petr Machata (1):
  selftests: forwarding: Remove duplicated lib.sh content

 Documentation/dev-tools/kselftest.rst         | 10 +++++
 tools/testing/selftests/Makefile              |  7 +++-
 .../selftests/drivers/net/bonding/Makefile    |  7 +++-
 .../net/bonding/bond-eth-type-change.sh       |  2 +-
 .../drivers/net/bonding/bond_topo_2d1c.sh     |  2 +-
 .../drivers/net/bonding/dev_addr_lists.sh     |  2 +-
 .../net/bonding/mode-1-recovery-updelay.sh    |  2 +-
 .../net/bonding/mode-2-recovery-updelay.sh    |  2 +-
 .../drivers/net/bonding/net_forwarding_lib.sh |  1 -
 .../selftests/drivers/net/dsa/Makefile        | 18 ++++++++-
 .../drivers/net/dsa/bridge_locked_port.sh     |  2 +-
 .../selftests/drivers/net/dsa/bridge_mdb.sh   |  2 +-
 .../selftests/drivers/net/dsa/bridge_mld.sh   |  2 +-
 .../drivers/net/dsa/bridge_vlan_aware.sh      |  2 +-
 .../drivers/net/dsa/bridge_vlan_mcast.sh      |  2 +-
 .../drivers/net/dsa/bridge_vlan_unaware.sh    |  2 +-
 .../testing/selftests/drivers/net/dsa/lib.sh  |  1 -
 .../drivers/net/dsa/local_termination.sh      |  2 +-
 .../drivers/net/dsa/no_forwarding.sh          |  2 +-
 .../net/dsa/run_net_forwarding_test.sh        |  9 +++++
 .../selftests/drivers/net/dsa/tc_actions.sh   |  2 +-
 .../selftests/drivers/net/dsa/tc_common.sh    |  1 -
 .../drivers/net/dsa/test_bridge_fdb_stress.sh |  2 +-
 .../selftests/drivers/net/team/Makefile       |  7 ++--
 .../drivers/net/team/dev_addr_lists.sh        |  4 +-
 .../selftests/drivers/net/team/lag_lib.sh     |  1 -
 .../drivers/net/team/net_forwarding_lib.sh    |  1 -
 tools/testing/selftests/lib.mk                | 19 ++++++++++
 .../testing/selftests/net/forwarding/Makefile |  3 ++
 tools/testing/selftests/net/forwarding/lib.sh | 37 +++----------------
 .../net/forwarding/mirror_gre_lib.sh          |  2 +-
 .../net/forwarding/mirror_gre_topo_lib.sh     |  2 +-
 32 files changed, 96 insertions(+), 64 deletions(-)
 delete mode 120000 tools/testing/selftests/drivers/net/bonding/net_forwarding_lib.sh
 delete mode 120000 tools/testing/selftests/drivers/net/dsa/lib.sh
 create mode 100755 tools/testing/selftests/drivers/net/dsa/run_net_forwarding_test.sh
 delete mode 120000 tools/testing/selftests/drivers/net/dsa/tc_common.sh
 delete mode 120000 tools/testing/selftests/drivers/net/team/lag_lib.sh
 delete mode 120000 tools/testing/selftests/drivers/net/team/net_forwarding_lib.sh

Comments

Benjamin Poirier Jan. 24, 2024, 7:27 p.m. UTC | #1
On 2024-01-24 10:24 -0800, Jay Vosburgh wrote:
[...]
> >diff --git a/tools/testing/selftests/drivers/net/bonding/bond_topo_2d1c.sh b/tools/testing/selftests/drivers/net/bonding/bond_topo_2d1c.sh
> >index a509ef949dcf..0eb7edfb584c 100644
> >--- a/tools/testing/selftests/drivers/net/bonding/bond_topo_2d1c.sh
> >+++ b/tools/testing/selftests/drivers/net/bonding/bond_topo_2d1c.sh
> >@@ -28,7 +28,7 @@
> > REQUIRE_MZ=no
> > NUM_NETIFS=0
> > lib_dir=$(dirname "$0")
> >-source ${lib_dir}/net_forwarding_lib.sh
> >+source "$lib_dir"/../../../net/forwarding/lib.sh
> 
> 	Is there a way to pass TEST_INCLUDES via the environment or as a
> parameter, so that it's not necessary to hard code the path name here
> and in the similar cases below?

It think would be possible but I see two issues:

1) Tests can be run in a myriad ways. Some of them (`make run_tests`,
`run_kselftest.sh`) use runner.sh which would be the place to set
environment variables for a test. However it's also possible to run
tests directly:

tools/testing/selftests/drivers/net/bonding# ./dev_addr_lists.sh

In that case, there's nothing to automatically set an environment
variable for the test.

I think that could be addressed, for example by putting the content of
TEST_INCLUDES in a file and having the test read it itself, but ...

2)
As can be seen in the dsa case and in the bonding and team cases after
patch 6, the relationship between the files listed in TEST_INCLUDES and
the files sourced in a test is not 1:1. So automatically sourcing all
files listed in TEST_INCLUDES is not generally applicable.

Given these two points, I'm inclined to stick with the current approach.
What do you think?