# Running WiFi tests

Most WiFi tests specify `DEPENDENCIES = 'wificell'` in their control file,
which means they require not only an autotest server and a DUT, but also a
special test-enabled Access Point (AP). Additionally, some tests require a
packet capture (pcap) device or a signal attenuator.

The basics of running a wificell autotest are the same as any other, except
that autotest also needs to know where to find your test AP. For some
configurations, this is sufficient:

```bash
# Run a 5HT40 test with DUT at 'my-host' and AP at 'my-host-router'.
test_that my-host network_WiFi_SimpleConnect.wifi_check5HT40
````

This works for most of the Chrome OS lab WiFi cells, where we configure DNS to
pair a DUT at address `${HOST}` with its companion AP at an address
`${HOST}-router`. See below for more info on addressing your test AP.

## What is a test AP?

A test AP can come in various forms, but as of this writing, it is typically a
Chrome OS based router / access point such as Whirlwind or Gale, running a
testbed-ap variant of a Chrome OS test image in Developer Mode. We have
previously supported other consumer routers, running OpenWRT. Setting up a test
AP is not in the scope for this document.

The key purpose of a test AP is to run a variety of [hostapd] instances, such
that we can test our DUTs using different PHY, cipher, etc., configurations.

In autotest, a test AP is represented by a `LinuxRouter` object, in
[site\_linux\_router].

## What suites should I run?

There are a variety of WiFi-related suites, but developers are commonly
interested in the functionality (`wifi_matfunc`) and performance (`wifi_perf`)
suites.

## Configuring DNS entries for test APs

Autotest assumes that if you have a DUT at address `${HOST}`, then your AP is
at an address `${HOST}-router` (see [dnsname\_mangler]). This is configured
automatically by the lab team for most Chrome OS lab WiFi setups.

For custom/local testing without modifying your DNS server, one can accomplish
this by adding entries to your `/etc/hosts` file. Alternatively, you can supply
the `router_addr=` and `pcap_addr=` arguments to autotest. For example:

```bash
# DUT at 'my-host', AP at 'my-other-router', and PCAP at 'my-other-pcap'
test_that --args="router_addr=my-other-router pcap_addr=my-other-pcap" \
        my-host suite:wifi_matfunc
```

If the test is using
[Tast](https://chromium.googlesource.com/chromiumos/platform/tast/) instead of
autotest, you can pass the `router` and `pcap` arguments to `tast run` instead:

```bash
# DUT at 'my-host', AP at 'my-other-router', and PCAP at 'my-other-pcap'
tast run -var="router=my-other-router" -var="pcap=my-other-pcap" my-host \
        wifi.ChannelHop
```

Also, note that if a pcap device isn't found at `${HOST}-pcap`, then we often
can utilize the test AP to capture packets as well. The test framework does
this by creating one or more monitor-mode interfaces in addition to the AP-mode
interface(s) normally used for tests. Note that 802.11 radios cannot both
transmit and receive at the same time, so this mode operates with slightly
degraded functionality. In particular, while a typical mac80211-based AP driver
can capture many aspects of its own transmitted frames (e.g., 802.11 headers
are constructed in software), it cannot monitor how those frames really look
over the air, so it will likely be missing most physical-layer information
(e.g., bitrates, modulation, frequency) or firmware-controlled behaviors (e.g.,
802.11 ACKs).

For example, consider the following AP + monitor capture, filtered for
[AP-transmitted frames](https://screenshot.googleplex.com/DWSaResO583) and
[AP-received frames](https://screenshot.googleplex.com/5EsZvbBpKEc) (links are
Google-internal). While the AP-transmitted frames contain 802.11 header
information like MAC-layer addresses and sequence numbers, only the received
frames contain information like frequency and bitrate. As such, if you need
this sort of information for debugging your tests, ensure you are using a
dedicated pcap device. Note that all supported tests should support running in
either configuration.

[dnsname\_mangler]: ../server/cros/dnsname_mangler.py
[hostapd]: https://w1.fi/hostapd/
[site\_linux\_router]: ../server/site_linux_router.py
