• Vlad Buslov's avatar
    tc-testing: use dedicated DUMMY interface name for dummy dev · c11a99e7
    Vlad Buslov authored
    A lot of tests reuse $DEV1 veth name for naming dummy device. This causes
    problem when tdc is invoked without specifying a test group and tries to
    execute all tests. In this case tdc instantiates ns plugin, which creates
    veth pair once before running tests. However, if any of the tests that
    reuse $DEV1 run before test that depend on ns plugin, it will delete $DEV1
    as a part of teardown section:
    
    =====> Test 3b88: Delete ingress qdisc twice                                                                                                                                                             [3770/41080]
    -----> prepare stage
    ns/SubPlugin.adjust_command
    adjust_command:  stage is setup; inserting netns stuff in command [/sbin/ip link add dev v0p1 type dummy || /bin/true] list [['/sbin/ip', 'link', 'add', 'dev', 'v0p1', 'type', 'dummy', '||', '/bin/true']]
    adjust_command:  return command [ip netns exec tcut /sbin/ip link add dev v0p1 type dummy || /bin/true]
    command "ip netns exec tcut /sbin/ip link add dev v0p1 type dummy || /bin/true"
    ns/SubPlugin.adjust_command
    adjust_command:  stage is setup; inserting netns stuff in command [/sbin/tc qdisc add dev v0p1 ingress] list [['/sbin/tc', 'qdisc', 'add', 'dev', 'v0p1', 'ingress']]
    adjust_command:  return command [ip netns exec tcut /sbin/tc qdisc add dev v0p1 ingress]
    command "ip netns exec tcut /sbin/tc qdisc add dev v0p1 ingress"
    ns/SubPlugin.adjust_command
    adjust_command:  stage is setup; inserting netns stuff in command [/sbin/tc qdisc del dev v0p1 ingress] list [['/sbin/tc', 'qdisc', 'del', 'dev', 'v0p1', 'ingress']]
    adjust_command:  return command [ip netns exec tcut /sbin/tc qdisc del dev v0p1 ingress]
    command "ip netns exec tcut /sbin/tc qdisc del dev v0p1 ingress"
    -----> execute stage
    ns/SubPlugin.adjust_command
    adjust_command:  stage is execute; inserting netns stuff in command [/sbin/tc qdisc del dev v0p1 ingress] list [['/sbin/tc', 'qdisc', 'del', 'dev', 'v0p1', 'ingress']]
    adjust_command:  return command [ip netns exec tcut /sbin/tc qdisc del dev v0p1 ingress]
    command "ip netns exec tcut /sbin/tc qdisc del dev v0p1 ingress"
    -----> verify stage
    ns/SubPlugin.adjust_command
    adjust_command:  stage is verify; inserting netns stuff in command [/sbin/tc qdisc show dev v0p1] list [['/sbin/tc', 'qdisc', 'show', 'dev', 'v0p1']]
    adjust_command:  return command [ip netns exec tcut /sbin/tc qdisc show dev v0p1]
    command "ip netns exec tcut /sbin/tc qdisc show dev v0p1"
    -----> teardown stage
    ns/SubPlugin.adjust_command
    adjust_command:  stage is teardown; inserting netns stuff in command [/sbin/ip link del dev v0p1 type dummy] list [['/sbin/ip', 'link', 'del', 'dev', 'v0p1', 'type', 'dummy']]
    adjust_command:  return command [ip netns exec tcut /sbin/ip link del dev v0p1 type dummy]
    command "ip netns exec tcut /sbin/ip link del dev v0p1 type dummy"
    
    After this ns-dependent tests will fail because dev doesn't exist:
    
    =====> Test 901f: Add fw filter with prio at 32-bit maxixum
    -----> prepare stage
    ns/SubPlugin.adjust_command
    adjust_command:  stage is setup; inserting netns stuff in command [/sbin/tc qdisc add dev v0p1 ingress] list [['/sbin/tc', 'qdisc', 'add', 'dev', 'v0p1', 'ingress']]
    adjust_command:  return command [ip netns exec tcut /sbin/tc qdisc add dev v0p1 ingress]
    command "ip netns exec tcut /sbin/tc qdisc add dev v0p1 ingress"
    
    -----> prepare stage *** Could not execute: "$TC qdisc add dev $DEV1 ingress"
    
    -----> prepare stage *** Error message: "Cannot find device "v0p1"
    "
    returncode 1; expected [0]
    
    -----> prepare stage *** Aborting test run.
    
    <_io.BufferedReader name=3> *** stdout ***
    
    <_io.BufferedReader name=5> *** stderr ***
    "-----> prepare stage" did not complete successfully
    Exception <class '__main__.PluginMgrTestFail'> ('setup', None, '"-----> prepare stage" did not complete successfully') (caught in test_runner, running test 477 901f Add fw filter with prio at 32-bit maxixum stage
    setup)
    ---------------
    traceback
      File "./tdc.py", line 371, in test_runner
        res = run_one_test(pm, args, index, tidx)
      File "./tdc.py", line 272, in run_one_test
        prepare_env(args, pm, 'setup', "-----> prepare stage", tidx["setup"])
      File "./tdc.py", line 247, in prepare_env
        '"{}" did not complete successfully'.format(prefix))
    ---------------
    
    Fix the issue by introducing standalone $DUMMY config variable and
    substitute all usage of $DEV1 in tests that don't depend on ns plugin.
    
    Fixes: 489ce2f4 ("tc-testing: Restore original behaviour for namespaces in tdc")
    Signed-off-by: default avatarVlad Buslov <vladbu@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c11a99e7
ingress.json 2.91 KB