blob: 010c69b6bbcfdbecf3e4ffa34fc24cd3641cfbe7 [file] [log] [blame]
# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import unittest
from autotest_lib.client.common_lib.cros.network import iw_runner
class IwRunnerTest(unittest.TestCase):
"""Unit test for the IWRunner object."""
class host_cmd(object):
"""Mock host command class."""
def __init__(self, stdout, stderr, exit_status):
self._stdout = stdout
self._stderr = stderr
self._exit_status = exit_status
@property
def stdout(self):
"""Returns stdout."""
return self._stdout
@property
def stderr(self):
"""Returns stderr."""
return self._stderr
@property
def exit_status(self):
"""Returns the exit status."""
return self._exit_status
class host(object):
"""Mock host class."""
def __init__(self, host_cmd):
self._host_cmd = IwRunnerTest.host_cmd(host_cmd, 1.0, 0)
def run(self, cmd, ignore_status=False):
"""Returns the mocked output.
@param cmd: a stub input ignore
@param ignore_status: a stub input ignore
"""
return self._host_cmd
HT20 = str('BSS aa:aa:aa:aa:aa:aa (on wlan0)\n'
' freq: 2412\n'
' SSID: support_ht20\n'
' HT operation:\n'
' * secondary channel offset: no secondary\n')
HT20_IW_BSS = iw_runner.IwBss('aa:aa:aa:aa:aa:aa', 2412,
'support_ht20', iw_runner.SECURITY_OPEN,
iw_runner.HT20)
HT20_2 = str('BSS 11:11:11:11:11:11 (on wlan0)\n'
' freq: 2462\n'
' SSID: support_ht20\n'
' WPA: * Version: 1\n'
' HT operation:\n'
' * secondary channel offset: below\n')
HT20_2_IW_BSS = iw_runner.IwBss('11:11:11:11:11:11', 2462,
'support_ht20', iw_runner.SECURITY_WPA,
iw_runner.HT40_BELOW)
HT40_ABOVE = str('BSS bb:bb:bb:bb:bb:bb (on wlan0)\n'
' freq: 5180\n'
' SSID: support_ht40_above\n'
' RSN: * Version: 1\n'
' HT operation:\n'
' * secondary channel offset: above\n')
HT40_ABOVE_IW_BSS = iw_runner.IwBss('bb:bb:bb:bb:bb:bb', 5180,
'support_ht40_above',
iw_runner.SECURITY_WPA2,
iw_runner.HT40_ABOVE)
HT40_BELOW = str('BSS cc:cc:cc:cc:cc:cc (on wlan0)\n'
' freq: 2462\n'
' SSID: support_ht40_below\n'
' RSN: * Version: 1\n'
' WPA: * Version: 1\n'
' HT operation:\n'
' * secondary channel offset: below\n')
HT40_BELOW_IW_BSS = iw_runner.IwBss('cc:cc:cc:cc:cc:cc', 2462,
'support_ht40_below',
iw_runner.SECURITY_MIXED,
iw_runner.HT40_BELOW)
NO_HT = str('BSS dd:dd:dd:dd:dd:dd (on wlan0)\n'
' freq: 2412\n'
' SSID: no_ht_support\n')
NO_HT_IW_BSS = iw_runner.IwBss('dd:dd:dd:dd:dd:dd', 2412,
'no_ht_support', iw_runner.SECURITY_OPEN,
None)
HIDDEN_SSID = str('BSS ee:ee:ee:ee:ee:ee (on wlan0)\n'
' freq: 2462\n'
' SSID: \n'
' HT operation:\n'
' * secondary channel offset: no secondary\n')
HIDDEN_SSID_IW_BSS = iw_runner.IwBss('ee:ee:ee:ee:ee:ee', 2462,
None, iw_runner.SECURITY_OPEN,
iw_runner.HT20)
def verify_values(self, iw_bss_1, iw_bss_2):
"""Checks all of the IWBss values
@param iw_bss_1: an IWBss object
@param iw_bss_2: an IWBss object
"""
self.assertEquals(iw_bss_1.bss, iw_bss_2[0].bss)
self.assertEquals(iw_bss_1.ssid, iw_bss_2[0].ssid)
self.assertEquals(iw_bss_1.frequency, iw_bss_2[0].frequency)
self.assertEquals(iw_bss_1.security, iw_bss_2[0].security)
self.assertEquals(iw_bss_1.ht, iw_bss_2[0].ht)
def search_by_bss(self, scan_output, test_iw_bss):
"""
@param scan_output: the output of the scan as a string
@param test_iw_bss: an IWBss object
Uses the runner to search for a network by bss.
"""
host = self.host(scan_output)
runner = iw_runner.IwRunner(remote_host=host)
network = runner.wait_for_scan_result('wlan0', bss=test_iw_bss.bss)
self.verify_values(test_iw_bss, network)
def test_find_first(self):
"""Test with the first item in the list."""
scan_output = self.HT20 + self.HT40_ABOVE
self.search_by_bss(scan_output, self.HT20_IW_BSS)
def test_find_last(self):
"""Test with the last item in the list."""
scan_output = self.HT40_ABOVE + self.HT20
self.search_by_bss(scan_output, self.HT20_IW_BSS)
def test_find_middle(self):
"""Test with the middle item in the list."""
scan_output = self.HT40_ABOVE + self.HT20 + self.NO_HT
self.search_by_bss(scan_output, self.HT20_IW_BSS)
def test_ht40_above(self):
"""Test with a HT40+ network."""
scan_output = self.HT20 + self.HT40_ABOVE + self.NO_HT
self.search_by_bss(scan_output, self.HT40_ABOVE_IW_BSS)
def test_ht40_below(self):
"""Test with a HT40- network."""
scan_output = self.HT20 + self.HT40_BELOW + self.NO_HT
self.search_by_bss(scan_output, self.HT40_BELOW_IW_BSS)
def test_no_ht(self):
"""Test with a network that doesn't have ht."""
scan_output = self.HT20 + self.NO_HT + self.HT40_ABOVE
self.search_by_bss(scan_output, self.NO_HT_IW_BSS)
def test_hidden_ssid(self):
"""Test with a network with a hidden ssid."""
scan_output = self.HT20 + self.HIDDEN_SSID + self.NO_HT
self.search_by_bss(scan_output, self.HIDDEN_SSID_IW_BSS)
def test_multiple_ssids(self):
"""Test with multiple networks with the same ssids."""
return
scan_output = self.HT40_ABOVE + self.HT20 + self.NO_HT + self.HT20_2
host = self.host(scan_output)
runner = iw_runner.IwRunner(remote_host=host)
networks = runner.wait_for_scan_result('wlan 0',
ssid=self.HT20_2_IW_BSS.ssid)
for iw_bss_1, iw_bss_2 in zip([self.HT20_IW_BSS, self.HT20_2_IW_BSS],
networks):
self.verify_values(iw_bss_1, iw_bss_2)