1c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal# Use of this source code is governed by a BSD-style license that can be
3c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal# found in the LICENSE file.
4c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal
5886ce0247b2f88cfd1fd13632890046dd308589bmukesh agrawalimport errno
64cc12447198875eed30c7b8cd2dd92d48df77d99mukesh agrawalimport logging
7c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawalimport os
886741ed516aaad5235335a599e880f5c4451f2bdChristopher Wileyimport time
9c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal
10c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawalfrom autotest_lib.client.bin import test
1112db329526658a402b84a25f65a1711039ebc76eChung-yih Wangfrom autotest_lib.client.common_lib import error, utils
1268c95cf4c39180a0ae8474af72a22e92665764a2mukesh agrawalfrom autotest_lib.client.cros.networking import shill_context
131f89fd2f9f2010e732a87ed3c8f7f25777862c59Christopher Wileyfrom autotest_lib.client.cros.networking import shill_proxy
14c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal
15c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawalclass network_DefaultProfileCreation(test.test):
16c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal    """The Default Profile Creation class.
17c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal
18c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal    Wipe the default profile, start shill, and check that a default
19c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal    profile has been created.
20c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal
21c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal    Test that the default profile contains default values for properties
22c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal    that should have them.
23c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal
24c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal    """
25c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal    DEFAULT_PROFILE_PATH = '/var/cache/shill/default.profile'
26c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal    EXPECTED_SETTINGS = [
27c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal        # From DefaultProfile::LoadManagerProperties
28c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal        'CheckPortalList=ethernet,wifi,cellular',
29c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal        'IgnoredDNSSearchPaths=gateway.2wire.net',
30c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal        'LinkMonitorTechnologies=wifi',
31c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal        'PortalURL=http://www.gstatic.com/generate_204',
32c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal        'PortalCheckInterval=30',
33c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal        ]
3486741ed516aaad5235335a599e880f5c4451f2bdChristopher Wiley    PROFILE_LOAD_TIMEOUT_SECONDS = 5
35c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal    version = 1
36c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal
37c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal
38c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal    def run_once(self):
39c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal        """Test main loop."""
4012db329526658a402b84a25f65a1711039ebc76eChung-yih Wang        # TODO: Remove the following block once the bug(crbug.com/594336)
4112db329526658a402b84a25f65a1711039ebc76eChung-yih Wang        # is fixed.
4212db329526658a402b84a25f65a1711039ebc76eChung-yih Wang        boards_to_skip = ['cyan-cheets']
4312db329526658a402b84a25f65a1711039ebc76eChung-yih Wang        dut_board = utils.get_current_board()
4412db329526658a402b84a25f65a1711039ebc76eChung-yih Wang        if dut_board in boards_to_skip:
4512db329526658a402b84a25f65a1711039ebc76eChung-yih Wang            logging.info("Skipping test run on this board.")
4612db329526658a402b84a25f65a1711039ebc76eChung-yih Wang            return
4712db329526658a402b84a25f65a1711039ebc76eChung-yih Wang
4868c95cf4c39180a0ae8474af72a22e92665764a2mukesh agrawal        with shill_context.stopped_shill():
4968c95cf4c39180a0ae8474af72a22e92665764a2mukesh agrawal            try:
5068c95cf4c39180a0ae8474af72a22e92665764a2mukesh agrawal                os.remove(self.DEFAULT_PROFILE_PATH)
5168c95cf4c39180a0ae8474af72a22e92665764a2mukesh agrawal            except OSError as e:
5268c95cf4c39180a0ae8474af72a22e92665764a2mukesh agrawal                if e.errno != errno.ENOENT:
5368c95cf4c39180a0ae8474af72a22e92665764a2mukesh agrawal                    raise e
5486741ed516aaad5235335a599e880f5c4451f2bdChristopher Wiley        shill = shill_proxy.ShillProxy.get_proxy()
5586741ed516aaad5235335a599e880f5c4451f2bdChristopher Wiley        start_time = time.time()
564d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart        profile = None
5786741ed516aaad5235335a599e880f5c4451f2bdChristopher Wiley        while time.time() - start_time < self.PROFILE_LOAD_TIMEOUT_SECONDS:
5886741ed516aaad5235335a599e880f5c4451f2bdChristopher Wiley            if shill.get_profiles():
594d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart                with open(self.DEFAULT_PROFILE_PATH) as f:
604d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart                    profile = f.read()
614d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart                    if profile:
624d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart                        break
634d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart
644d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart            time.sleep(1)
6586741ed516aaad5235335a599e880f5c4451f2bdChristopher Wiley        else:
66886ce0247b2f88cfd1fd13632890046dd308589bmukesh agrawal            if profile is None:
674d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart                raise error.TestFail('shill should load a profile within '
684d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart                                     '%d seconds.' %
694d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart                                     self.PROFILE_LOAD_TIMEOUT_SECONDS)
704d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart            else:
714d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart                raise error.TestFail('shill profile is still empty after '
724d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart                                     '%d seconds.' %
734d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart                                     self.PROFILE_LOAD_TIMEOUT_SECONDS)
74c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal
754d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart        logging.info('Profile contents after %d seconds:\%s',
764d02b37c58e11de374a1ab42466593b14860a2a5Paul Stewart                     time.time() - start_time, profile)
77c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal        for setting in self.EXPECTED_SETTINGS:
78c4f34095f1e7bed8bd526eec8a13fa395f801d83mukesh agrawal            if setting not in profile:
794cc12447198875eed30c7b8cd2dd92d48df77d99mukesh agrawal                logging.error('Did not find setting %s', setting)
804cc12447198875eed30c7b8cd2dd92d48df77d99mukesh agrawal                logging.error('Full profile contents are:\n%s', profile)
814cc12447198875eed30c7b8cd2dd92d48df77d99mukesh agrawal                raise error.TestFail('Missing setting(s) in default profile.')
82