| #!/usr/bin/python |
| # |
| # 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. |
| |
| """Unit tests for server/cros/chaos_lib/chaos_base_test.py.""" |
| |
| """ To run this test, from the chroot: |
| $ ~/src/third_party/autotest/files/utils/unittest_suite.py |
| server.cros.chaos_lib.chaos_base_test_unittest --debug |
| """ |
| |
| import mox |
| |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.server.cros.chaos_ap_configurators import \ |
| ap_configurator_config |
| from autotest_lib.server.cros.chaos_lib import chaos_base_test |
| |
| |
| class WiFiChaosConnectionTestTest(mox.MoxTestBase): |
| """Unit tests for chaos_base_test.WiFiChaosConnectionTestTest.""" |
| |
| |
| class MockBaseClass(chaos_base_test.WiFiChaosConnectionTest): |
| """Mocks class of WiFiChaosConnectionTest.""" |
| |
| |
| # Mock out real objects in the base class __init__(). |
| def __init__(self, mox_obj): |
| self.host = mox_obj.CreateMockAnything() |
| self.capturer = mox_obj.CreateMockAnything() |
| self.connector = mox_obj.CreateMockAnything() |
| self.disconnector = mox_obj.CreateMockAnything() |
| self.outputdir = None |
| self.error_list = [] |
| self.ap_config = ap_configurator_config.APConfiguratorConfig() |
| |
| |
| def setUp(self): |
| """Default test setup.""" |
| super(WiFiChaosConnectionTestTest, self).setUp() |
| self.helper = self.MockBaseClass(self.mox) |
| self.ap_config = ap_configurator_config.APConfiguratorConfig() |
| |
| |
| def _setup_mode_test(self): |
| #self.helper.ap_config.mode_n = self.ap_config.MODE_N |
| self.mock_ap = self.mox.CreateMockAnything() |
| |
| |
| def testGetModeType_ReturnsNon80211n(self): |
| """Returns a non-802.11n mode on a given band.""" |
| self._setup_mode_test() |
| modes = [{'band': self.ap_config.BAND_2GHZ, |
| 'modes': [self.ap_config.MODE_G]}] |
| |
| self.mock_ap.get_supported_modes().AndReturn(modes) |
| self.mox.ReplayAll() |
| actual = self.helper._get_mode_type(self.mock_ap, |
| self.ap_config.BAND_2GHZ) |
| self.assertEquals(self.ap_config.MODE_G, actual) |
| |
| |
| def testGetModeType_ReturnsNoneForBandMismatch(self): |
| """Returns None if AP does not support the given band.""" |
| self._setup_mode_test() |
| modes = [{'band': self.ap_config.BAND_2GHZ, |
| 'modes': [self.ap_config.MODE_G]}] |
| |
| self.mock_ap.get_supported_modes().AndReturn(modes) |
| self.mox.ReplayAll() |
| actual = self.helper._get_mode_type(self.mock_ap, |
| self.ap_config.BAND_5GHZ) |
| self.assertEquals(None, actual) |
| |
| |
| def testGetModeType_ReturnsNoneFor80211n(self): |
| """Returns None if AP only supports 802.11n on the given band.""" |
| self._setup_mode_test() |
| modes = [{'band': self.ap_config.BAND_2GHZ, |
| 'modes': [self.ap_config.MODE_N]}] |
| |
| self.mock_ap.get_supported_modes().AndReturn(modes) |
| self.mox.ReplayAll() |
| actual = self.helper._get_mode_type(self.mock_ap, |
| self.ap_config.BAND_2GHZ) |
| self.assertEquals(None, actual) |
| |
| |
| def testCheckTestPass(self): |
| """Verify no exception is thrown when error_list is empty.""" |
| try: |
| self.helper.check_test_error() |
| except (error.TestFail, error.TestError) as e: |
| self.fail('Should NOT raise an error here! %r' % e) |
| |
| |
| def testCheckTestFail(self): |
| """Verify TestFail is raised if error_list contains a failure.""" |
| ap_info = {'failed_iterations': [{'error': 'Failed to connect to blah', |
| 'try': 0}]} |
| self.helper.error_list = [ap_info] |
| self.assertRaises(error.TestFail, self.helper.check_test_error) |
| |
| |
| def testCheckTestError(self): |
| """Verify TestError is raised if error_list contains a config error.""" |
| ap_info = {'failed_iterations': |
| [{'error': self.helper.FAILED_CONFIG_MSG, |
| 'try': 0}]} |
| self.helper.error_list = [ap_info] |
| self.assertRaises(error.TestError, self.helper.check_test_error) |