toybox/tests/ifconfig.test
<<
>>
Prefs
   1#!/bin/bash
   2# Copyright 2014 Cynthia Rempel <cynthia@rtems.org>
   3#
   4# Brief: Some cursery coverage tests of ifconfig...
   5# Note: requires permissions to run modprobe and all ifconfig options
   6# Commands used: grep, grep -i, ip link, ip tuntap, wc -l
   7#
   8# Possible improvements:
   9# 1. Verify the dummy interface actually has the modified characteristics
  10#    instead of relying on ifconfig output
  11# 2. Introduce more error cases, to verify ifconfig fails gracefully
  12# 3. Do more complex calls to ifconfig, while mixing the order of the
  13#    arguments
  14# 4. Cover more ifconfig options:
  15#    hw ether|infiniband ADDRESS - set LAN hardware address (AA:BB:CC...)
  16#    txqueuelen LEN - number of buffered packets before output blocks
  17#    Obsolete fields included for historical purposes:
  18#    irq|io_addr|mem_start ADDR - micromanage obsolete hardware
  19#    outfill|keepalive INTEGER - SLIP analog dialup line quality monitoring
  20#    metric INTEGER - added to Linux 0.9.10 with comment "never used", still true
  21
  22#testing "name" "command" "result" "infile" "stdin"
  23
  24[ -f testing.sh ] && . testing.sh
  25
  26if [ "$(id -u)" -ne 0 ]
  27then
  28  echo "$SHOWSKIP: ifconfig (not root)"
  29  return 2>/dev/null
  30  exit
  31fi
  32
  33# Add a dummy interface to test with
  34modprobe dummy 2>/dev/null
  35if ! ifconfig dummy0 up 2>/dev/null
  36then
  37  echo "$SHOWSKIP: ifconfig dummy0 up failed"
  38  return 2>/dev/null
  39  exit
  40fi
  41
  42# Results Expected: After calling ifconfig, no lines with dummy0 are displayed
  43testing "Disable the dummy0 interface"
  44  "ifconfig dummy0 down && ifconfig | grep dummy | wc -l" "0\n" "" ""
  45
  46# Results Expected: After calling ifconfig, one line with dummy0 is displayed
  47testing "Enable the dummy0 interface" \
  48  "ifconfig dummy0 up && ifconfig dummy0 | grep dummy | wc -l" "1\n" "" ""
  49
  50# Results Expected: After calling ifconfig dummy0, one line displays the ip
  51#                   address selected
  52testing "Set the ip address of the dummy0 interface" \
  53  "ifconfig dummy0 10.240.240.240 && ifconfig dummy0 | grep 10\.240\.240\.240 | wc -l" \
  54  "1\n" "" ""
  55
  56# Results Expected: After calling ifconfig dummy0, one line displays the
  57#                   netmask selected
  58testing "Change the netmask to the interface" \
  59  "ifconfig dummy0 netmask 255.255.240.0 && ifconfig dummy0 | grep 255\.255\.240\.0 | wc -l" \
  60  "1\n" "" ""
  61
  62# Results Expected: After calling ifconfig dummy0, one line displays the
  63#                   broadcast address selected
  64testing "Change the broadcast address to the interface" \
  65  "ifconfig dummy0 broadcast 10.240.240.255 && ifconfig dummy0 | grep 10\.240\.240\.255 | wc -l" \
  66  "1\n" "" ""
  67
  68# Test Description: Revert to the default ip address
  69# Results Expected: After calling ifconfig dummy0, there are no lines
  70#                   displaying the ip address previously selected
  71testing "dummy0 default" \
  72"ifconfig dummy0 default && ifconfig dummy0 | grep 10\.240\.240\.240 | wc -l" \
  73"0\n" "" ""
  74
  75# Test Description: Change the Maximum transmission unit (MTU) of the interface
  76# Results Expected: After calling ifconfig dummy0, there is one line with the
  77#                   selected MTU
  78testing "dummy0 mtu 1269" \
  79"ifconfig dummy0 mtu 1269 && ifconfig dummy0 | grep 1269 | wc -l" \
  80"1\n" "" ""
  81
  82# Test Description: ifconfig add for IPv6 fails with an mtu too small for IPv6.
  83# Results Expected: Failure. No check for the exact error because old kernels
  84#                   used ENOBUFS but 5.4 uses EINVAL.
  85testing "dummy0 add ::2 -- too small mtu" \
  86"ifconfig dummy0 add ::2 2>/dev/null || echo expected" "expected\n" "" ""
  87
  88# Test Description: Change the Maximum transmission unit (MTU) of the interface
  89# Results Expected: After calling ifconfig dummy0, there is one line with the
  90#                   selected MTU
  91testing "dummy0 mtu 2000" \
  92"ifconfig dummy0 mtu 2000 && ifconfig dummy0 | grep 2000 | wc -l" \
  93"1\n" "" ""
  94
  95# Test Description: Verify ifconfig add succeeds with a larger mtu
  96# Results Expected: after calling ifconfig dummy0, there is one line with the
  97#                   selected ip address
  98testing "dummy0 add ::2" \
  99"ifconfig dummy0 add ::2/126 && ifconfig dummy0 | grep \:\:2/126 | wc -l" \
 100"1\n" "" ""
 101
 102# Test Description: Verify ifconfig del removes the selected ip6 address
 103# Results Expected: after calling ifconfig dummy0, there are no lines with the
 104#                   selected ip address
 105testing "dummy0 del ::2" \
 106"ifconfig dummy0 del ::2/126 && ifconfig dummy0 | grep \:\:2/126 | wc -l" \
 107"0\n" "" ""
 108
 109# Test Description: Remove the noarp flag and bring the interface down in
 110#                   preparation for the next test
 111# Results Expected: After calling ifconfig dummy0, there are no lines with the
 112#                   NOARP flag
 113testing "dummy0 arp down" \
 114"ifconfig dummy0 arp down && ifconfig dummy0 | grep -i NOARP | wc -l" \
 115"0\n" "" ""
 116
 117# Test Description: Call the pointopoint option with no argument
 118# Results Expected: After calling ifconfig dummy0, there is one line with the
 119#                   NOARP and UP flags
 120# TODO: http://lists.landley.net/pipermail/toybox-landley.net/2014-November/003795.html
 121#testing "dummy0 pointopoint" \
 122#"ifconfig dummy0 pointopoint && ifconfig dummy0 | grep -i NOARP | grep -i UP | wc -l" \
 123#"1\n" "" ""
 124
 125# Test Description: Test the pointopoint option and set the ipaddress
 126# Results Expected: After calling ifconfig dummy0, there is one line with the
 127#                   word inet and the selected ip address
 128# TODO: http://lists.landley.net/pipermail/toybox-landley.net/2014-November/003795.html
 129#testing "dummy0 pointopoint 127.0.0.2" \
 130#"ifconfig dummy0 pointopoint 127.0.0.2 && ifconfig dummy0 | grep -i inet | grep -i 127\.0\.0\.2 | wc -l" \
 131#"1\n" "" ""
 132
 133####### Flags you can set on an interface (or -remove by prefixing with -): ###############
 134
 135# Test Description: Enable allmulti mode on the interface
 136# Results Expected: After calling ifconfig dummy0, there is one line with the
 137#                   allmulti flag
 138testing "dummy0 allmulti" \
 139"ifconfig dummy0 allmulti && ifconfig dummy0 | grep -i allmulti | wc -l" "1\n" \
 140"" ""
 141
 142# Test Description: Disable multicast mode the interface
 143# Results Expected: After calling ifconfig dummy0, there are no lines with the
 144#                   allmulti flag
 145testing "dummy0 -allmulti" \
 146"ifconfig dummy0 -allmulti && ifconfig dummy0 | grep -i allmulti | wc -l" "0\n" \
 147"" ""
 148
 149# Test Description: Disable NOARP mode on the interface
 150# Results Expected: After calling ifconfig dummy0, there are no lines with the
 151#                   NOARP flag
 152testing "dummy0 arp" \
 153"ifconfig dummy0 arp && ifconfig dummy0 | grep -i NOARP | wc -l" "0\n" \
 154"" ""
 155
 156# Test Description: Enable NOARP mode on the interface
 157# Results Expected: After calling ifconfig dummy0, there is one line with the
 158#                   NOARP flag
 159testing "dummy0 -arp" \
 160"ifconfig dummy0 -arp && ifconfig dummy0 | grep -i NOARP | wc -l" "1\n" \
 161"" ""
 162
 163# Test Description: Enable multicast mode on the interface
 164# Results Expected: After calling ifconfig dummy0, there is one line with the
 165#                   multicast flag
 166testing "dummy0 multicast" \
 167"ifconfig dummy0 multicast && ifconfig dummy0 | grep -i multicast | wc -l" \
 168"1\n" "" ""
 169
 170# Test Description: Disable multicast mode the interface
 171# Results Expected: After calling ifconfig dummy0, there are no lines with the
 172#                   multicast flag
 173testing "dummy0 -multicast" \
 174"ifconfig dummy0 -multicast && ifconfig dummy0 | grep -i multicast | wc -l" \
 175"0\n" "" ""
 176
 177# Test Description: Enable promiscuous mode the interface
 178# Results Expected: After calling ifconfig dummy0, there is one line with the
 179#                   promisc flag
 180testing "dummy0 promisc" \
 181"ifconfig dummy0 promisc && ifconfig dummy0 | grep -i promisc | wc -l" "1\n" \
 182"" ""
 183
 184# Disable promiscuous mode the interface
 185# Results Expected: After calling ifconfig dummy0, there are no lines with the
 186#                   promisc flag
 187testing "dummy0 -promisc" \
 188"ifconfig dummy0 -promisc && ifconfig dummy0 | grep -i promisc | wc -l" "0\n" \
 189"" ""
 190
 191# Disable the dummy interface
 192ifconfig dummy0 down
 193