Home | History | Annotate | Download | only in network_DefaultProfileCreation
      1 # Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import errno
      6 import logging
      7 import os
      8 import time
      9 
     10 from autotest_lib.client.bin import test
     11 from autotest_lib.client.common_lib import error, utils
     12 from autotest_lib.client.cros.networking import shill_context
     13 from autotest_lib.client.cros.networking import shill_proxy
     14 
     15 class network_DefaultProfileCreation(test.test):
     16     """The Default Profile Creation class.
     17 
     18     Wipe the default profile, start shill, and check that a default
     19     profile has been created.
     20 
     21     Test that the default profile contains default values for properties
     22     that should have them.
     23 
     24     """
     25     DEFAULT_PROFILE_PATH = '/var/cache/shill/default.profile'
     26     EXPECTED_SETTINGS = [
     27         # From DefaultProfile::LoadManagerProperties
     28         'CheckPortalList=ethernet,wifi,cellular',
     29         'IgnoredDNSSearchPaths=gateway.2wire.net',
     30         'LinkMonitorTechnologies=wifi',
     31         'PortalURL=http://www.gstatic.com/generate_204',
     32         'PortalCheckInterval=30',
     33         ]
     34     PROFILE_LOAD_TIMEOUT_SECONDS = 5
     35     version = 1
     36 
     37 
     38     def run_once(self):
     39         """Test main loop."""
     40         # TODO: Remove the following block once the bug(crbug.com/594336)
     41         # is fixed.
     42         boards_to_skip = ['cyan-cheets']
     43         dut_board = utils.get_current_board()
     44         if dut_board in boards_to_skip:
     45             logging.info("Skipping test run on this board.")
     46             return
     47 
     48         with shill_context.stopped_shill():
     49             try:
     50                 os.remove(self.DEFAULT_PROFILE_PATH)
     51             except OSError as e:
     52                 if e.errno != errno.ENOENT:
     53                     raise e
     54         shill = shill_proxy.ShillProxy.get_proxy()
     55         start_time = time.time()
     56         profile = None
     57         while time.time() - start_time < self.PROFILE_LOAD_TIMEOUT_SECONDS:
     58             if shill.get_profiles():
     59                 with open(self.DEFAULT_PROFILE_PATH) as f:
     60                     profile = f.read()
     61                     if profile:
     62                         break
     63 
     64             time.sleep(1)
     65         else:
     66             if profile is None:
     67                 raise error.TestFail('shill should load a profile within '
     68                                      '%d seconds.' %
     69                                      self.PROFILE_LOAD_TIMEOUT_SECONDS)
     70             else:
     71                 raise error.TestFail('shill profile is still empty after '
     72                                      '%d seconds.' %
     73                                      self.PROFILE_LOAD_TIMEOUT_SECONDS)
     74 
     75         logging.info('Profile contents after %d seconds:\%s',
     76                      time.time() - start_time, profile)
     77         for setting in self.EXPECTED_SETTINGS:
     78             if setting not in profile:
     79                 logging.error('Did not find setting %s', setting)
     80                 logging.error('Full profile contents are:\n%s', profile)
     81                 raise error.TestFail('Missing setting(s) in default profile.')
     82