diff options
Diffstat (limited to 'meta-google/recipes-google/networking/files/gbmc-ip-monitor-test.sh')
-rwxr-xr-x | meta-google/recipes-google/networking/files/gbmc-ip-monitor-test.sh | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/meta-google/recipes-google/networking/files/gbmc-ip-monitor-test.sh b/meta-google/recipes-google/networking/files/gbmc-ip-monitor-test.sh new file mode 100755 index 000000000..8b5f3492f --- /dev/null +++ b/meta-google/recipes-google/networking/files/gbmc-ip-monitor-test.sh @@ -0,0 +1,181 @@ +#!/bin/bash +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +cd "$(dirname "$0")" +source gbmc-ip-monitor.sh +if [ -e ../gbmc-ip-monitor.bb ]; then + source '../../test/test-sh/lib.sh' +else + source "$SYSROOT/usr/share/test/lib.sh" +fi + +test_init_empty() { + ip() { + return 0 + } + str="$(gbmc_ip_monitor_generate_init)" || fail + expect_streq "$str" '[INIT]' +} + +test_init_link_populated() { + ip() { + if [ "$1" = 'link' ]; then + cat <<EOF +1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 +2: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 + link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff + altname enp0s31f6 +EOF + fi + return 0 + } + str="$(gbmc_ip_monitor_generate_init)" || fail + expect_streq "$str" <<EOF +[LINK]1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 +[LINK]2: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 + link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff + altname enp0s31f6 +[INIT] +EOF +} + +test_init_addr_populated() { + ip() { + if [ "$1" = 'addr' ]; then + cat <<EOF +1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever +2: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff + altname enp0s31f6 + inet 192.168.242.57/23 brd 192.168.243.255 scope global dynamic noprefixroute eno2 + valid_lft 83967sec preferred_lft 83967sec + inet6 fd01:ff2:5687:4:cf03:45f3:983a:96eb/64 scope global temporary dynamic + valid_lft 518788sec preferred_lft 183sec +EOF + fi + return 0 + } + str="$(gbmc_ip_monitor_generate_init)" || fail + expect_streq "$str" <<EOF +[ADDR]1: lo inet 127.0.0.1/8 scope host lo +[ADDR]1: lo inet6 ::1/128 scope host +[ADDR]2: eno2 inet 192.168.242.57/23 brd 192.168.243.255 scope global dynamic noprefixroute eno2 +[ADDR]2: eno2 inet6 fd01:ff2:5687:4:cf03:45f3:983a:96eb/64 scope global temporary dynamic +[INIT] +EOF +} + +test_init_route_populated() { + ip() { + if [ "$1" = "-4" -a "${2-}" = 'route' ]; then + cat <<EOF +default via 192.168.243.254 dev eno2 proto dhcp metric 100 +192.168.242.0/23 dev eno2 proto kernel scope link src 192.168.242.57 metric 100 +EOF + elif [ "$1" = "-6" -a "${2-}" = 'route' ]; then + cat <<EOF +::1 dev lo proto kernel metric 256 pref medium +fd01:ff2:5687:4::/64 dev eno2 proto ra metric 100 pref medium +fe80::/64 dev eno2 proto kernel metric 100 pref medium +EOF + fi + return 0 + } + str="$(gbmc_ip_monitor_generate_init)" || fail + expect_streq "$str" <<EOF +[ROUTE]default via 192.168.243.254 dev eno2 proto dhcp metric 100 +[ROUTE]192.168.242.0/23 dev eno2 proto kernel scope link src 192.168.242.57 metric 100 +[ROUTE]::1 dev lo proto kernel metric 256 pref medium +[ROUTE]fd01:ff2:5687:4::/64 dev eno2 proto ra metric 100 pref medium +[ROUTE]fe80::/64 dev eno2 proto kernel metric 100 pref medium +[INIT] +EOF +} + +testParseNonTag() { + expect_err 2 gbmc_ip_monitor_parse_line '' + expect_err 2 gbmc_ip_monitor_parse_line ' ' + expect_err 2 gbmc_ip_monitor_parse_line ' Data' + expect_err 2 gbmc_ip_monitor_parse_line ' [LINK]' + expect_err 2 gbmc_ip_monitor_parse_line ' [ROUTE]' +} + +testParseInit() { + expect_err 0 gbmc_ip_monitor_parse_line '[INIT]' + expect_streq "$change" 'init' +} + +testParseAddrAdd() { + expect_err 0 gbmc_ip_monitor_parse_line '[ADDR]2: eno2 inet6 fd01:ff2:5687:4:cf03:45f3:983a:96eb/128 scope global temporary dynamic' + expect_streq "$change" 'addr' + expect_streq "$action" 'add' + expect_streq "$intf" 'eno2' + expect_streq "$fam" 'inet6' + expect_streq "$ip" 'fd01:ff2:5687:4:cf03:45f3:983a:96eb' + expect_streq "$scope" 'global' + expect_streq "$flags" 'temporary dynamic' +} + +testParseAddrDel() { + expect_err 0 gbmc_ip_monitor_parse_line '[ADDR]Deleted 2: eno2 inet6 fe80::aaaa:aaff:feaa:aaaa/64 scope link' + expect_streq "$change" 'addr' + expect_streq "$action" 'del' + expect_streq "$intf" 'eno2' + expect_streq "$fam" 'inet6' + expect_streq "$ip" 'fe80::aaaa:aaff:feaa:aaaa' + expect_streq "$scope" 'link' + expect_streq "$flags" '' +} + +testParseRouteAdd() { + expect_err 0 gbmc_ip_monitor_parse_line "[ROUTE]fd01:ff2:5687:4::/64 dev eno2 proto ra metric 100 pref medium" + expect_streq "$change" 'route' + expect_streq "$action" 'add' + expect_streq "$route" 'fd01:ff2:5687:4::/64 dev eno2 proto ra metric 100 pref medium' +} + +testParseRouteDel() { + expect_err 0 gbmc_ip_monitor_parse_line "[ROUTE]Deleted fd01:ff2:5687:4::/64 dev eno2 proto ra metric 100 pref medium" + expect_streq "$change" 'route' + expect_streq "$action" 'del' + expect_streq "$route" 'fd01:ff2:5687:4::/64 dev eno2 proto ra metric 100 pref medium' +} + +testParseLinkAdd() { + expect_err 0 gbmc_ip_monitor_parse_line "[LINK]2: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000" \ + < <(echo 'link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff') + expect_streq "$change" 'link' + expect_streq "$action" 'add' + expect_streq "$intf" 'eno2' + expect_streq "$mac" 'aa:aa:aa:aa:aa:aa' +} + +testParseLinkDel() { + expect_err 0 gbmc_ip_monitor_parse_line "[LINK]Deleted 2: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000" \ + < <(echo 'link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff') + expect_streq "$change" 'link' + expect_streq "$action" 'del' + expect_streq "$intf" 'eno2' + expect_streq "$mac" 'aa:aa:aa:aa:aa:aa' +} + +main |