On Tue, 2023-11-14 at 17:55 +0800, Hangbin Liu wrote:
Good day! Following Guillaume's suggestion, I've been working on updating all net self-tests to run in their respective netns. This modification allows us to execute all tests in parallel, potentially saving a significant amount of test time.
However, I've encountered a challenge while making these modifications. The net selftest folder contains around 80 tests (excluding the forwarding test), with some tests using common netns names and others using self-defined names. I've considered two methods to address this issue:
One approach is to retain the original names but append a unique suffix using $(mktemp -u XXXXXX). While this is a straightforward solution, it may not prevent future tests from using common names.
Another option is to establish a general netns lib. Similar to the NUM_NETIFS variable in the forwarding test, we could introduce a variable like NUM_NS. This variable would define the number of netns instances, and all tests would use the netns lib to set up and clean up netns accordingly. However, this approach might complicate test debugging, especially for tests like fib_nexthops.sh, which relies on clear and visually netns names (e.g., me/peer/remote).
I personally would like sort of both :) e.g. lib function(s) to automatically create and dispose netns, and retain a script- specific/related name prefix.
The library function could optionally set the newly created namespaces name in global variables provided by the caller, e.g.:
# create 3 namespaces: netns_init 3
# create 3 namespaces and set the global variables: # $remote, $local $meĀ # to their respective names netns_init 3 remote local me
The trick to do such assignment would be using the 'eval' statement, something alike
netns_init() { # create the netns
shift while [ -n "$1" ]; do eval $1=$NETNS_NAMES[0] shift done }
While at that, it would be useful to package some common helper e.g. to wait for a (tcp) listener to be created (available) on a given port.
WDYT?
Thanks!
Paolo