From 5a097685a38e32dbb9d3ece13e6ae79ca81d9000 Mon Sep 17 00:00:00 2001 From: Richard Alpe Date: Tue, 28 Nov 2023 11:03:54 +0100 Subject: [PATCH] test: add offline unit test for yanger and cli-pretty In this patch we add some arbitrary system output files which contains interface data. Such as the output from "ip link" and "ethtool". These files are used by yanger instead of running the actual commands. Yanger then generates a lot of YANG json data, which are merged using jq into something that looks like the sysrepo operational data on a running system. This data is then passed though cli-pretty and its ouput is compared to the static expected output in the .txt files in cli-output. Here's a basic flow overview. * system-output/foo.json -> yanger ->> data * system-output/bar.json -> yanger ->> data * data -> merge -> sysrepo-operational-data * sysrepo-operational-data -> cli-pretty -> output.txt * compare output.txt too cli-output/show-foobar.txt The result of this is that if something changes in yanger OR in cli-pretty. The corresponding system-output file needs to be updated for the test to pass. This is indented to catch regression where the output is unintentionally changed. Signed-off-by: Richard Alpe --- board/netconf/rootfs/lib/infix/yanger | 38 ++++--- test/case/all-unit.yaml | 4 + test/case/cli/all.yaml | 3 + .../cli/cli-output/show-interface-br0.txt | 22 ++++ .../case/cli/cli-output/show-interface-e0.txt | 22 ++++ .../case/cli/cli-output/show-interface-e1.txt | 22 ++++ .../case/cli/cli-output/show-interface-e2.txt | 22 ++++ .../case/cli/cli-output/show-interface-e3.txt | 22 ++++ .../case/cli/cli-output/show-interface-e4.txt | 22 ++++ test/case/cli/cli-output/show-interfaces.txt | 7 ++ test/case/cli/run.sh | 78 ++++++++++++++ test/case/cli/sysrepo-emulator.sh | 37 +++++++ test/case/cli/system-output/ethtool-br0.txt | 39 +++++++ test/case/cli/system-output/ethtool-e0.txt | 39 +++++++ test/case/cli/system-output/ethtool-e1.txt | 39 +++++++ test/case/cli/system-output/ethtool-e2.txt | 39 +++++++ test/case/cli/system-output/ethtool-e3.txt | 39 +++++++ test/case/cli/system-output/ethtool-e4.txt | 39 +++++++ .../cli/system-output/ethtool-groups-br0.json | 61 +++++++++++ .../cli/system-output/ethtool-groups-e0.json | 61 +++++++++++ .../cli/system-output/ethtool-groups-e1.json | 61 +++++++++++ .../cli/system-output/ethtool-groups-e2.json | 61 +++++++++++ .../cli/system-output/ethtool-groups-e3.json | 61 +++++++++++ .../cli/system-output/ethtool-groups-e4.json | 61 +++++++++++ .../system-output/ip-addr-show-dev-br0.json | 101 ++++++++++++++++++ .../system-output/ip-addr-show-dev-e0.json | 91 ++++++++++++++++ .../system-output/ip-addr-show-dev-e1.json | 91 ++++++++++++++++ .../system-output/ip-addr-show-dev-e2.json | 53 +++++++++ .../system-output/ip-addr-show-dev-e3.json | 53 +++++++++ .../system-output/ip-addr-show-dev-e4.json | 53 +++++++++ .../system-output/ip-link-show-dev-br0.json | 101 ++++++++++++++++++ .../system-output/ip-link-show-dev-e0.json | 91 ++++++++++++++++ .../system-output/ip-link-show-dev-e1.json | 91 ++++++++++++++++ .../system-output/ip-link-show-dev-e2.json | 53 +++++++++ .../system-output/ip-link-show-dev-e3.json | 53 +++++++++ .../system-output/ip-link-show-dev-e4.json | 53 +++++++++ 36 files changed, 1771 insertions(+), 12 deletions(-) create mode 100644 test/case/cli/all.yaml create mode 100644 test/case/cli/cli-output/show-interface-br0.txt create mode 100644 test/case/cli/cli-output/show-interface-e0.txt create mode 100644 test/case/cli/cli-output/show-interface-e1.txt create mode 100644 test/case/cli/cli-output/show-interface-e2.txt create mode 100644 test/case/cli/cli-output/show-interface-e3.txt create mode 100644 test/case/cli/cli-output/show-interface-e4.txt create mode 100644 test/case/cli/cli-output/show-interfaces.txt create mode 100755 test/case/cli/run.sh create mode 100755 test/case/cli/sysrepo-emulator.sh create mode 100644 test/case/cli/system-output/ethtool-br0.txt create mode 100644 test/case/cli/system-output/ethtool-e0.txt create mode 100644 test/case/cli/system-output/ethtool-e1.txt create mode 100644 test/case/cli/system-output/ethtool-e2.txt create mode 100644 test/case/cli/system-output/ethtool-e3.txt create mode 100644 test/case/cli/system-output/ethtool-e4.txt create mode 100644 test/case/cli/system-output/ethtool-groups-br0.json create mode 100644 test/case/cli/system-output/ethtool-groups-e0.json create mode 100644 test/case/cli/system-output/ethtool-groups-e1.json create mode 100644 test/case/cli/system-output/ethtool-groups-e2.json create mode 100644 test/case/cli/system-output/ethtool-groups-e3.json create mode 100644 test/case/cli/system-output/ethtool-groups-e4.json create mode 100644 test/case/cli/system-output/ip-addr-show-dev-br0.json create mode 100644 test/case/cli/system-output/ip-addr-show-dev-e0.json create mode 100644 test/case/cli/system-output/ip-addr-show-dev-e1.json create mode 100644 test/case/cli/system-output/ip-addr-show-dev-e2.json create mode 100644 test/case/cli/system-output/ip-addr-show-dev-e3.json create mode 100644 test/case/cli/system-output/ip-addr-show-dev-e4.json create mode 100644 test/case/cli/system-output/ip-link-show-dev-br0.json create mode 100644 test/case/cli/system-output/ip-link-show-dev-e0.json create mode 100644 test/case/cli/system-output/ip-link-show-dev-e1.json create mode 100644 test/case/cli/system-output/ip-link-show-dev-e2.json create mode 100644 test/case/cli/system-output/ip-link-show-dev-e3.json create mode 100644 test/case/cli/system-output/ip-link-show-dev-e4.json diff --git a/board/netconf/rootfs/lib/infix/yanger b/board/netconf/rootfs/lib/infix/yanger index b03fa8165..771c8d65f 100755 --- a/board/netconf/rootfs/lib/infix/yanger +++ b/board/netconf/rootfs/lib/infix/yanger @@ -153,8 +153,11 @@ def add_ipv4_route(routes): out['route'].append(new) insert(routes, 'routes', out) -def add_ip_link(ifname, iface_out): - cmd = ['ip', '-s', '-d', '-j', 'link', 'show', 'dev', ifname] +def add_ip_link(ifname, iface_out, test): + if test: + cmd = ['cat', f"{test}/ip-link-show-dev-{ifname}.json"] + else: + cmd = ['ip', '-s', '-d', '-j', 'link', 'show', 'dev', ifname] data = run_json_cmd(cmd) if len(data) != 1: @@ -202,8 +205,11 @@ def add_ip_link(ifname, iface_out): if val is not None: insert(iface_out, "statistics", "in-octets", str(val)) -def add_ip_addr(ifname, iface_out): - cmd = ['ip', '-j', 'addr', 'show', 'dev', ifname] +def add_ip_addr(ifname, iface_out, test): + if test: + cmd = ['cat', f"{test}/ip-addr-show-dev-{ifname}.json"] + else: + cmd = ['ip', '-j', 'addr', 'show', 'dev', ifname] data = run_json_cmd(cmd) if len(data) != 1: @@ -249,8 +255,11 @@ def add_ip_addr(ifname, iface_out): insert(iface_out, "ietf-ip:ipv4", "address", inet) insert(iface_out, "ietf-ip:ipv6", "address", inet6) -def add_ethtool_groups(ifname, iface_out): - cmd = ['ethtool', '--json', '-S', ifname, '--all-groups'] +def add_ethtool_groups(ifname, iface_out, test): + if test: + cmd = ['cat', f"{test}/ethtool-groups-{ifname}.json"] + else: + cmd = ['ethtool', '--json', '-S', ifname, '--all-groups'] data = run_json_cmd(cmd) if len(data) != 1: @@ -324,11 +333,15 @@ def add_ethtool_groups(ifname, iface_out): if found: frame['in-error-oversize-frames'] = str(tot) -def add_ethtool_std(ifname, iface_out): - cmd = ['ethtool', ifname] +def add_ethtool_std(ifname, iface_out, test): keys = ['Speed', 'Duplex', 'Auto-negotiation'] result = {} + if test: + cmd = ['cat', f"{test}/ethtool-{ifname}.txt"] + else: + cmd = ['ethtool', ifname] + lines = run_cmd(cmd) for line in lines: line = line.strip() @@ -363,6 +376,7 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description="YANG data creator") parser.add_argument("model", help="IETF Model") parser.add_argument("-p", "--param", default=None, help="Model dependant parameter") + parser.add_argument("-t", "--test", default=None, help="Test data base path") args = parser.parse_args() if (args.model == 'ietf-interfaces'): @@ -383,10 +397,10 @@ if __name__ == "__main__": ifname = args.param iface_out = yang_data['ietf-interfaces:interfaces']['interface'][0] - add_ip_link(ifname, iface_out) - add_ip_addr(ifname, iface_out) - add_ethtool_groups(ifname, iface_out) - add_ethtool_std(ifname, iface_out) + add_ip_link(ifname, iface_out, args.test) + add_ip_addr(ifname, iface_out, args.test) + add_ethtool_groups(ifname, iface_out, args.test) + add_ethtool_std(ifname, iface_out, args.test) elif (args.model == 'ietf-routing'): yang_data = { "ietf-routing:routing": { diff --git a/test/case/all-unit.yaml b/test/case/all-unit.yaml index 31f44e435..8b42d6f45 100644 --- a/test/case/all-unit.yaml +++ b/test/case/all-unit.yaml @@ -1,5 +1,9 @@ --- # Tests in this suite can be run on localhost without a target environment +- name: cli-output + suite: cli/all.yaml + - name: cli-pretty suite: cli_pretty/all.yaml + diff --git a/test/case/cli/all.yaml b/test/case/cli/all.yaml new file mode 100644 index 000000000..bde52354c --- /dev/null +++ b/test/case/cli/all.yaml @@ -0,0 +1,3 @@ +--- +- case: run.sh + name: "cli-check-output" diff --git a/test/case/cli/cli-output/show-interface-br0.txt b/test/case/cli/cli-output/show-interface-br0.txt new file mode 100644 index 000000000..7948a4911 --- /dev/null +++ b/test/case/cli/cli-output/show-interface-br0.txt @@ -0,0 +1,22 @@ +name : br0 +index : 7 +mtu : 1500 +operational status : up +auto-negotiation : on +duplex : full +speed : 10000 +physical address : 02:00:00:00:00:00 +ipv4 addresses : +ipv6 addresses : +in-octets : 0 +out-octets : 3158 + +eth-out-frames : 713 +eth-out-multicast-frames : 605 +eth-out-broadcast-frames : 69 +eth-in-frames : 418 +eth-in-multicast-frames : 336 +eth-in-broadcast-frames : 46 +eth-in-error-fcs-frames : 0 +eth-in-total-frames : 418 +eth-in-error-oversize-frames : 0 diff --git a/test/case/cli/cli-output/show-interface-e0.txt b/test/case/cli/cli-output/show-interface-e0.txt new file mode 100644 index 000000000..24e3e7153 --- /dev/null +++ b/test/case/cli/cli-output/show-interface-e0.txt @@ -0,0 +1,22 @@ +name : e0 +index : 2 +mtu : 1500 +operational status : up +auto-negotiation : on +duplex : full +speed : 10000 +physical address : 02:00:00:00:00:00 +ipv4 addresses : +ipv6 addresses : +in-octets : 20891 +out-octets : 6537 + +eth-out-frames : 713 +eth-out-multicast-frames : 605 +eth-out-broadcast-frames : 69 +eth-in-frames : 418 +eth-in-multicast-frames : 336 +eth-in-broadcast-frames : 46 +eth-in-error-fcs-frames : 0 +eth-in-total-frames : 418 +eth-in-error-oversize-frames : 0 diff --git a/test/case/cli/cli-output/show-interface-e1.txt b/test/case/cli/cli-output/show-interface-e1.txt new file mode 100644 index 000000000..fb4117be7 --- /dev/null +++ b/test/case/cli/cli-output/show-interface-e1.txt @@ -0,0 +1,22 @@ +name : e1 +index : 3 +mtu : 1500 +operational status : up +auto-negotiation : on +duplex : full +speed : 10000 +physical address : 02:00:00:00:00:01 +ipv4 addresses : +ipv6 addresses : +in-octets : 24849 +out-octets : 1397 + +eth-out-frames : 713 +eth-out-multicast-frames : 605 +eth-out-broadcast-frames : 69 +eth-in-frames : 418 +eth-in-multicast-frames : 336 +eth-in-broadcast-frames : 46 +eth-in-error-fcs-frames : 0 +eth-in-total-frames : 418 +eth-in-error-oversize-frames : 0 diff --git a/test/case/cli/cli-output/show-interface-e2.txt b/test/case/cli/cli-output/show-interface-e2.txt new file mode 100644 index 000000000..a60f466af --- /dev/null +++ b/test/case/cli/cli-output/show-interface-e2.txt @@ -0,0 +1,22 @@ +name : e2 +index : 4 +mtu : 1500 +operational status : up +auto-negotiation : on +duplex : full +speed : 10000 +physical address : 02:00:00:00:00:02 +ipv4 addresses : +ipv6 addresses : +in-octets : 17582 +out-octets : 1327 + +eth-out-frames : 713 +eth-out-multicast-frames : 605 +eth-out-broadcast-frames : 69 +eth-in-frames : 418 +eth-in-multicast-frames : 336 +eth-in-broadcast-frames : 46 +eth-in-error-fcs-frames : 0 +eth-in-total-frames : 418 +eth-in-error-oversize-frames : 0 diff --git a/test/case/cli/cli-output/show-interface-e3.txt b/test/case/cli/cli-output/show-interface-e3.txt new file mode 100644 index 000000000..b2bc5e243 --- /dev/null +++ b/test/case/cli/cli-output/show-interface-e3.txt @@ -0,0 +1,22 @@ +name : e3 +index : 5 +mtu : 1500 +operational status : up +auto-negotiation : on +duplex : full +speed : 10000 +physical address : 02:00:00:00:00:03 +ipv4 addresses : +ipv6 addresses : +in-octets : 15057 +out-octets : 1327 + +eth-out-frames : 713 +eth-out-multicast-frames : 605 +eth-out-broadcast-frames : 69 +eth-in-frames : 418 +eth-in-multicast-frames : 336 +eth-in-broadcast-frames : 46 +eth-in-error-fcs-frames : 0 +eth-in-total-frames : 418 +eth-in-error-oversize-frames : 0 diff --git a/test/case/cli/cli-output/show-interface-e4.txt b/test/case/cli/cli-output/show-interface-e4.txt new file mode 100644 index 000000000..b018d5363 --- /dev/null +++ b/test/case/cli/cli-output/show-interface-e4.txt @@ -0,0 +1,22 @@ +name : e4 +index : 6 +mtu : 1500 +operational status : up +auto-negotiation : on +duplex : full +speed : 10000 +physical address : 02:00:00:00:00:04 +ipv4 addresses : +ipv6 addresses : +in-octets : 19022 +out-octets : 1327 + +eth-out-frames : 713 +eth-out-multicast-frames : 605 +eth-out-broadcast-frames : 69 +eth-in-frames : 418 +eth-in-multicast-frames : 336 +eth-in-broadcast-frames : 46 +eth-in-error-fcs-frames : 0 +eth-in-total-frames : 418 +eth-in-error-oversize-frames : 0 diff --git a/test/case/cli/cli-output/show-interfaces.txt b/test/case/cli/cli-output/show-interfaces.txt new file mode 100644 index 000000000..aef66ef8a --- /dev/null +++ b/test/case/cli/cli-output/show-interfaces.txt @@ -0,0 +1,7 @@ +INTERFACE PROTOCOL STATE DATA  +br0 ethernet UP 02:00:00:00:00:00 +├ e0 ethernet UP 02:00:00:00:00:00 +└ e1 ethernet UP 02:00:00:00:00:01 +e2 ethernet UP 02:00:00:00:00:02 +e3 ethernet UP 02:00:00:00:00:03 +e4 ethernet UP 02:00:00:00:00:04 diff --git a/test/case/cli/run.sh b/test/case/cli/run.sh new file mode 100755 index 000000000..f14565e4e --- /dev/null +++ b/test/case/cli/run.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +SCRIPT_PATH="$(dirname "$(readlink -f "$0")")" +ROOT_PATH="$SCRIPT_PATH/../../../" +CLI_OUTPUT_PATH="$SCRIPT_PATH/cli-output/" + +CLI_PRETTY_TOOL="$ROOT_PATH/board/netconf/rootfs/lib/infix/cli-pretty" +SR_EMULATOR_TOOL="$SCRIPT_PATH/sysrepo-emulator.sh" + +CLI_OUTPUT_FILE="$(mktemp --suffix=-infix-yanger-cli)" + +TEST=1 + +cleanup() { + rm -f "$CLI_OUTPUT_FILE" +} +trap cleanup EXIT + +ok() { + echo "ok $TEST - $1" + let TEST++ +} + +fail() { + echo "not ok $TEST - $1" + exit 1 +} + +print_update_txt() { + echo + echo "# CLI output has changed. This might not be an error if you intentionally" + echo "# changed something in yanger or cli-pretty. If you did, you need to update" + echo "# the template file." + echo + echo "# Here's how you update the CLI output templates:" + echo "# $SCRIPT_PATH/run.sh update" + echo + echo "# Check the result" + echo "# git diff" + echo + echo "# Then finish up by committing the new template" + echo +} + +if [ ! -e "$CLI_PRETTY_TOOL" ]; then + echo "Error, cli-pretty tool not found" + exit 1 +fi + +if [ $# -eq 1 ] && [ $1 = "update" ]; then + "$SR_EMULATOR_TOOL" | "$CLI_PRETTY_TOOL" "ietf-interfaces" > "$CLI_OUTPUT_PATH/show-interfaces.txt" + for iface in "br0" "e0" "e1" "e2" "e3" "e4"; do + "$SR_EMULATOR_TOOL" | "$CLI_PRETTY_TOOL" "ietf-interfaces" -n "$iface" \ + > "$CLI_OUTPUT_PATH/show-interface-${iface}.txt" + done + echo "All files updated. Check git diff and commit if they look OK" + exit 0 +fi + +echo "1..7" + +# Show interfaces +"$SR_EMULATOR_TOOL" | "$CLI_PRETTY_TOOL" "ietf-interfaces" > "$CLI_OUTPUT_FILE" +if ! diff -u "$CLI_OUTPUT_PATH/show-interfaces.txt" "$CLI_OUTPUT_FILE"; then + print_update_txt + fail "\"show interfaces\" output has changed" +fi +ok "\"show interfaces\" output looks intact" + +# Show detailed interfaces +for iface in "br0" "e0" "e1" "e2" "e3" "e4"; do + "$SR_EMULATOR_TOOL" | "$CLI_PRETTY_TOOL" "ietf-interfaces" -n "$iface" > "$CLI_OUTPUT_FILE" + if ! diff -u "$CLI_OUTPUT_PATH/show-interface-${iface}.txt" "$CLI_OUTPUT_FILE"; then + print_update_txt + fail "\"show interface name $iface\" output has changed" + fi + ok "\"show interface name $iface\" output looks intact" +done diff --git a/test/case/cli/sysrepo-emulator.sh b/test/case/cli/sysrepo-emulator.sh new file mode 100755 index 000000000..3e92ea681 --- /dev/null +++ b/test/case/cli/sysrepo-emulator.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +SCRIPT_PATH="$(dirname "$(readlink -f "$0")")" +ROOT_PATH="$SCRIPT_PATH/../../../" + +YANGER_TOOL="$ROOT_PATH/board/netconf/rootfs/lib/infix/yanger" + +INTERFACES="br0 e0 e1 e2 e3 e4" + +YANGER_OUTPUT_FILE="$(mktemp --suffix=-infix-cli-yanger)" + +cleanup() { + rm -f "$YANGER_OUTPUT_FILE" +} +trap cleanup EXIT + +if [ ! -e "$YANGER_TOOL" ]; then + echo "Error, yanger tool not found" + exit 1 +fi + +for iface in $INTERFACES; do + if ! "$YANGER_TOOL" "ietf-interfaces" \ + -t "$SCRIPT_PATH/system-output/" \ + -p "$iface" >> "$YANGER_OUTPUT_FILE"; then + echo "Error, running yanger for interface $iface" >&2 + exit 1 + fi +done + +if ! jq -s 'reduce .[] as $item + ({}; .["ietf-interfaces:interfaces"].interface += + $item["ietf-interfaces:interfaces"].interface)' \ + "$YANGER_OUTPUT_FILE"; then + echo "Error, merging yanger output data" >&2 + exit 1 +fi diff --git a/test/case/cli/system-output/ethtool-br0.txt b/test/case/cli/system-output/ethtool-br0.txt new file mode 100644 index 000000000..de4a03d7e --- /dev/null +++ b/test/case/cli/system-output/ethtool-br0.txt @@ -0,0 +1,39 @@ +Settings for e0: + Supported ports: [ ] + Supported link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Supported pause frame use: Symmetric + Supports auto-negotiation: Yes + Supported FEC modes: Not reported + Advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Advertised pause frame use: Symmetric + Advertised auto-negotiation: Yes + Advertised FEC modes: Not reported + Link partner advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Link partner advertised pause frame use: Symmetric + Link partner advertised auto-negotiation: Yes + Link partner advertised FEC modes: Not reported + Speed: 10000Mb/s + Duplex: Full + Auto-negotiation: on + Port: Twisted Pair + PHYAD: 4 + Transceiver: external + MDI-X: on (auto) + Supports Wake-on: g + Wake-on: d + Link detected: yes diff --git a/test/case/cli/system-output/ethtool-e0.txt b/test/case/cli/system-output/ethtool-e0.txt new file mode 100644 index 000000000..de4a03d7e --- /dev/null +++ b/test/case/cli/system-output/ethtool-e0.txt @@ -0,0 +1,39 @@ +Settings for e0: + Supported ports: [ ] + Supported link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Supported pause frame use: Symmetric + Supports auto-negotiation: Yes + Supported FEC modes: Not reported + Advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Advertised pause frame use: Symmetric + Advertised auto-negotiation: Yes + Advertised FEC modes: Not reported + Link partner advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Link partner advertised pause frame use: Symmetric + Link partner advertised auto-negotiation: Yes + Link partner advertised FEC modes: Not reported + Speed: 10000Mb/s + Duplex: Full + Auto-negotiation: on + Port: Twisted Pair + PHYAD: 4 + Transceiver: external + MDI-X: on (auto) + Supports Wake-on: g + Wake-on: d + Link detected: yes diff --git a/test/case/cli/system-output/ethtool-e1.txt b/test/case/cli/system-output/ethtool-e1.txt new file mode 100644 index 000000000..2685d5cbf --- /dev/null +++ b/test/case/cli/system-output/ethtool-e1.txt @@ -0,0 +1,39 @@ +Settings for e1: + Supported ports: [ ] + Supported link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Supported pause frame use: Symmetric + Supports auto-negotiation: Yes + Supported FEC modes: Not reported + Advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Advertised pause frame use: Symmetric + Advertised auto-negotiation: Yes + Advertised FEC modes: Not reported + Link partner advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Link partner advertised pause frame use: Symmetric + Link partner advertised auto-negotiation: Yes + Link partner advertised FEC modes: Not reported + Speed: 10000Mb/s + Duplex: Full + Auto-negotiation: on + Port: Twisted Pair + PHYAD: 4 + Transceiver: external + MDI-X: on (auto) + Supports Wake-on: g + Wake-on: d + Link detected: yes diff --git a/test/case/cli/system-output/ethtool-e2.txt b/test/case/cli/system-output/ethtool-e2.txt new file mode 100644 index 000000000..2ebad5626 --- /dev/null +++ b/test/case/cli/system-output/ethtool-e2.txt @@ -0,0 +1,39 @@ +Settings for e2: + Supported ports: [ ] + Supported link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Supported pause frame use: Symmetric + Supports auto-negotiation: Yes + Supported FEC modes: Not reported + Advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Advertised pause frame use: Symmetric + Advertised auto-negotiation: Yes + Advertised FEC modes: Not reported + Link partner advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Link partner advertised pause frame use: Symmetric + Link partner advertised auto-negotiation: Yes + Link partner advertised FEC modes: Not reported + Speed: 10000Mb/s + Duplex: Full + Auto-negotiation: on + Port: Twisted Pair + PHYAD: 4 + Transceiver: external + MDI-X: on (auto) + Supports Wake-on: g + Wake-on: d + Link detected: yes diff --git a/test/case/cli/system-output/ethtool-e3.txt b/test/case/cli/system-output/ethtool-e3.txt new file mode 100644 index 000000000..77966026a --- /dev/null +++ b/test/case/cli/system-output/ethtool-e3.txt @@ -0,0 +1,39 @@ +Settings for e3: + Supported ports: [ ] + Supported link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Supported pause frame use: Symmetric + Supports auto-negotiation: Yes + Supported FEC modes: Not reported + Advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Advertised pause frame use: Symmetric + Advertised auto-negotiation: Yes + Advertised FEC modes: Not reported + Link partner advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Link partner advertised pause frame use: Symmetric + Link partner advertised auto-negotiation: Yes + Link partner advertised FEC modes: Not reported + Speed: 10000Mb/s + Duplex: Full + Auto-negotiation: on + Port: Twisted Pair + PHYAD: 4 + Transceiver: external + MDI-X: on (auto) + Supports Wake-on: g + Wake-on: d + Link detected: yes diff --git a/test/case/cli/system-output/ethtool-e4.txt b/test/case/cli/system-output/ethtool-e4.txt new file mode 100644 index 000000000..feb3df49c --- /dev/null +++ b/test/case/cli/system-output/ethtool-e4.txt @@ -0,0 +1,39 @@ +Settings for e4: + Supported ports: [ ] + Supported link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Supported pause frame use: Symmetric + Supports auto-negotiation: Yes + Supported FEC modes: Not reported + Advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Advertised pause frame use: Symmetric + Advertised auto-negotiation: Yes + Advertised FEC modes: Not reported + Link partner advertised link modes: 10baseT/Half 10baseT/Full + 100baseT/Half 100baseT/Full + 1000baseT/Full + 10000baseT/Full + 2500baseT/Full + 5000baseT/Full + Link partner advertised pause frame use: Symmetric + Link partner advertised auto-negotiation: Yes + Link partner advertised FEC modes: Not reported + Speed: 10000Mb/s + Duplex: Full + Auto-negotiation: on + Port: Twisted Pair + PHYAD: 4 + Transceiver: external + MDI-X: on (auto) + Supports Wake-on: g + Wake-on: d + Link detected: yes diff --git a/test/case/cli/system-output/ethtool-groups-br0.json b/test/case/cli/system-output/ethtool-groups-br0.json new file mode 100644 index 000000000..78d73034e --- /dev/null +++ b/test/case/cli/system-output/ethtool-groups-br0.json @@ -0,0 +1,61 @@ +[ + { + "ifname": "e1", + "eth-phy": {}, + "eth-mac": { + "FramesTransmittedOK": 713, + "SingleCollisionFrames": 0, + "MultipleCollisionFrames": 0, + "FramesReceivedOK": 418, + "FrameCheckSequenceErrors": 0, + "OctetsTransmittedOK": 129130, + "FramesWithDeferredXmissions": 0, + "LateCollisions": 0, + "OctetsReceivedOK": 72571, + "MulticastFramesXmittedOK": 605, + "BroadcastFramesXmittedOK": 69, + "FramesWithExcessiveDeferral": 0, + "MulticastFramesReceivedOK": 336, + "BroadcastFramesReceivedOK": 46 + }, + "eth-ctrl": {}, + "rmon": { + "etherStatsUndersizePkts": 0, + "etherStatsOversizePkts": 0, + "etherStatsFragments": 0, + "etherStatsJabbers": 0, + "rx-pktsNtoM": [ + { + "low": 64, + "high": 64, + "val": 12 + }, + { + "low": 65, + "high": 127, + "val": 603 + }, + { + "low": 128, + "high": 255, + "val": 168 + }, + { + "low": 256, + "high": 511, + "val": 348 + }, + { + "low": 512, + "high": 1023, + "val": 0 + }, + { + "low": 1024, + "high": 65535, + "val": 0 + } + ] + } + } +] diff --git a/test/case/cli/system-output/ethtool-groups-e0.json b/test/case/cli/system-output/ethtool-groups-e0.json new file mode 100644 index 000000000..d218bac3f --- /dev/null +++ b/test/case/cli/system-output/ethtool-groups-e0.json @@ -0,0 +1,61 @@ +[ + { + "ifname": "e0", + "eth-phy": {}, + "eth-mac": { + "FramesTransmittedOK": 713, + "SingleCollisionFrames": 0, + "MultipleCollisionFrames": 0, + "FramesReceivedOK": 418, + "FrameCheckSequenceErrors": 0, + "OctetsTransmittedOK": 129130, + "FramesWithDeferredXmissions": 0, + "LateCollisions": 0, + "OctetsReceivedOK": 72571, + "MulticastFramesXmittedOK": 605, + "BroadcastFramesXmittedOK": 69, + "FramesWithExcessiveDeferral": 0, + "MulticastFramesReceivedOK": 336, + "BroadcastFramesReceivedOK": 46 + }, + "eth-ctrl": {}, + "rmon": { + "etherStatsUndersizePkts": 0, + "etherStatsOversizePkts": 0, + "etherStatsFragments": 0, + "etherStatsJabbers": 0, + "rx-pktsNtoM": [ + { + "low": 64, + "high": 64, + "val": 12 + }, + { + "low": 65, + "high": 127, + "val": 603 + }, + { + "low": 128, + "high": 255, + "val": 168 + }, + { + "low": 256, + "high": 511, + "val": 348 + }, + { + "low": 512, + "high": 1023, + "val": 0 + }, + { + "low": 1024, + "high": 65535, + "val": 0 + } + ] + } + } +] diff --git a/test/case/cli/system-output/ethtool-groups-e1.json b/test/case/cli/system-output/ethtool-groups-e1.json new file mode 100644 index 000000000..78d73034e --- /dev/null +++ b/test/case/cli/system-output/ethtool-groups-e1.json @@ -0,0 +1,61 @@ +[ + { + "ifname": "e1", + "eth-phy": {}, + "eth-mac": { + "FramesTransmittedOK": 713, + "SingleCollisionFrames": 0, + "MultipleCollisionFrames": 0, + "FramesReceivedOK": 418, + "FrameCheckSequenceErrors": 0, + "OctetsTransmittedOK": 129130, + "FramesWithDeferredXmissions": 0, + "LateCollisions": 0, + "OctetsReceivedOK": 72571, + "MulticastFramesXmittedOK": 605, + "BroadcastFramesXmittedOK": 69, + "FramesWithExcessiveDeferral": 0, + "MulticastFramesReceivedOK": 336, + "BroadcastFramesReceivedOK": 46 + }, + "eth-ctrl": {}, + "rmon": { + "etherStatsUndersizePkts": 0, + "etherStatsOversizePkts": 0, + "etherStatsFragments": 0, + "etherStatsJabbers": 0, + "rx-pktsNtoM": [ + { + "low": 64, + "high": 64, + "val": 12 + }, + { + "low": 65, + "high": 127, + "val": 603 + }, + { + "low": 128, + "high": 255, + "val": 168 + }, + { + "low": 256, + "high": 511, + "val": 348 + }, + { + "low": 512, + "high": 1023, + "val": 0 + }, + { + "low": 1024, + "high": 65535, + "val": 0 + } + ] + } + } +] diff --git a/test/case/cli/system-output/ethtool-groups-e2.json b/test/case/cli/system-output/ethtool-groups-e2.json new file mode 100644 index 000000000..6c23fb74a --- /dev/null +++ b/test/case/cli/system-output/ethtool-groups-e2.json @@ -0,0 +1,61 @@ +[ + { + "ifname": "e2", + "eth-phy": {}, + "eth-mac": { + "FramesTransmittedOK": 713, + "SingleCollisionFrames": 0, + "MultipleCollisionFrames": 0, + "FramesReceivedOK": 418, + "FrameCheckSequenceErrors": 0, + "OctetsTransmittedOK": 129130, + "FramesWithDeferredXmissions": 0, + "LateCollisions": 0, + "OctetsReceivedOK": 72571, + "MulticastFramesXmittedOK": 605, + "BroadcastFramesXmittedOK": 69, + "FramesWithExcessiveDeferral": 0, + "MulticastFramesReceivedOK": 336, + "BroadcastFramesReceivedOK": 46 + }, + "eth-ctrl": {}, + "rmon": { + "etherStatsUndersizePkts": 0, + "etherStatsOversizePkts": 0, + "etherStatsFragments": 0, + "etherStatsJabbers": 0, + "rx-pktsNtoM": [ + { + "low": 64, + "high": 64, + "val": 12 + }, + { + "low": 65, + "high": 127, + "val": 603 + }, + { + "low": 128, + "high": 255, + "val": 168 + }, + { + "low": 256, + "high": 511, + "val": 348 + }, + { + "low": 512, + "high": 1023, + "val": 0 + }, + { + "low": 1024, + "high": 65535, + "val": 0 + } + ] + } + } +] diff --git a/test/case/cli/system-output/ethtool-groups-e3.json b/test/case/cli/system-output/ethtool-groups-e3.json new file mode 100644 index 000000000..aba18da15 --- /dev/null +++ b/test/case/cli/system-output/ethtool-groups-e3.json @@ -0,0 +1,61 @@ +[ + { + "ifname": "e3", + "eth-phy": {}, + "eth-mac": { + "FramesTransmittedOK": 713, + "SingleCollisionFrames": 0, + "MultipleCollisionFrames": 0, + "FramesReceivedOK": 418, + "FrameCheckSequenceErrors": 0, + "OctetsTransmittedOK": 129130, + "FramesWithDeferredXmissions": 0, + "LateCollisions": 0, + "OctetsReceivedOK": 72571, + "MulticastFramesXmittedOK": 605, + "BroadcastFramesXmittedOK": 69, + "FramesWithExcessiveDeferral": 0, + "MulticastFramesReceivedOK": 336, + "BroadcastFramesReceivedOK": 46 + }, + "eth-ctrl": {}, + "rmon": { + "etherStatsUndersizePkts": 0, + "etherStatsOversizePkts": 0, + "etherStatsFragments": 0, + "etherStatsJabbers": 0, + "rx-pktsNtoM": [ + { + "low": 64, + "high": 64, + "val": 12 + }, + { + "low": 65, + "high": 127, + "val": 603 + }, + { + "low": 128, + "high": 255, + "val": 168 + }, + { + "low": 256, + "high": 511, + "val": 348 + }, + { + "low": 512, + "high": 1023, + "val": 0 + }, + { + "low": 1024, + "high": 65535, + "val": 0 + } + ] + } + } +] diff --git a/test/case/cli/system-output/ethtool-groups-e4.json b/test/case/cli/system-output/ethtool-groups-e4.json new file mode 100644 index 000000000..9043bf645 --- /dev/null +++ b/test/case/cli/system-output/ethtool-groups-e4.json @@ -0,0 +1,61 @@ +[ + { + "ifname": "e4", + "eth-phy": {}, + "eth-mac": { + "FramesTransmittedOK": 713, + "SingleCollisionFrames": 0, + "MultipleCollisionFrames": 0, + "FramesReceivedOK": 418, + "FrameCheckSequenceErrors": 0, + "OctetsTransmittedOK": 129130, + "FramesWithDeferredXmissions": 0, + "LateCollisions": 0, + "OctetsReceivedOK": 72571, + "MulticastFramesXmittedOK": 605, + "BroadcastFramesXmittedOK": 69, + "FramesWithExcessiveDeferral": 0, + "MulticastFramesReceivedOK": 336, + "BroadcastFramesReceivedOK": 46 + }, + "eth-ctrl": {}, + "rmon": { + "etherStatsUndersizePkts": 0, + "etherStatsOversizePkts": 0, + "etherStatsFragments": 0, + "etherStatsJabbers": 0, + "rx-pktsNtoM": [ + { + "low": 64, + "high": 64, + "val": 12 + }, + { + "low": 65, + "high": 127, + "val": 603 + }, + { + "low": 128, + "high": 255, + "val": 168 + }, + { + "low": 256, + "high": 511, + "val": 348 + }, + { + "low": 512, + "high": 1023, + "val": 0 + }, + { + "low": 1024, + "high": 65535, + "val": 0 + } + ] + } + } +] diff --git a/test/case/cli/system-output/ip-addr-show-dev-br0.json b/test/case/cli/system-output/ip-addr-show-dev-br0.json new file mode 100644 index 000000000..665b50f34 --- /dev/null +++ b/test/case/cli/system-output/ip-addr-show-dev-br0.json @@ -0,0 +1,101 @@ +[ + { + "ifindex": 7, + "ifname": "br0", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "noqueue", + "operstate": "UP", + "linkmode": "DEFAULT", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "02:00:00:00:00:00", + "broadcast": "ff:ff:ff:ff:ff:ff", + "promiscuity": 0, + "allmulti": 0, + "min_mtu": 68, + "max_mtu": 65535, + "linkinfo": { + "info_kind": "bridge", + "info_data": { + "forward_delay": 1500, + "hello_time": 200, + "max_age": 2000, + "ageing_time": 30000, + "stp_state": 0, + "priority": 32768, + "vlan_filtering": 1, + "vlan_protocol": "802.1Q", + "bridge_id": "8000.2:0:0:0:0:0", + "root_id": "8000.2:0:0:0:0:0", + "root_port": 0, + "root_path_cost": 0, + "topology_change": 0, + "topology_change_detected": 0, + "hello_timer": 0, + "tcn_timer": 0, + "topology_change_timer": 0, + "gc_timer": 63.88, + "vlan_default_pvid": 0, + "vlan_stats_enabled": 0, + "vlan_stats_per_port": 0, + "group_fwd_mask": "0", + "group_addr": "01:80:c2:00:00:00", + "mcast_snooping": 0, + "no_linklocal_learn": 0, + "mcast_vlan_snooping": 0, + "mcast_router": 1, + "mcast_query_use_ifaddr": 0, + "mcast_querier": 0, + "mcast_hash_elasticity": 16, + "mcast_hash_max": 4096, + "mcast_last_member_cnt": 2, + "mcast_startup_query_cnt": 2, + "mcast_last_member_intvl": 100, + "mcast_membership_intvl": 26000, + "mcast_querier_intvl": 25500, + "mcast_query_intvl": 12500, + "mcast_query_response_intvl": 1000, + "mcast_startup_query_intvl": 3124, + "mcast_stats_enabled": 0, + "mcast_igmp_version": 2, + "mcast_mld_version": 1, + "nf_call_iptables": 0, + "nf_call_ip6tables": 0, + "nf_call_arptables": 0 + } + }, + "inet6_addr_gen_mode": "none", + "num_tx_queues": 1, + "num_rx_queues": 1, + "gso_max_size": 65536, + "gso_max_segs": 65535, + "tso_max_size": 65536, + "tso_max_segs": 65535, + "gro_max_size": 65536, + "stats64": { + "rx": { + "bytes": 3158, + "packets": 42, + "errors": 0, + "dropped": 0, + "over_errors": 0, + "multicast": 37 + }, + "tx": { + "bytes": 0, + "packets": 0, + "errors": 0, + "dropped": 0, + "carrier_errors": 0, + "collisions": 0 + } + } + } +] diff --git a/test/case/cli/system-output/ip-addr-show-dev-e0.json b/test/case/cli/system-output/ip-addr-show-dev-e0.json new file mode 100644 index 000000000..ce4bda9ce --- /dev/null +++ b/test/case/cli/system-output/ip-addr-show-dev-e0.json @@ -0,0 +1,91 @@ +[ + { + "ifindex": 2, + "ifname": "e0", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "pfifo_fast", + "master": "br0", + "operstate": "UP", + "linkmode": "DEFAULT", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "02:00:00:00:00:00", + "broadcast": "ff:ff:ff:ff:ff:ff", + "promiscuity": 1, + "allmulti": 1, + "min_mtu": 68, + "max_mtu": 65535, + "linkinfo": { + "info_slave_kind": "bridge", + "info_slave_data": { + "state": "forwarding", + "priority": 32, + "cost": 100, + "hairpin": false, + "guard": false, + "root_block": false, + "fastleave": false, + "learning": true, + "flood": true, + "id": "0x8001", + "no": "0x1", + "designated_port": 32769, + "designated_cost": 0, + "bridge_id": "8000.2:0:0:0:0:0", + "root_id": "8000.2:0:0:0:0:0", + "hold_timer": 0, + "message_age_timer": 0, + "forward_delay_timer": 0, + "topology_change_ack": 0, + "config_pending": 0, + "proxy_arp": false, + "proxy_arp_wifi": false, + "multicast_router": 1, + "mcast_flood": true, + "bcast_flood": true, + "mcast_to_unicast": false, + "neigh_suppress": false, + "group_fwd_mask": "0", + "group_fwd_mask_str": "0x0", + "vlan_tunnel": false, + "isolated": false, + "locked": false + } + }, + "inet6_addr_gen_mode": "eui64", + "num_tx_queues": 1, + "num_rx_queues": 1, + "gso_max_size": 65536, + "gso_max_segs": 65535, + "tso_max_size": 65536, + "tso_max_segs": 65535, + "gro_max_size": 65536, + "parentbus": "virtio", + "parentdev": "virtio2", + "stats64": { + "rx": { + "bytes": 6795, + "packets": 62, + "errors": 0, + "dropped": 0, + "over_errors": 0, + "multicast": 0 + }, + "tx": { + "bytes": 22830, + "packets": 114, + "errors": 0, + "dropped": 0, + "carrier_errors": 0, + "collisions": 0 + } + } + } +] diff --git a/test/case/cli/system-output/ip-addr-show-dev-e1.json b/test/case/cli/system-output/ip-addr-show-dev-e1.json new file mode 100644 index 000000000..a5bc3ab54 --- /dev/null +++ b/test/case/cli/system-output/ip-addr-show-dev-e1.json @@ -0,0 +1,91 @@ +[ + { + "ifindex": 3, + "ifname": "e1", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "pfifo_fast", + "master": "br0", + "operstate": "UP", + "linkmode": "DEFAULT", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "02:00:00:00:00:01", + "broadcast": "ff:ff:ff:ff:ff:ff", + "promiscuity": 1, + "allmulti": 1, + "min_mtu": 68, + "max_mtu": 65535, + "linkinfo": { + "info_slave_kind": "bridge", + "info_slave_data": { + "state": "forwarding", + "priority": 32, + "cost": 100, + "hairpin": false, + "guard": false, + "root_block": false, + "fastleave": false, + "learning": true, + "flood": true, + "id": "0x8002", + "no": "0x2", + "designated_port": 32770, + "designated_cost": 0, + "bridge_id": "8000.2:0:0:0:0:0", + "root_id": "8000.2:0:0:0:0:0", + "hold_timer": 0, + "message_age_timer": 0, + "forward_delay_timer": 0, + "topology_change_ack": 0, + "config_pending": 0, + "proxy_arp": false, + "proxy_arp_wifi": false, + "multicast_router": 1, + "mcast_flood": true, + "bcast_flood": true, + "mcast_to_unicast": false, + "neigh_suppress": false, + "group_fwd_mask": "0", + "group_fwd_mask_str": "0x0", + "vlan_tunnel": false, + "isolated": false, + "locked": false + } + }, + "inet6_addr_gen_mode": "eui64", + "num_tx_queues": 1, + "num_rx_queues": 1, + "gso_max_size": 65536, + "gso_max_segs": 65535, + "tso_max_size": 65536, + "tso_max_segs": 65535, + "gro_max_size": 65536, + "parentbus": "virtio", + "parentdev": "virtio3", + "stats64": { + "rx": { + "bytes": 1397, + "packets": 11, + "errors": 0, + "dropped": 0, + "over_errors": 0, + "multicast": 0 + }, + "tx": { + "bytes": 23781, + "packets": 126, + "errors": 0, + "dropped": 0, + "carrier_errors": 0, + "collisions": 0 + } + } + } +] diff --git a/test/case/cli/system-output/ip-addr-show-dev-e2.json b/test/case/cli/system-output/ip-addr-show-dev-e2.json new file mode 100644 index 000000000..86a2b632f --- /dev/null +++ b/test/case/cli/system-output/ip-addr-show-dev-e2.json @@ -0,0 +1,53 @@ +[ + { + "ifindex": 4, + "ifname": "e2", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "pfifo_fast", + "operstate": "UP", + "linkmode": "DEFAULT", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "02:00:00:00:00:02", + "broadcast": "ff:ff:ff:ff:ff:ff", + "promiscuity": 0, + "allmulti": 0, + "min_mtu": 68, + "max_mtu": 65535, + "inet6_addr_gen_mode": "eui64", + "num_tx_queues": 1, + "num_rx_queues": 1, + "gso_max_size": 65536, + "gso_max_segs": 65535, + "tso_max_size": 65536, + "tso_max_segs": 65535, + "gro_max_size": 65536, + "parentbus": "virtio", + "parentdev": "virtio4", + "stats64": { + "rx": { + "bytes": 1327, + "packets": 10, + "errors": 0, + "dropped": 0, + "over_errors": 0, + "multicast": 0 + }, + "tx": { + "bytes": 16606, + "packets": 85, + "errors": 0, + "dropped": 0, + "carrier_errors": 0, + "collisions": 0 + } + } + } +] diff --git a/test/case/cli/system-output/ip-addr-show-dev-e3.json b/test/case/cli/system-output/ip-addr-show-dev-e3.json new file mode 100644 index 000000000..4c09aeb04 --- /dev/null +++ b/test/case/cli/system-output/ip-addr-show-dev-e3.json @@ -0,0 +1,53 @@ +[ + { + "ifindex": 5, + "ifname": "e3", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "pfifo_fast", + "operstate": "UP", + "linkmode": "DEFAULT", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "02:00:00:00:00:03", + "broadcast": "ff:ff:ff:ff:ff:ff", + "promiscuity": 0, + "allmulti": 0, + "min_mtu": 68, + "max_mtu": 65535, + "inet6_addr_gen_mode": "eui64", + "num_tx_queues": 1, + "num_rx_queues": 1, + "gso_max_size": 65536, + "gso_max_segs": 65535, + "tso_max_size": 65536, + "tso_max_segs": 65535, + "gro_max_size": 65536, + "parentbus": "virtio", + "parentdev": "virtio5", + "stats64": { + "rx": { + "bytes": 1327, + "packets": 10, + "errors": 0, + "dropped": 0, + "over_errors": 0, + "multicast": 0 + }, + "tx": { + "bytes": 13837, + "packets": 67, + "errors": 0, + "dropped": 0, + "carrier_errors": 0, + "collisions": 0 + } + } + } +] diff --git a/test/case/cli/system-output/ip-addr-show-dev-e4.json b/test/case/cli/system-output/ip-addr-show-dev-e4.json new file mode 100644 index 000000000..e6110db10 --- /dev/null +++ b/test/case/cli/system-output/ip-addr-show-dev-e4.json @@ -0,0 +1,53 @@ +[ + { + "ifindex": 6, + "ifname": "e4", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "pfifo_fast", + "operstate": "UP", + "linkmode": "DEFAULT", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "02:00:00:00:00:04", + "broadcast": "ff:ff:ff:ff:ff:ff", + "promiscuity": 0, + "allmulti": 0, + "min_mtu": 68, + "max_mtu": 65535, + "inet6_addr_gen_mode": "eui64", + "num_tx_queues": 1, + "num_rx_queues": 1, + "gso_max_size": 65536, + "gso_max_segs": 65535, + "tso_max_size": 65536, + "tso_max_segs": 65535, + "gro_max_size": 65536, + "parentbus": "virtio", + "parentdev": "virtio6", + "stats64": { + "rx": { + "bytes": 1327, + "packets": 10, + "errors": 0, + "dropped": 0, + "over_errors": 0, + "multicast": 0 + }, + "tx": { + "bytes": 18046, + "packets": 91, + "errors": 0, + "dropped": 0, + "carrier_errors": 0, + "collisions": 0 + } + } + } +] diff --git a/test/case/cli/system-output/ip-link-show-dev-br0.json b/test/case/cli/system-output/ip-link-show-dev-br0.json new file mode 100644 index 000000000..1b04d324a --- /dev/null +++ b/test/case/cli/system-output/ip-link-show-dev-br0.json @@ -0,0 +1,101 @@ +[ + { + "ifindex": 7, + "ifname": "br0", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "noqueue", + "operstate": "UP", + "linkmode": "DEFAULT", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "02:00:00:00:00:00", + "broadcast": "ff:ff:ff:ff:ff:ff", + "promiscuity": 0, + "allmulti": 0, + "min_mtu": 68, + "max_mtu": 65535, + "linkinfo": { + "info_kind": "bridge", + "info_data": { + "forward_delay": 1500, + "hello_time": 200, + "max_age": 2000, + "ageing_time": 30000, + "stp_state": 0, + "priority": 32768, + "vlan_filtering": 1, + "vlan_protocol": "802.1Q", + "bridge_id": "8000.2:0:0:0:0:0", + "root_id": "8000.2:0:0:0:0:0", + "root_port": 0, + "root_path_cost": 0, + "topology_change": 0, + "topology_change_detected": 0, + "hello_timer": 0, + "tcn_timer": 0, + "topology_change_timer": 0, + "gc_timer": 27.38, + "vlan_default_pvid": 0, + "vlan_stats_enabled": 0, + "vlan_stats_per_port": 0, + "group_fwd_mask": "0", + "group_addr": "01:80:c2:00:00:00", + "mcast_snooping": 0, + "no_linklocal_learn": 0, + "mcast_vlan_snooping": 0, + "mcast_router": 1, + "mcast_query_use_ifaddr": 0, + "mcast_querier": 0, + "mcast_hash_elasticity": 16, + "mcast_hash_max": 4096, + "mcast_last_member_cnt": 2, + "mcast_startup_query_cnt": 2, + "mcast_last_member_intvl": 100, + "mcast_membership_intvl": 26000, + "mcast_querier_intvl": 25500, + "mcast_query_intvl": 12500, + "mcast_query_response_intvl": 1000, + "mcast_startup_query_intvl": 3124, + "mcast_stats_enabled": 0, + "mcast_igmp_version": 2, + "mcast_mld_version": 1, + "nf_call_iptables": 0, + "nf_call_ip6tables": 0, + "nf_call_arptables": 0 + } + }, + "inet6_addr_gen_mode": "none", + "num_tx_queues": 1, + "num_rx_queues": 1, + "gso_max_size": 65536, + "gso_max_segs": 65535, + "tso_max_size": 65536, + "tso_max_segs": 65535, + "gro_max_size": 65536, + "stats64": { + "rx": { + "bytes": 3158, + "packets": 42, + "errors": 0, + "dropped": 0, + "over_errors": 0, + "multicast": 37 + }, + "tx": { + "bytes": 0, + "packets": 0, + "errors": 0, + "dropped": 0, + "carrier_errors": 0, + "collisions": 0 + } + } + } +] diff --git a/test/case/cli/system-output/ip-link-show-dev-e0.json b/test/case/cli/system-output/ip-link-show-dev-e0.json new file mode 100644 index 000000000..860ee90c7 --- /dev/null +++ b/test/case/cli/system-output/ip-link-show-dev-e0.json @@ -0,0 +1,91 @@ +[ + { + "ifindex": 2, + "ifname": "e0", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "pfifo_fast", + "master": "br0", + "operstate": "UP", + "linkmode": "DEFAULT", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "02:00:00:00:00:00", + "broadcast": "ff:ff:ff:ff:ff:ff", + "promiscuity": 1, + "allmulti": 1, + "min_mtu": 68, + "max_mtu": 65535, + "linkinfo": { + "info_slave_kind": "bridge", + "info_slave_data": { + "state": "forwarding", + "priority": 32, + "cost": 100, + "hairpin": false, + "guard": false, + "root_block": false, + "fastleave": false, + "learning": true, + "flood": true, + "id": "0x8001", + "no": "0x1", + "designated_port": 32769, + "designated_cost": 0, + "bridge_id": "8000.2:0:0:0:0:0", + "root_id": "8000.2:0:0:0:0:0", + "hold_timer": 0, + "message_age_timer": 0, + "forward_delay_timer": 0, + "topology_change_ack": 0, + "config_pending": 0, + "proxy_arp": false, + "proxy_arp_wifi": false, + "multicast_router": 1, + "mcast_flood": true, + "bcast_flood": true, + "mcast_to_unicast": false, + "neigh_suppress": false, + "group_fwd_mask": "0", + "group_fwd_mask_str": "0x0", + "vlan_tunnel": false, + "isolated": false, + "locked": false + } + }, + "inet6_addr_gen_mode": "eui64", + "num_tx_queues": 1, + "num_rx_queues": 1, + "gso_max_size": 65536, + "gso_max_segs": 65535, + "tso_max_size": 65536, + "tso_max_segs": 65535, + "gro_max_size": 65536, + "parentbus": "virtio", + "parentdev": "virtio2", + "stats64": { + "rx": { + "bytes": 6537, + "packets": 59, + "errors": 0, + "dropped": 0, + "over_errors": 0, + "multicast": 0 + }, + "tx": { + "bytes": 20891, + "packets": 106, + "errors": 0, + "dropped": 0, + "carrier_errors": 0, + "collisions": 0 + } + } + } +] diff --git a/test/case/cli/system-output/ip-link-show-dev-e1.json b/test/case/cli/system-output/ip-link-show-dev-e1.json new file mode 100644 index 000000000..25f5884f4 --- /dev/null +++ b/test/case/cli/system-output/ip-link-show-dev-e1.json @@ -0,0 +1,91 @@ +[ + { + "ifindex": 3, + "ifname": "e1", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "pfifo_fast", + "master": "br0", + "operstate": "UP", + "linkmode": "DEFAULT", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "02:00:00:00:00:01", + "broadcast": "ff:ff:ff:ff:ff:ff", + "promiscuity": 1, + "allmulti": 1, + "min_mtu": 68, + "max_mtu": 65535, + "linkinfo": { + "info_slave_kind": "bridge", + "info_slave_data": { + "state": "forwarding", + "priority": 32, + "cost": 100, + "hairpin": false, + "guard": false, + "root_block": false, + "fastleave": false, + "learning": true, + "flood": true, + "id": "0x8002", + "no": "0x2", + "designated_port": 32770, + "designated_cost": 0, + "bridge_id": "8000.2:0:0:0:0:0", + "root_id": "8000.2:0:0:0:0:0", + "hold_timer": 0, + "message_age_timer": 0, + "forward_delay_timer": 0, + "topology_change_ack": 0, + "config_pending": 0, + "proxy_arp": false, + "proxy_arp_wifi": false, + "multicast_router": 1, + "mcast_flood": true, + "bcast_flood": true, + "mcast_to_unicast": false, + "neigh_suppress": false, + "group_fwd_mask": "0", + "group_fwd_mask_str": "0x0", + "vlan_tunnel": false, + "isolated": false, + "locked": false + } + }, + "inet6_addr_gen_mode": "eui64", + "num_tx_queues": 1, + "num_rx_queues": 1, + "gso_max_size": 65536, + "gso_max_segs": 65535, + "tso_max_size": 65536, + "tso_max_segs": 65535, + "gro_max_size": 65536, + "parentbus": "virtio", + "parentdev": "virtio3", + "stats64": { + "rx": { + "bytes": 1397, + "packets": 11, + "errors": 0, + "dropped": 0, + "over_errors": 0, + "multicast": 0 + }, + "tx": { + "bytes": 24849, + "packets": 130, + "errors": 0, + "dropped": 0, + "carrier_errors": 0, + "collisions": 0 + } + } + } +] diff --git a/test/case/cli/system-output/ip-link-show-dev-e2.json b/test/case/cli/system-output/ip-link-show-dev-e2.json new file mode 100644 index 000000000..21fd1eccd --- /dev/null +++ b/test/case/cli/system-output/ip-link-show-dev-e2.json @@ -0,0 +1,53 @@ +[ + { + "ifindex": 4, + "ifname": "e2", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "pfifo_fast", + "operstate": "UP", + "linkmode": "DEFAULT", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "02:00:00:00:00:02", + "broadcast": "ff:ff:ff:ff:ff:ff", + "promiscuity": 0, + "allmulti": 0, + "min_mtu": 68, + "max_mtu": 65535, + "inet6_addr_gen_mode": "eui64", + "num_tx_queues": 1, + "num_rx_queues": 1, + "gso_max_size": 65536, + "gso_max_segs": 65535, + "tso_max_size": 65536, + "tso_max_segs": 65535, + "gro_max_size": 65536, + "parentbus": "virtio", + "parentdev": "virtio4", + "stats64": { + "rx": { + "bytes": 1327, + "packets": 10, + "errors": 0, + "dropped": 0, + "over_errors": 0, + "multicast": 0 + }, + "tx": { + "bytes": 17582, + "packets": 89, + "errors": 0, + "dropped": 0, + "carrier_errors": 0, + "collisions": 0 + } + } + } +] diff --git a/test/case/cli/system-output/ip-link-show-dev-e3.json b/test/case/cli/system-output/ip-link-show-dev-e3.json new file mode 100644 index 000000000..4df9b2d7a --- /dev/null +++ b/test/case/cli/system-output/ip-link-show-dev-e3.json @@ -0,0 +1,53 @@ +[ + { + "ifindex": 5, + "ifname": "e3", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "pfifo_fast", + "operstate": "UP", + "linkmode": "DEFAULT", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "02:00:00:00:00:03", + "broadcast": "ff:ff:ff:ff:ff:ff", + "promiscuity": 0, + "allmulti": 0, + "min_mtu": 68, + "max_mtu": 65535, + "inet6_addr_gen_mode": "eui64", + "num_tx_queues": 1, + "num_rx_queues": 1, + "gso_max_size": 65536, + "gso_max_segs": 65535, + "tso_max_size": 65536, + "tso_max_segs": 65535, + "gro_max_size": 65536, + "parentbus": "virtio", + "parentdev": "virtio5", + "stats64": { + "rx": { + "bytes": 1327, + "packets": 10, + "errors": 0, + "dropped": 0, + "over_errors": 0, + "multicast": 0 + }, + "tx": { + "bytes": 15057, + "packets": 72, + "errors": 0, + "dropped": 0, + "carrier_errors": 0, + "collisions": 0 + } + } + } +] diff --git a/test/case/cli/system-output/ip-link-show-dev-e4.json b/test/case/cli/system-output/ip-link-show-dev-e4.json new file mode 100644 index 000000000..883f1f009 --- /dev/null +++ b/test/case/cli/system-output/ip-link-show-dev-e4.json @@ -0,0 +1,53 @@ +[ + { + "ifindex": 6, + "ifname": "e4", + "flags": [ + "BROADCAST", + "MULTICAST", + "UP", + "LOWER_UP" + ], + "mtu": 1500, + "qdisc": "pfifo_fast", + "operstate": "UP", + "linkmode": "DEFAULT", + "group": "default", + "txqlen": 1000, + "link_type": "ether", + "address": "02:00:00:00:00:04", + "broadcast": "ff:ff:ff:ff:ff:ff", + "promiscuity": 0, + "allmulti": 0, + "min_mtu": 68, + "max_mtu": 65535, + "inet6_addr_gen_mode": "eui64", + "num_tx_queues": 1, + "num_rx_queues": 1, + "gso_max_size": 65536, + "gso_max_segs": 65535, + "tso_max_size": 65536, + "tso_max_segs": 65535, + "gro_max_size": 65536, + "parentbus": "virtio", + "parentdev": "virtio6", + "stats64": { + "rx": { + "bytes": 1327, + "packets": 10, + "errors": 0, + "dropped": 0, + "over_errors": 0, + "multicast": 0 + }, + "tx": { + "bytes": 19022, + "packets": 95, + "errors": 0, + "dropped": 0, + "carrier_errors": 0, + "collisions": 0 + } + } + } +]