# 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/ap_configurators/ap_spec.py.
"""
import unittest
from autotest_lib.server.cros.ap_configurators import \
ap_spec
class APSpecTest(unittest.TestCase):
"""Unit test for the ap_spec object."""
def test_default_creation(self):
"""Test building a default ap_spec object."""
spec = ap_spec.APSpec()
self.assertEquals(spec.visible, True)
self.assertEquals(spec.security, ap_spec.DEFAULT_SECURITY_TYPE)
self.assertEquals(spec.band, ap_spec.DEFAULT_BAND)
self.assertEquals(spec.mode, ap_spec.DEFAULT_2GHZ_MODE)
self.assertEquals(spec.channel, ap_spec.DEFAULT_2GHZ_CHANNEL)
self.assertIsNone(spec.password)
def test_only_set_band_2ghz(self):
"""Test setting only the band to 2GHz."""
spec = ap_spec.APSpec(band=ap_spec.BAND_2GHZ)
self.assertEquals(spec.channel, ap_spec.DEFAULT_2GHZ_CHANNEL)
self.assertEquals(spec.mode, ap_spec.DEFAULT_2GHZ_MODE)
def test_only_set_band_5ghz(self):
"""Test setting only the band to 5GHz."""
spec = ap_spec.APSpec(band=ap_spec.BAND_5GHZ)
self.assertEquals(spec.channel, ap_spec.DEFAULT_5GHZ_CHANNEL)
self.assertEquals(spec.mode, ap_spec.DEFAULT_5GHZ_MODE)
def test_only_set_mode_2ghz(self):
"""Test setting only a 2GHz mode."""
spec = ap_spec.APSpec(mode=ap_spec.MODE_B)
self.assertEquals(spec.band, ap_spec.DEFAULT_BAND)
self.assertEquals(spec.channel, ap_spec.DEFAULT_2GHZ_CHANNEL)
def test_only_set_mode_5ghz(self):
"""Test setting only a 5GHz mode."""
spec = ap_spec.APSpec(mode=ap_spec.MODE_A)
self.assertEquals(spec.band, ap_spec.BAND_5GHZ)
self.assertEquals(spec.channel, ap_spec.DEFAULT_5GHZ_CHANNEL)
def test_only_set_mode_n(self):
"""Test setting the mode to N."""
spec = ap_spec.APSpec(mode=ap_spec.MODE_N)
self.assertEquals(spec.band, ap_spec.DEFAULT_BAND)
self.assertEquals(spec.channel, ap_spec.DEFAULT_2GHZ_CHANNEL)
def test_only_set_channel_2ghz(self):
"""Test setting only a 2GHz channel."""
spec = ap_spec.APSpec(channel=ap_spec.DEFAULT_2GHZ_CHANNEL)
self.assertEquals(spec.band, ap_spec.BAND_2GHZ)
self.assertEquals(spec.mode, ap_spec.DEFAULT_2GHZ_MODE)
def test_only_set_channel_5ghz(self):
"""Test setting only a 5GHz channel."""
spec = ap_spec.APSpec(channel=ap_spec.DEFAULT_5GHZ_CHANNEL)
self.assertEquals(spec.band, ap_spec.BAND_5GHZ)
self.assertEquals(spec.mode, ap_spec.DEFAULT_5GHZ_MODE)
def test_set_band_and_mode_2ghz(self):
"""Test setting the band and mode to valid 2GHz values."""
spec = ap_spec.APSpec(band=ap_spec.BAND_2GHZ, mode=ap_spec.MODE_G)
self.assertEquals(spec.channel, ap_spec.DEFAULT_2GHZ_CHANNEL)
def test_set_band_and_mode_5ghz(self):
"""Test setting the band and mode to valid 5GHz values."""
spec = ap_spec.APSpec(band=ap_spec.BAND_5GHZ, mode=ap_spec.MODE_A)
self.assertEquals(spec.channel, ap_spec.DEFAULT_5GHZ_CHANNEL)
def test_set_band_mode_and_channel_2ghz(self):
"""Test setting the band and channel to valid 2GHz values."""
spec = ap_spec.APSpec(band=ap_spec.BAND_2GHZ, mode=ap_spec.MODE_N,
channel=ap_spec.DEFAULT_2GHZ_CHANNEL)
self.assertNotEquals(spec.mode, ap_spec.DEFAULT_5GHZ_MODE)
def test_set_band_mode_and_channel_5ghz(self):
"""Test setting the band and channel to valid 5GHz value."""
spec = ap_spec.APSpec(band=ap_spec.BAND_5GHZ, mode=ap_spec.MODE_N,
channel=ap_spec.DEFAULT_5GHZ_CHANNEL)
self.assertNotEquals(spec.mode, ap_spec.DEFAULT_2GHZ_MODE)
def test_set_security_psk_default(self):
"""Test setting security to WPAPSK."""
spec = ap_spec.APSpec(security=ap_spec.SECURITY_TYPE_WPAPSK)
self.assertEquals(spec.visible, True)
self.assertEquals(spec.security, ap_spec.SECURITY_TYPE_WPAPSK)
self.assertEquals(spec.band, ap_spec.DEFAULT_BAND)
self.assertEquals(spec.mode, ap_spec.DEFAULT_2GHZ_MODE)
self.assertEquals(spec.channel, ap_spec.DEFAULT_2GHZ_CHANNEL)
def test_set_security_and_visibility(self):
"""Test setting visibility to hidden and security to WPAPSK."""
spec = ap_spec.APSpec(visible=False,
security=ap_spec.SECURITY_TYPE_WPAPSK)
self.assertEquals(spec.visible, False)
self.assertEquals(spec.security, ap_spec.SECURITY_TYPE_WPAPSK)
self.assertEquals(spec.band, ap_spec.DEFAULT_BAND)
self.assertEquals(spec.mode, ap_spec.DEFAULT_2GHZ_MODE)
self.assertEquals(spec.channel, ap_spec.DEFAULT_2GHZ_CHANNEL)
self.assertIsNotNone(spec.password)
def test_invalid_mode_and_band(self):
"""Test setting mode and band to non-compatible settings."""
self.assertRaises(ValueError, ap_spec.APSpec,
band=ap_spec.BAND_2GHZ, mode=ap_spec.MODE_A)
def test_invalid_channel_and_band(self):
"""Test setting channel and band to non-compatible settings."""
self.assertRaises(ValueError, ap_spec.APSpec,
band=ap_spec.BAND_5GHZ, channel=1)
def test_invalid_mode_and_channel(self):
"""Test setting mode and channel to non-compatible settings."""
self.assertRaises(ValueError, ap_spec.APSpec,
mode=ap_spec.MODE_G, channel=153)
def test_invalid_values(self):
"""Test passing invalid values to an ap_spec object."""
self.assertRaises(ValueError, ap_spec.APSpec, band='foo')
self.assertRaises(ValueError, ap_spec.APSpec, mode=0x3)
self.assertRaises(ValueError, ap_spec.APSpec, channel=84)
self.assertRaises(ValueError, ap_spec.APSpec, security='foo')
def test_mode_string_generation(self):
"""Test a set of mode constants a generates a human readable string."""
mode = ap_spec.mode_string_for_mode(ap_spec.MODE_B | ap_spec.MODE_G)
self.assertEquals('b/g', mode)
mode = ap_spec.mode_string_for_mode(ap_spec.MODE_B | ap_spec.MODE_G |
ap_spec.MODE_N)
self.assertEquals('b/g/n', mode)
mode = ap_spec.mode_string_for_mode(ap_spec.MODE_A)
self.assertEquals('a', mode)
def test_mode_n_on_both_bands(self):
"""Test that band is maintained when setting a mode N spec."""
spec = ap_spec.APSpec(band=ap_spec.BAND_5GHZ, mode=ap_spec.MODE_N)
self.assertEquals(spec.band, ap_spec.BAND_5GHZ)
self.assertEquals(spec.mode, ap_spec.MODE_N)
spec = ap_spec.APSpec(band=ap_spec.BAND_2GHZ, mode=ap_spec.MODE_N)
self.assertEquals(spec.band, ap_spec.BAND_2GHZ)
self.assertEquals(spec.mode, ap_spec.MODE_N)
if __name__ == '__main__':
unittest.main()