# 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()