Commit Graph
210 Commits
Author SHA1 Message Date
Joachim Wiberg df1df83229 test: new test, dhcp hostname priority test
Verify deterministic hostname management via /etc/hostname.d/, rules:

 1. Configured hostname takes precedence over default
 2. DHCP hostname takes precedence over configured
 3. Hostname reverts when DHCP lease ends

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-20 10:45:43 +01:00
Joachim Wiberg 6b467b99a8 test/infamy: allow more fine-grained control of macvlans
This change exposes the macvlan mode to tests, unlocking support for running
certain types of tests on systems with only a single Ethernet port.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-20 10:45:43 +01:00
Joachim Wiberg e241b14c2a test/infamy: pep-8, minor whitespace
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-20 10:45:42 +01:00
Joachim Wiberg c91fc1f38b test: add dhcpv6 client tests
- Basic DHCPv6 client, request a lease and verify Linux installs a
   default route from the Router Advertisements (option not included
   in DHCPv6), hence the 'enable-ra' option to dnsmasq.  Also verify
   DNS resolution over IPv6, including the resolvconf dance
 - Prefix delegation, verifies that the client can actually request
   and receives a prefix from a DHCPv6 server.  We don't do anything
   with it today though

Two new DHCP server implementations, the basic test relies on dnsmasq
and the prefix delegation test requires an ISC based dhcp server with
server side support for ipv6 prefix delegation.  We could reuse the
latter for both tests, but this way we get compatibility testing.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-18 18:11:32 +01:00
Joachim Wiberg 987dd40e1f test/infamy: support ipv6 addresses in iface.address_exist()
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-18 13:28:17 +01:00
Joachim Wiberg 9226a4ac0d test/infamy: minor, whitespace + coding style
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-18 13:28:16 +01:00
Joachim Wiberg 47f0917660 test: fix NETCONF backend to propagate RPC errors
The put_config() retry loop was catching and printing RpcError
exceptions but never re-raising them after exhausting retries.
This caused tests to silently continue despite configuration
failures, masking validation errors.

Now properly propagates errors after all retries are exhausted,
matching the error handling behavior of the RESTCONF backend.

Fixes #1250

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-14 08:16:01 +01:00
Mattias Walström 357950b782 test: imfamy: Allow broken images
If ping succeed but fail to check if netconf port is open,
the testsystem will hang forever.

This will allow totally broken images to be loaded at the device.
2025-11-06 13:39:52 +01:00
Ejub Sabic 51d5ae4540 Refactor Furl into general curl
Signed-off-by: Ejub Sabic <ejub1946@outlook.com>
2025-11-03 15:10:09 +01:00
Mattias Walström 9aba65e14b test: ntp: Make NTP tests more robust 2025-10-30 12:28:00 +01:00
Joachim Wiberg e6d945b77c test: new test, IPv6 version of lan-wan firewall
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-10 15:14:14 +02:00
Joachim Wiberg c069308c27 test: new test, wan-dmz-lan firewall with snat and dnat
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-10 15:14:14 +02:00
Joachim Wiberg a81f7c82e9 test: new test, lan-wan gateway with snat
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-10 15:14:14 +02:00
Joachim Wiberg 47c4ddfb7d test: new test, basic firewall zone verification
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-10 15:14:13 +02:00
Joachim Wiberg 5f51ef065e test: verify ospf neighbors in setup with non-ospf interface
Extend OSPF basic with a regression test for issue #1169

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-03 12:55:43 +02:00
Joachim Wiberg a0a4051c8a test/infamy: fix xpath_to_uri() to handle multiple predicates
The xpath_to_uri() method only processed the first predicate in XPath
expressions with multiple [key='value'] patterns.  Each re.sub() call
was performed on the original xpath instead of the result the previous
substitutions, causing subsequent predicates to be ignored.

Example XPath that would fail:

    /infix-firewall:firewall/zone[name='untrusted']/interface[.='e2']

Would incorrectly convert to:

    /infix-firewall:firewall/zone[name='untrusted']/interface=e2

Instead of the correct RESTCONF URL:

    /infix-firewall:firewall/zone=untrusted/interface=e2

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-09-28 22:02:58 +02:00
Joachim Wiberg 9d9e099cdb test/infamy: slight improvement to tap.py::Test.__exit__()
Before this change:

  ok 2 - Configure basic end-device firewall
  not ok 3 - Verify unused interface assigned to default zone
  # Exiting (2025-09-25 11:33:00)
  # Traceback (most recent call last):
  #   File "/home/jocke/src/x-misc/test/./case/infix_firewall/basic/test.py", line 127, in <module>
  #     assert unused_if not in public_zone["interface"], \
  #            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  # AssertionError: Unused interface e4 should be in default zone 'public', got interfaces: ['e2', 'e3', 'e5', 'e7', 'e8']

After this change:

  ok 2 - Configure basic end-device firewall
  not ok 3 - Verify unused interface assigned to default zone
  # Exiting (2025-09-25 11:35:00)
  #   File "/home/jocke/src/x-misc/test/./case/infix_firewall/basic/test.py", line 127, in <module>
  #     assert unused_if not in public_zone["interface"], \
  #            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  # Unused interface e4 should be in default zone 'public', got interfaces: ['e2', 'e3', 'e5', 'e7', 'e8']

Slightly shorter and arguably easier to read for a non-pythonic human.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-09-28 21:35:32 +02:00
Joachim Wiberg a9430070d2 test/infamy: add optional msg support to tap.py::Test.fail()
A very common pattern in our tests is:

  if (condition):
    print(f"the condition failed with {output}")
    test.fail()

This change allows us to write:

  if (condition):
    test.fail(f"the condition failed with {output}")

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-09-28 21:35:32 +02:00
Joachim Wiberg a3d30eb32f test/infamy: minor, whitespace only
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-09-28 21:35:31 +02:00
Joachim Wiberg 9fe661f422 test/infamy: silence schema download in restconf backend
NETCONF backedn already silenced.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-09-15 06:40:38 +02:00
Joachim Wiberg 52beeb5814 test/infamy: refactor Furl class to support list of needles
Also, add some documentation to lower barrier of entry/use.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-09-15 06:40:35 +02:00
Mattias Walström dce9a9c53d test: Add new sanity check tests
One to verify it is the correct version on the duts and one
that check that it is the correct bootorder.
2025-09-05 16:34:11 +02:00
Mattias Walström 7683466424 test: infamy: Silence reachability check
This was to verbose.
2025-08-26 14:38:42 +02:00
Mattias Walström 8740b2eb23 test: infamy: Add a timeout when starting each test if the DUTs is not reachable
This to cover if you run one test, but the DUTs are still booting.
2025-08-26 14:38:42 +02:00
Ahmed Karic 2cbba5cf1f test: Cleanup topologies 2025-05-13 16:58:46 +02:00
Mattias Walström cfbdce1b90 Change timezone test to check timezone in operational instead of checking time
Libyang is smart, it "fixes" the timezone for you, this was overriden by a
hack in netconf.py and restconf.py, but what you really want is to see
in operational what the current timezone is.
2025-04-30 11:51:45 +02:00
Joachim Wiberg 91f0094048 test: add missing path to container images
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-02-24 22:31:18 +01:00
Joachim Wiberg 417d48f015 test: update topology to new syntax
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-02-24 21:39:35 +01:00
Tobias Waldekranz fb394db981 test: lag_*: Ensure that links making up a LAG are compatible
Do not allow the topology matcher to setup a LAG where one link is
running at 10G while the other one runs at 1G, since the bond will
never use the 1G port as long as there the 10G link is up.
2025-02-12 23:22:10 +01:00
Tobias Waldekranz da39855cec test: infamy: Allow tests to refine the topology matching process
To run LAG tests on hardware, we have to make sure that the chosen
links are running at the same speed.  We do not want to require a
specific link speed from the logical topology, as the real requirement
is merely that the two (or however many) links are of the _same_
speed, not any _particular_ speed.

Rather than having to complicate the topology matcher, let it take
care of the common pattern of matching requirements to provided
features, then let tests pass custom node/edge matchers for the
complicated cases.
2025-02-12 23:22:09 +01:00
Joachim WibergandTobias Waldekranz a90a39e8d8 test: infamy: allow easy debugging of differences in config data
Unclear if the libyang merge operation actually does it's job of merging
all the data properly in the restconf backend.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-02-12 23:21:08 +01:00
Joachim WibergandTobias Waldekranz dc5c7732d7 test: infamy: return None if port doesn't exist
Follow-up to e4535aa, allowing tests to be even simpler.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-02-12 23:21:08 +01:00
Joachim WibergandTobias Waldekranz 5bf9200880 test: infamy: drop debug message breaking tap output
When first starting up the YANG models are downloaded.  Initially all
were printed on the test console, so this was later changed to become
a sort of progress output.  However, that broke tap output, causing a
missing leading '#' for the final "YANG models downloaded." message.

Thist patch drops the output entirely from the netconf transport, it
was never added to the restconf transport.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-02-12 23:21:08 +01:00
Joachim WibergandTobias Waldekranz f9b155b49f test: infamy: use decorator to reduce boilerplate for test args
Example use:

    @infamy.test_argument("--mode", help="one of 'static' or 'lacp'")
    class TestArgs(infamy.ArgumentParser):
        pass

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-02-12 23:21:08 +01:00
Joachim WibergandTobias Waldekranz 9782ac9afa test: update virt topologies, add lag
This commit adds two SVGs for previewing the virtual test topologies.

quad: fix a lot of copy-paste mistakes, rename nodes and ports to their
      correct names.  Replace shell comments with C++ style comments,
      not all tools, e.g., dotty, support shell comments.  The neato
      absolute positioning has also been fixed to make it possible to
      see all the edges, to facilitate this the used ports have been
      swapped around a abit.  Colors are used according to the schema
      agreed on for tests.  Finally, a second link for lag tests have
      been added between dut2 and dut3.

dual: coloring similar to quad, update to new edge attribute matcher.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-02-12 23:21:08 +01:00
Ahmed Karic af1f173497 test: Verify LLDP admin status 2025-02-12 10:41:46 +01:00
Ahmed Karic b3ad9e5693 test/infamy: add option to set interface up by default
Introduce a parameter in IsolatedMacVlans to set interfaces up by
default. This removes the need to manually bring the interface up
inside the addip function.
2025-01-27 15:48:44 +01:00
Ahmed Karic 3e0b816351 test: Match on edge attributes when mapping topologies
Implemented logic to check if the system supports required services.
Logical edges with 'requires' fields are mapped only if physical edges
provide corresponding services. If not, the test is skipped.
This ensures that tests only run when the required services are available
in the test system configuration.

Fixes #654
2025-01-24 11:51:55 +01:00
Tobias Waldekranz 1d13c5ea9e test: infamy: Generalize netconf_syn() to test for any TCP service
Being able to check for a TCP based service is generally useful, not
only for NETCONF. Therefore, break it out to a separate function that
allows any port to be queried.
2025-01-22 20:16:47 +01:00
Tobias Waldekranz 19c1f49fd3 test: Whitespace cleanup 2025-01-22 15:53:41 +01:00
Mattias Walström b2db59f3bc infamy: Add support for parameters to tests
All test added parameters is required and no default behaviour is allowed.
2025-01-10 21:40:42 +01:00
Tobias Waldekranz f3f313bb98 infamy: Fix default transport selection
Using `sys.argv[0]` does not quite achieve the effect we want, namely
that any (test-case, $PYTHONHASHSEED) tuple should always default to
the same transport.

For example, the following two examples should always use the same
transport:

    $ make PYTHONHASHSEED=1337 test-sh
    infamy0:test$ ./case/ietf_system/hostname/test.py

    $ make PYTHONHASHSEED=1337 test-sh
    infamy0:test$ cd ./case/ietf_system/hostname
    infamy0:hostname$ ./test.py

But, since their argv[0]'s are different, they don't.

Therefore use the _last two components_ of argv[0]'s full path
instead. This should:

- Spread the allocation over an entire suite run, since the
  penultimate component is usually the test name.

- Keep the allocation stable when test code is modified (which is
  common during debugging of failing tests)

- Avoid instabilities stemming from the local storage location (i.e.,
  home directory names etc.)
2025-01-08 10:14:46 +01:00
Tobias Waldekranz e4535aa856 test: infamy: Make it easier to resolve mapped port names
The somewhat clumsy construct of resolving a logical port name to its
physical counterpart has been with us from Infamy's inception:

    _, physical_port = env.ltop.xlate(logical_node, logical_port)

This is needlessly verbose. Since devices already have access to the
mappings which applies to it, make them easy to access:

    target = env.attach("target")

    # Get physical port names via the subscript operator
    target["data0"]
2025-01-08 10:14:46 +01:00
Tobias Waldekranz 343400c5fe test: infamy: Default to attaching to DUTs via the "mgmt" port
This convention is now well established, so it seems silly to have to
repeat it in every test.
2025-01-08 10:14:46 +01:00
Mattias Walström da260fabf9 infamy: restconf: Add support to delete individual entries in leaf-lists 2024-12-19 14:42:17 +01:00
Mattias WalströmandGitHub a8545e3369 Merge pull request #876 from kernelkit/change-boot-order
Change boot order
2024-12-19 11:23:45 +01:00
Tobias WaldekranzandGitHub 1f2973d93f Merge pull request #874 from kernelkit/br-refactor
Bridge refactor
2024-12-19 10:29:05 +01:00
Mattias Walström e00737ef78 test: Refactor upgrade test
* Use new cleanup in infamy to ensure the boot order gets restored
* Use new boot order in operational and use RPC to set boot order
  to remove all SSH commands.
2024-12-19 10:14:15 +01:00
Mattias Walström a90294fe08 test: infamy: Add optional test cleanup
If a test need to clean up itself disregarding test status,
it can add an optional test-cleanup phase.

This is useful if the test in some circomstances leave the device in a
bad state. This can be used to restore the unit to its ordinary state.
2024-12-19 10:14:15 +01:00
Tobias Waldekranz 77215aeb87 infamy: furl: Handle connection resets
Furl answers the question "is this URL serving the content I expect?"

Sometimes, we might be asking a server that in the middle of being
reconfigured, is crashing, is buggy, etc. - in which case it might RST
the connection. In that case the answer to the question is "False" and
not "BURN IT ALL DOWN!!"
2024-12-19 09:33:45 +01:00