plugin: shell
name: wireless/wireless_scanning
requires:
  package.name == 'network-manager'
  device.category == 'WIRELESS'
command:
 rfkill unblock wlan wifi
 if rfkill list wlan wifi | grep -q 'Hard blocked: yes'; then
   echo "Hard block is applied to WiFi device. Please remove and retest."
   exit 1
 fi
 wireless_networks=`nmcli -f SSID dev wifi list`
 if [ `echo "$wireless_networks" | wc -l` -gt 1 ]; then
   echo "Wireless networks discovered: "
   echo "$wireless_networks"
   exit 0
 fi
 echo "No wireless networks discovered."
 exit 1
estimated_duration: 0.645
description: Wireless scanning test. It scans and reports on discovered APs.

plugin: shell
name: wireless/info_automated
requires:
 package.name == 'network-manager'
 device.category == 'WIRELESS'
command: udev_resource | filter_templates -w "category=WIRELESS"| awk "/path: / { print \$2 }"| xargs -n 1 sh -c "for i in \`ls /sys\$0/net 2>/dev/null\`; do network_info \$i; done"
estimated_duration: 1.2
description:
 This is an automated test to gather some info on the current state of your wireless devices. If no devices are found, the test will exit with an error.

plugin: user-interact-verify
name: wireless/wireless_connection
command: network_check
estimated_duration: 120.0
requires: device.category == 'WIRELESS'
description:
 PURPOSE:
     This test will check your wireless connection.
 STEPS:
     1. Click on the Network icon in the panel.
     2. Select a network below the 'Wireless networks' section.
     3. Click "Test" to verify that it's possible to establish an HTTP connection.
 VERIFICATION:
     Did a notification show and was the connection correctly established?

plugin: shell
name: wireless/wireless_connection_wpa_bg
requires:
 device.category == 'WIRELESS'
 environment.ROUTERS == 'multiple'
user: root
environ: WPA_BG_SSID WPA_BG_PSK
command: trap "nmcli con delete id $WPA_BG_SSID" EXIT; create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK && gateway_ping_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
estimated_duration: 30.0
description:
 Tests that the systems wireless hardware can connect to a router using WPA
 security and the 802.11b/g protocols.

plugin: shell
name: wireless/wireless_connection_open_bg
requires:
 device.category == 'WIRELESS'
 environment.ROUTERS == 'multiple'
user: root
environ: OPEN_BG_SSID
command: trap "nmcli con delete id $OPEN_BG_SSID" EXIT; create_connection wifi $OPEN_BG_SSID && gateway_ping_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
estimated_duration: 30.0
description:
 Tests that the systems wireless hardware can connect to a router using no
 security and the 802.11b/g protocols.

plugin: shell
name: wireless/wireless_connection_wpa_n
requires:
 device.category == 'WIRELESS'
 environment.ROUTERS == 'multiple'
user: root
environ: WPA_N_SSID WPA_N_PSK
command: trap "nmcli con delete id $WPA_N_SSID" EXIT; create_connection wifi $WPA_N_SSID --security=wpa --key=$WPA_N_PSK && gateway_ping_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
estimated_duration: 30.0
description:
 Tests that the systems wireless hardware can connect to a router using WPA
 security and the 802.11n protocol.

plugin: shell
name: wireless/wireless_connection_open_n
requires:
 device.category == 'WIRELESS'
 environment.ROUTERS == 'multiple'
user: root
environ: OPEN_N_SSID
command: trap "nmcli con delete id $OPEN_N_SSID" EXIT; create_connection wifi $OPEN_N_SSID &&  gateway_ping_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
estimated_duration: 30.0
description:
 Tests that the systems wireless hardware can connect to a router using no
 security and the 802.11n protocol.

plugin: user-interact-verify
name: wireless/wireless_connection_wpa_bg_manual
requires:
 device.category == 'WIRELESS'
 environment.ROUTERS == 'single'
user: root
environ: ROUTER_SSID ROUTER_PSK
command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && gateway_ping_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
estimated_duration: 120.0
description:
 PURPOSE:
     Tests that the systems wireless hardware can connect to a router using WPA
     security and the 802.11b/g protocols.
 STEPS:
     1. Open your routers configuration tool
     2. Change the settings to only accept connections on the B and G wireless bands
     3. Make sure the SSID is set to ROUTER_SSID
     4. Change the security settings to use WPA2 and ensure the PSK matches that set in ROUTER_PSK
     5. Click the 'Test' button to create a connection to the router and test the connection
 VERIFICATION:
     Verification is automated, do not change the automatically selected result.

plugin: user-interact-verify
name: wireless/wireless_connection_open_bg_manual
requires:
 device.category == 'WIRELESS'
 environment.ROUTERS == 'single'
user: root
environ: ROUTER_SSID
command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID && gateway_ping_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
estimated_duration: 120.0
description:
 PURPOSE:
     Tests that the systems wireless hardware can connect to a router using
     no security and the 802.11b/g protocols.
 STEPS:
     1. Open your routers configuration tool
     2. Change the settings to only accept connections on the B and G wireless bands
     3. Make sure the SSID is set to ROUTER_SSID
     4. Change the security settings to use no security
     5. Click the 'Test' button to create a connection to the router and test the connection
 VERIFICATION:
     Verification is automated, do not change the automatically selected result.

plugin: user-interact-verify
name: wireless/wireless_connection_wpa_n_manual
requires:
 device.category == 'WIRELESS'
 environment.ROUTERS == 'single'
user: root
environ: ROUTER_SSID ROUTER_PSK
command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && gateway_ping_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
estimated_duration: 120.0
description:
 PURPOSE:
     Tests that the systems wireless hardware can connect to a router using WPA
     security and the 802.11n protocols.
 STEPS:
     1. Open your routers configuration tool
     2. Change the settings to only accept connections on the N wireless band
     3. Make sure the SSID is set to ROUTER_SSID
     4. Change the security settings to use WPA2 and ensure the PSK matches that set in ROUTER_PSK
     5. Click the 'Test' button to create a connection to the router and test the connection
 VERIFICATION:
     Verification is automated, do not change the automatically selected result.

plugin: user-interact-verify
name: wireless/wireless_connection_open_n_manual
requires:
 device.category == 'WIRELESS'
 environment.ROUTERS == 'single'
user: root
environ: ROUTER_SSID
command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID && gateway_ping_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
estimated_duration: 120.0
description:
 PURPOSE:
     Tests that the systems wireless hardware can connect to a router using
     no security and the 802.11n protocol.
 STEPS:
     1. Open your routers configuration tool
     2. Change the settings to only accept connections on the N wireless band
     3. Make sure the SSID is set to ROUTER_SSID
     4. Change the security settings to use no security
     5. Click the 'Test' button to create a connection to the router and test the connection
 VERIFICATION:
     Verification is automated, do not change the automatically selected result.

plugin: shell
name: wireless/monitor_wireless_connection
requires:
 package.name == 'iperf'
 device.category == 'WIRELESS'
user: root
environ: WPA_BG_SSID WPA_BG_PSK SERVER_IPERF
command: trap "nmcli con delete id $WPA_BG_SSID" EXIT; create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK && iperf -c $SERVER_IPERF -t 300 -i 30
estimated_duration: 330.0
description:
 Tests the performance of a systems wireless connection through the iperf tool.

plugin: shell
name: wireless/monitor_wireless_connection_udp
requires:
 package.name == 'iperf'
 device.category == 'WIRELESS'
user: root
environ: WPA_BG_SSID WPA_BG_PSK SERVER_IPERF
command: trap "nmcli con delete id $WPA_BG_SSID" EXIT; create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK && iperf -c $SERVER_IPERF -t 300 -i 30 -u -b 100m -p 5050
estimated_duration: 330.0
description:
 Tests the performance of a systems wireless connection through the iperf tool, using UDP packets.

plugin: shell
name: wireless/wireless_connection_open_a
requires: device.category == 'WIRELESS'
user: root
environ: OPEN_A_SSID
command: trap "nmcli con delete id $OPEN_A_SSID" EXIT; create_connection wifi $OPEN_A_SSID && gateway_ping_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
estimated_duration: 30.0
description:
  Test that the system's wireless hardware can connect to a router using the
  802.11a protocol. This requires that you have a router pre-configured to only
  respond to requests on the 802.11a protocol.

plugin: shell
name: wireless/wireless_connection_open_b
requires: device.category == 'WIRELESS'
user: root
environ: OPEN_B_SSID
command: trap "nmcli con delete id $OPEN_B_SSID" EXIT; create_connection wifi $OPEN_B_SSID && gateway_ping_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
estimated_duration: 30.0
description:
  Test that the system's wireless hardware can connect to a router using the
  802.11b protocol. This requires that you have a router pre-configured to only
  respond to requests on the 802.11b protocol.

plugin: local
name: wireless/stress_performance
requires:
  device.category == 'NETWORK'
description: Automated test that tests performance of each wireless network device under stress.
command:
 cat <<'EOF' | run_templates -s 'udev_resource | filter_templates -w "category=WIRELESS" | awk "/path: / { print \$2 }" | xargs -n 1 sh -c "for i in \`ls /sys\$0/net 2>/dev/null\`; do echo \$0 \$i; done"'
 plugin: shell
 name: wireless/stress_performance_$2
 requires: device.path == "$1"
 user: root
 command: network test -i $2 -t stress
 estimated_duration: 330.0
 _description:
  This test executes iperf to generate a load on the network device and then performs a ping test to watch for dropped packets and very large latency periods.
 EOF

plugin: shell
name: wireless/wireless_connection_open_g
requires: device.category == 'WIRELESS'
user: root
environ: OPEN_G_SSID
command: trap "nmcli con delete id $OPEN_G_SSID" EXIT; create_connection wifi $OPEN_G_SSID && gateway_ping_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
estimated_duration: 30.0
description:
  Test that the system's wireless hardware can connect to a router using the
  802.11g protocol. This requires that you have a router pre-configured to only
  respond to requests on the 802.11g protocol.

plugin: shell
name: wireless/wireless_extension
requires: device.category == 'WIRELESS'
command: wireless_ext
estimated_duration: 1.2
description:
 Test that the MAC80211 modules are loaded and wireless extensions are working.

plugin: local
name: wireless/iwconfig_info
requires:
 device.category == 'WIRELESS'
command: 
 cat <<'EOF' | run_templates -s 'udev_resource | filter_templates -w "category=WIRELESS" | awk "/path: / { print \$2 }" | xargs -n 1 sh -c "for i in \`ls /sys\$0/net 2>/dev/null\`; do echo \$0 \$i; done"'
 plugin: shell
 name: wireless/iwconfig_check_$2
 requires: device.path == "$1"
 command: iwconfig $2
 estimated_duration: 1.2
 _description:
  This test executes iwconfig requests against all the ethernet devices found on the system.
 EOF
description:
 This is an automated test to gather some info on the current state of your network devices. If no devices are found, the test will exit with an error.

plugin: user-interact-verify
name: wireless/wireless_rfkill
command: rfkill list | zenity --text-info --title rfkill-Info
estimated_duration: 120.0
requires: device.category == 'WIRELESS'
description:
 PURPOSE:
     This test will check whether or not your driver responds to rfkill commands.
 STEPS:
     1. Use the hardware switch on the side of your device to switch off wireless.
     2. If you do not have a hardware switch disable wireless from the network manager icon in the panel
     3. Click "Test" to verify that the hard or soft blocks are in place.
 VERIFICATION:
     Did the hard or soft blocks show on in the dialog?

plugin: local
name: wireless/maximum_bandwidth
requires:
 device.category == 'WIRELESS'
 package.name == 'zenity'
 package.name == 'iperf'
command:
 cat <<'EOF' | run_templates -s 'udev_resource | filter_templates -w "category=WIRELESS" | awk "/path: / { print \$2 }" | xargs -n 1 sh -c "for i in \`ls /sys\$0/net 2>/dev/null\`; do echo \$0 \$i; done"'
 plugin: user-verify
 user: root
 name: wireless/maximum_bandwidth_$2
 requires: device.path == "$1"
 command: network test -i $2 -t iperf 2>&1 | cat - <(echo; echo "Verify the result and click OK to decide on the outcome") | zenity --text-info --title 'wireless max bw $2'
 estimated_duration: 120.0
 _description:
  PURPOSE:
      User verification of whether the observed transfer throughput is acceptable
      for the type and maximum speed of each wireless interface.
  STEPS:
      1. Read the network test summary and confirm that the throughput is acceptable.
      2. If needed, click "Test" again to repeat the transfer test.
  VERIFICATION:
     Was the reported throughput acceptable for the type and maximum speed of this interface?
 EOF
description:
 This test executes a maximum throughput test against all the wireless devices found on the system.
