network_WiFi_AttenuatedPerf: Add VHT80 support.

Added the following configs:
VHT40 channels 36, 60, 149 and 157.
VHT80 channels 42 and 155.
The channels above have the most frequencies used according to UMA
https://uma.googleplex.com/p/chrome/histograms?sid=5f135e4ffc5e3b1f360eab0940c183b9
In addition, the attenuator steps and final attenuation are moved from
network_AttenuatedPerf.py to the control files for more flexibility.

BUG=chromium:827829
TEST=run the following tests:
network_WiFi_AttenuatedPerf.vht40_ch036
network_WiFi_AttenuatedPerf.vht40_ch060
network_WiFi_AttenuatedPerf.vht40_ch149
network_WiFi_AttenuatedPerf.vht40_ch157
network_WiFi_AttenuatedPerf.vht80_ch042
network_WiFi_AttenuatedPerf.vht80_ch155

Change-Id: Id973e63ce4de0ba224c2dc27e0bf3169e91d6789
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/2046455
Reviewed-by: Harpreet Grewal <harpreet@chromium.org>
Tested-by: Arowa Suliman <arowa@chromium.org>
Commit-Queue: Arowa Suliman <arowa@chromium.org>
diff --git a/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch001 b/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch001
index 1663e6e..95e60d4 100644
--- a/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch001
+++ b/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch001
@@ -25,11 +25,13 @@
             channel=1,
             n_capabilities=[hostap_config.HostapConfig.N_CAPABILITY_HT40_PLUS],
             mode=hostap_config.HostapConfig.MODE_11N_PURE)
+    attenuation_increment = 4
+    final_attenuation = 100
     job.run_test('network_WiFi_AttenuatedPerf',
                  tag=NAME.split('.')[1],
                  host=host,
                  raw_cmdline_args=args,
-                 additional_params=ap_config)
+                 additional_params=(ap_config, attenuation_increment, final_attenuation))
 
 
 parallel_simple(run, machines)
diff --git a/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch006 b/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch006
index b694b9c..6001511 100644
--- a/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch006
+++ b/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch006
@@ -25,11 +25,13 @@
             channel=6,
             n_capabilities=[hostap_config.HostapConfig.N_CAPABILITY_HT40_PLUS],
             mode=hostap_config.HostapConfig.MODE_11N_PURE)
+    attenuation_increment = 4
+    final_attenuation = 100
     job.run_test('network_WiFi_AttenuatedPerf',
                  tag=NAME.split('.')[1],
                  host=host,
                  raw_cmdline_args=args,
-                 additional_params=ap_config)
+                 additional_params=(ap_config, attenuation_increment, final_attenuation))
 
 
 parallel_simple(run, machines)
diff --git a/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch011 b/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch011
index 660e321..8e673d9 100644
--- a/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch011
+++ b/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch011
@@ -25,11 +25,13 @@
             channel=11,
             n_capabilities=[hostap_config.HostapConfig.N_CAPABILITY_HT40_MINUS],
             mode=hostap_config.HostapConfig.MODE_11N_PURE)
+    attenuation_increment = 4
+    final_attenuation = 100
     job.run_test('network_WiFi_AttenuatedPerf',
                  tag=NAME.split('.')[1],
                  host=host,
                  raw_cmdline_args=args,
-                 additional_params=ap_config)
+                 additional_params=(ap_config, attenuation_increment, final_attenuation))
 
 
 parallel_simple(run, machines)
diff --git a/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch044 b/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch044
index 94e80da..243834a 100644
--- a/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch044
+++ b/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch044
@@ -25,11 +25,13 @@
             channel=44,
             n_capabilities=[hostap_config.HostapConfig.N_CAPABILITY_HT40_PLUS],
             mode=hostap_config.HostapConfig.MODE_11N_PURE)
+    attenuation_increment = 4
+    final_attenuation = 100
     job.run_test('network_WiFi_AttenuatedPerf',
                  tag=NAME.split('.')[1],
                  host=host,
                  raw_cmdline_args=args,
-                 additional_params=ap_config)
+                 additional_params=(ap_config, attenuation_increment, final_attenuation))
 
 
 parallel_simple(run, machines)
diff --git a/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch153 b/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch153
index 4351117..bd389fc 100644
--- a/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch153
+++ b/server/site_tests/network_WiFi_AttenuatedPerf/control.ht40_ch153
@@ -25,11 +25,13 @@
             channel=153,
             n_capabilities=[hostap_config.HostapConfig.N_CAPABILITY_HT40_MINUS],
             mode=hostap_config.HostapConfig.MODE_11N_PURE)
+    attenuation_increment = 4
+    final_attenuation = 100
     job.run_test('network_WiFi_AttenuatedPerf',
                  tag=NAME.split('.')[1],
                  host=host,
                  raw_cmdline_args=args,
-                 additional_params=ap_config)
+                 additional_params=(ap_config, attenuation_increment, final_attenuation))
 
 
 parallel_simple(run, machines)
diff --git a/server/site_tests/network_WiFi_AttenuatedPerf/control.vht40_ch036 b/server/site_tests/network_WiFi_AttenuatedPerf/control.vht40_ch036
new file mode 100644
index 0000000..6cdb8e5
--- /dev/null
+++ b/server/site_tests/network_WiFi_AttenuatedPerf/control.vht40_ch036
@@ -0,0 +1,38 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+AUTHOR = 'wiley, pstew, quiche'
+NAME = 'network_WiFi_AttenuatedPerf.vht40_ch036'
+ATTRIBUTES = "suite:wifi_atten_perf"
+TIME = 'SHORT'
+TEST_TYPE = 'Server'
+DEPENDENCIES = 'wificell'
+
+DOC = """
+This test uses netperf to measure the maximal receiving and transmitting
+throughput on a DUT with an open VHT40 802.11ac network across multiple
+attenuation levels.
+"""
+
+
+from autotest_lib.server.cros.network import hostap_config
+
+
+def run(machine):
+    host = hosts.create_host(machine)
+    ap_config = hostap_config.HostapConfig(
+            channel=36,
+            mode=hostap_config.HostapConfig.MODE_11AC_PURE,
+            n_capabilities=[hostap_config.HostapConfig.N_CAPABILITY_HT40],
+            vht_channel_width=hostap_config.HostapConfig.VHT_CHANNEL_WIDTH_40)
+    attenuation_increment = 6
+    final_attenuation = 100
+    job.run_test('network_WiFi_AttenuatedPerf',
+                 tag=NAME.split('.')[1],
+                 host=host,
+                 raw_cmdline_args=args,
+                 additional_params=(ap_config, attenuation_increment, final_attenuation))
+
+
+parallel_simple(run, machines)
diff --git a/server/site_tests/network_WiFi_AttenuatedPerf/control.vht40_ch060 b/server/site_tests/network_WiFi_AttenuatedPerf/control.vht40_ch060
new file mode 100644
index 0000000..f7e3ec4
--- /dev/null
+++ b/server/site_tests/network_WiFi_AttenuatedPerf/control.vht40_ch060
@@ -0,0 +1,38 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+AUTHOR = 'wiley, pstew, quiche'
+NAME = 'network_WiFi_AttenuatedPerf.vht40_ch060'
+ATTRIBUTES = "suite:wifi_atten_perf"
+TIME = 'SHORT'
+TEST_TYPE = 'Server'
+DEPENDENCIES = 'wificell'
+
+DOC = """
+This test uses netperf to measure the maximal receiving and transmitting
+throughput on a DUT with an open VHT40 802.11ac network across multiple
+attenuation levels.
+"""
+
+
+from autotest_lib.server.cros.network import hostap_config
+
+
+def run(machine):
+    host = hosts.create_host(machine)
+    ap_config = hostap_config.HostapConfig(
+            channel=60,
+            mode=hostap_config.HostapConfig.MODE_11AC_PURE,
+            n_capabilities=[hostap_config.HostapConfig.N_CAPABILITY_HT40],
+            vht_channel_width=hostap_config.HostapConfig.VHT_CHANNEL_WIDTH_40)
+    attenuation_increment = 6
+    final_attenuation = 100
+    job.run_test('network_WiFi_AttenuatedPerf',
+                 tag=NAME.split('.')[1],
+                 host=host,
+                 raw_cmdline_args=args,
+                 additional_params=(ap_config, attenuation_increment, final_attenuation))
+
+
+parallel_simple(run, machines)
diff --git a/server/site_tests/network_WiFi_AttenuatedPerf/control.vht40_ch149 b/server/site_tests/network_WiFi_AttenuatedPerf/control.vht40_ch149
new file mode 100644
index 0000000..ee874d2
--- /dev/null
+++ b/server/site_tests/network_WiFi_AttenuatedPerf/control.vht40_ch149
@@ -0,0 +1,38 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+AUTHOR = 'wiley, pstew, quiche'
+NAME = 'network_WiFi_AttenuatedPerf.vht40_ch149'
+ATTRIBUTES = "suite:wifi_atten_perf"
+TIME = 'SHORT'
+TEST_TYPE = 'Server'
+DEPENDENCIES = 'wificell'
+
+DOC = """
+This test uses netperf to measure the maximal receiving and transmitting
+throughput on a DUT with an open VHT40 802.11ac network across multiple
+attenuation levels.
+"""
+
+
+from autotest_lib.server.cros.network import hostap_config
+
+
+def run(machine):
+    host = hosts.create_host(machine)
+    ap_config = hostap_config.HostapConfig(
+            channel=149,
+            mode=hostap_config.HostapConfig.MODE_11AC_PURE,
+            n_capabilities=[hostap_config.HostapConfig.N_CAPABILITY_HT40],
+            vht_channel_width=hostap_config.HostapConfig.VHT_CHANNEL_WIDTH_40)
+    attenuation_increment = 6
+    final_attenuation = 100
+    job.run_test('network_WiFi_AttenuatedPerf',
+                 tag=NAME.split('.')[1],
+                 host=host,
+                 raw_cmdline_args=args,
+                 additional_params=(ap_config, attenuation_increment, final_attenuation))
+
+
+parallel_simple(run, machines)
diff --git a/server/site_tests/network_WiFi_AttenuatedPerf/control.vht40_ch157 b/server/site_tests/network_WiFi_AttenuatedPerf/control.vht40_ch157
new file mode 100644
index 0000000..e45afcd
--- /dev/null
+++ b/server/site_tests/network_WiFi_AttenuatedPerf/control.vht40_ch157
@@ -0,0 +1,38 @@
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+AUTHOR = 'wiley, pstew, quiche'
+NAME = 'network_WiFi_AttenuatedPerf.vht40_ch157'
+ATTRIBUTES = "suite:wifi_atten_perf"
+TIME = 'SHORT'
+TEST_TYPE = 'Server'
+DEPENDENCIES = 'wificell'
+
+DOC = """
+This test uses netperf to measure the maximal receiving and transmitting
+throughput on a DUT with an open VHT40 802.11ac network across multiple
+attenuation levels.
+"""
+
+
+from autotest_lib.server.cros.network import hostap_config
+
+
+def run(machine):
+    host = hosts.create_host(machine)
+    ap_config = hostap_config.HostapConfig(
+            channel=157,
+            mode=hostap_config.HostapConfig.MODE_11AC_PURE,
+            n_capabilities=[hostap_config.HostapConfig.N_CAPABILITY_HT40],
+            vht_channel_width=hostap_config.HostapConfig.VHT_CHANNEL_WIDTH_40)
+    attenuation_increment = 6
+    final_attenuation = 100
+    job.run_test('network_WiFi_AttenuatedPerf',
+                 tag=NAME.split('.')[1],
+                 host=host,
+                 raw_cmdline_args=args,
+                 additional_params=(ap_config, attenuation_increment, final_attenuation))
+
+
+parallel_simple(run, machines)
diff --git a/server/site_tests/network_WiFi_AttenuatedPerf/control.vht80_ch042 b/server/site_tests/network_WiFi_AttenuatedPerf/control.vht80_ch042
new file mode 100644
index 0000000..42ff259
--- /dev/null
+++ b/server/site_tests/network_WiFi_AttenuatedPerf/control.vht80_ch042
@@ -0,0 +1,42 @@
+# Copyright 2014 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+AUTHOR = 'arowa'
+NAME = 'network_WiFi_AttenuatedPerf.vht80_ch042'
+ATTRIBUTES = "suite:wifi_atten_perf"
+TIME = 'SHORT'
+TEST_TYPE = 'Server'
+DEPENDENCIES = 'wificell'
+
+DOC = """
+This test uses netperf to measure the maximal receiving and transmitting
+throughput on a DUT with an open VHT80 802.11ac network across multiple
+attenuation levels.
+"""
+
+
+from autotest_lib.server.cros.network import hostap_config
+
+
+def run(machine):
+    host = hosts.create_host(machine)
+    n_caps = [hostap_config.HostapConfig.N_CAPABILITY_HT40_PLUS]
+    ac_caps = [hostap_config.HostapConfig.AC_CAPABILITY_SHORT_GI_80]
+    ac_mode = hostap_config.HostapConfig.MODE_11AC_PURE
+    channel_width_80_mhz = hostap_config.HostapConfig.VHT_CHANNEL_WIDTH_80
+    ap_config = hostap_config.HostapConfig(
+                    channel=44,
+                    mode=ac_mode,
+                    n_capabilities=n_caps,
+                    vht_channel_width=channel_width_80_mhz,
+                    vht_center_channel=42,
+                    ac_capabilities=ac_caps)
+    attenuation_increment = 6
+    final_attenuation = 100
+    job.run_test('network_WiFi_AttenuatedPerf', tag=NAME.split('.')[1],
+                 host=host, raw_cmdline_args=args,
+                 additional_params=(ap_config, attenuation_increment, final_attenuation))
+
+
+parallel_simple(run, machines)
diff --git a/server/site_tests/network_WiFi_AttenuatedPerf/control.vht80_ch155 b/server/site_tests/network_WiFi_AttenuatedPerf/control.vht80_ch155
new file mode 100644
index 0000000..c3c465a
--- /dev/null
+++ b/server/site_tests/network_WiFi_AttenuatedPerf/control.vht80_ch155
@@ -0,0 +1,42 @@
+# Copyright 2014 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+AUTHOR = 'arowa'
+NAME = 'network_WiFi_AttenuatedPerf.vht80_ch155'
+ATTRIBUTES = "suite:wifi_atten_perf"
+TIME = 'SHORT'
+TEST_TYPE = 'Server'
+DEPENDENCIES = 'wificell'
+
+DOC = """
+This test uses netperf to measure the maximal receiving and transmitting
+throughput on a DUT with an open VHT80 802.11ac network across multiple
+attenuation levels.
+"""
+
+
+from autotest_lib.server.cros.network import hostap_config
+
+
+def run(machine):
+    host = hosts.create_host(machine)
+    n_caps = [hostap_config.HostapConfig.N_CAPABILITY_HT40_PLUS]
+    ac_caps = [hostap_config.HostapConfig.AC_CAPABILITY_SHORT_GI_80]
+    ac_mode = hostap_config.HostapConfig.MODE_11AC_PURE
+    channel_width_80_mhz = hostap_config.HostapConfig.VHT_CHANNEL_WIDTH_80
+    ap_config = hostap_config.HostapConfig(
+                    channel=157,
+                    mode=ac_mode,
+                    n_capabilities=n_caps,
+                    vht_channel_width=channel_width_80_mhz,
+                    vht_center_channel=155,
+                    ac_capabilities=ac_caps)
+    attenuation_increment = 6
+    final_attenuation = 100
+    job.run_test('network_WiFi_AttenuatedPerf', tag=NAME.split('.')[1],
+                 host=host, raw_cmdline_args=args,
+                 additional_params=(ap_config, attenuation_increment, final_attenuation))
+
+
+parallel_simple(run, machines)
diff --git a/server/site_tests/network_WiFi_AttenuatedPerf/network_WiFi_AttenuatedPerf.py b/server/site_tests/network_WiFi_AttenuatedPerf/network_WiFi_AttenuatedPerf.py
index 34e14db..1bfbd6f 100644
--- a/server/site_tests/network_WiFi_AttenuatedPerf/network_WiFi_AttenuatedPerf.py
+++ b/server/site_tests/network_WiFi_AttenuatedPerf/network_WiFi_AttenuatedPerf.py
@@ -37,9 +37,6 @@
                        netperf_runner.NetperfConfig.TEST_TYPE_UDP_MAERTS),
     ]
 
-    ATTENUATION_STEP = 4
-    FINAL_ATTENUATION = 100
-
     TSV_OUTPUT_DIR = 'tsvs'
 
     DataPoint = collections.namedtuple('DataPoint',
@@ -54,8 +51,10 @@
         @param additional_params list of dicts describing router configs.
 
         """
-        self._ap_config = additional_params
+        self._ap_config = additional_params[0]
         self.series_note = None
+        self._attenuation_increment = additional_params[1]
+        self._final_attenuation = additional_params[2]
         if self.CMDLINE_SERIES_NOTE in commandline_args:
             self.series_note = commandline_args[self.CMDLINE_SERIES_NOTE]
 
@@ -81,8 +80,8 @@
                                                  ignore_failures=True)
         session.warmup_stations()
         start_atten = self.context.attenuator.get_minimal_total_attenuation()
-        for atten in range(start_atten, self.FINAL_ATTENUATION,
-                           self.ATTENUATION_STEP):
+        for atten in range(start_atten, self._final_attenuation,
+                           self._attenuation_increment):
             atten_tag = 'atten%03d' % atten
             self.context.attenuator.set_total_attenuation(
                     atten, self._ap_config.frequency)
@@ -147,7 +146,8 @@
 
         if max_atten is None:
             raise error.TestFail('Did not succeed at any atten level')
-        logging.info('Reached attenuation of: %d dB (signal %d)' % max_atten)
+        logging.info('Reached attenuation of: %d dB (signal %d)',
+                                max_atten[0], max_atten[1])
         self.write_perf_keyval({'ch%03d_max_atten' % self._ap_config.channel:
                                 max_atten[0]})
         self.write_perf_keyval({'ch%03d_min_signal' % self._ap_config.channel: