blob: be91859473b7a3622a7ea0cf2275d6a6623054fd [file] [log] [blame]
#!/usr/bin/python -S
"""Tests for utils.py."""
import collections
import os
import utils
from wvtest import wvtest
_VALIDATION_PASS = (
{},
{'band': '5'},
{'width': '40'},
{'autotype': 'ANY'},
{'protocols': ('a', 'b', 'ac')},
{'encryption': 'NONE'},
)
_VALIDATION_FAIL = (
# Invalid bands
{'band': 2.4},
{'band': '2.5'},
{'band': ''},
# Specific invalid combinations
{'band': '2.4', 'width': '80'},
{'band': '2.4', 'autotype': 'DFS'},
{'band': '5', 'autotype': 'OVERLAP'},
# Invalid protocols
{'protocols': set('abc')},
{'protocols': set()},
# Invalid width
{'width': '25'},
# Invalid width/protocols
{'width': '40', 'protocols': set('abg')},
{'width': '80', 'protocols': set('abgn')},
)
_DEFAULTS = collections.OrderedDict((('band', '2.4'), ('width', '20'),
('autotype', 'NONDFS'),
('protocols', ('a', 'b', 'g', 'n', 'ac')),
('encryption', 'WPA2_PSK_AES')))
def modify_defaults(**kwargs):
result = collections.OrderedDict(_DEFAULTS)
result.update(kwargs)
return result
# pylint: disable=protected-access
@wvtest.wvtest
def validate_set_options_test():
"""Tests utils.validate_set_options."""
os.environ['WIFI_PSK'] = 'NOT_USED'
for case in _VALIDATION_PASS:
try:
utils.validate_set_wifi_options(*modify_defaults(**case).values())
except utils.BinWifiException:
wvtest.WVFAIL('Test failed.')
for case in _VALIDATION_FAIL:
wvtest.WVEXCEPT(
utils.BinWifiException, utils.validate_set_wifi_options,
*modify_defaults(**case).values())
# Test failure when WIFI_PSK is missing
del os.environ['WIFI_PSK']
wvtest.WVEXCEPT(
utils.BinWifiException, utils.validate_set_wifi_options,
*_DEFAULTS.values())
wvtest.WVEXCEPT(
utils.BinWifiException, utils.validate_set_wifi_options,
*modify_defaults(encryption='WEP').values())
@wvtest.wvtest
def increment_mac_address_test():
wvtest.WVPASSEQ('12:34:56:78:91',
utils.increment_mac_address('12:34:56:78:90'))
wvtest.WVPASSEQ('12:34:56:79:00',
utils.increment_mac_address('12:34:56:78:FF'))
@wvtest.wvtest
def sanitize_ssid_test():
"""Tests utils.sanitize_ssid."""
wvtest.WVPASSEQ('foo', utils.sanitize_ssid('foo'))
wvtest.WVPASSEQ('foo', utils.sanitize_ssid('foo\n\0'))
hebrew = ('\xd7\xa0\xd6\xb0\xd7\xa7\xd6\xbb\xd7\x93\xd6\xbc\xd7\x95\xd6\xb9'
'\xd7\xaa')
unicode_control_char = u'\u200e'.encode('utf-8')
non_utf8 = '\x97'
wvtest.WVPASSEQ(hebrew,
utils.sanitize_ssid(''.join((hebrew, unicode_control_char,
non_utf8))))
@wvtest.wvtest
def validate_and_sanitize_psk_test():
"""Tests utils.validate_and_sanitize_psk."""
# Too short.
wvtest.WVEXCEPT(utils.BinWifiException,
utils.validate_and_sanitize_psk, 'foo')
# Too long.
wvtest.WVEXCEPT(utils.BinWifiException,
utils.validate_and_sanitize_psk, '0' * 65)
# Not ASCII.
wvtest.WVEXCEPT(utils.BinWifiException,
utils.validate_and_sanitize_psk, 'abcdefgh\xd7\xa0')
# Not hex.
wvtest.WVEXCEPT(utils.BinWifiException,
utils.validate_and_sanitize_psk, 'g' * 64)
# Too short after control characters removed.
wvtest.WVEXCEPT(utils.BinWifiException,
utils.validate_and_sanitize_psk, 'foobar\n\0')
wvtest.WVPASSEQ('foobarba', utils.validate_and_sanitize_psk('foobarba\n\0'))
wvtest.WVPASSEQ('0' * 64, utils.validate_and_sanitize_psk('0' * 64))
wvtest.WVPASSEQ('g' * 63, utils.validate_and_sanitize_psk('g' * 63))
if __name__ == '__main__':
wvtest.wvtest_main()