• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
5import errno
6import logging
7import os
8import time
9
10from autotest_lib.client.bin import test
11from autotest_lib.client.common_lib import error
12from autotest_lib.client.cros.networking import shill_context
13from autotest_lib.client.cros.networking import shill_proxy
14
15class 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        with shill_context.stopped_shill():
41            try:
42                os.remove(self.DEFAULT_PROFILE_PATH)
43            except OSError as e:
44                if e.errno != errno.ENOENT:
45                    raise e
46        shill = shill_proxy.ShillProxy.get_proxy()
47        start_time = time.time()
48        profile = None
49        while time.time() - start_time < self.PROFILE_LOAD_TIMEOUT_SECONDS:
50            if shill.get_profiles():
51                with open(self.DEFAULT_PROFILE_PATH) as f:
52                    profile = f.read()
53                    if profile:
54                        break
55
56            time.sleep(1)
57        else:
58            if profile is None:
59                raise error.TestFail('shill should load a profile within '
60                                     '%d seconds.' %
61                                     self.PROFILE_LOAD_TIMEOUT_SECONDS)
62            else:
63                raise error.TestFail('shill profile is still empty after '
64                                     '%d seconds.' %
65                                     self.PROFILE_LOAD_TIMEOUT_SECONDS)
66
67        logging.info('Profile contents after %d seconds:\%s',
68                     time.time() - start_time, profile)
69        for setting in self.EXPECTED_SETTINGS:
70            if setting not in profile:
71                logging.error('Did not find setting %s', setting)
72                logging.error('Full profile contents are:\n%s', profile)
73                raise error.TestFail('Missing setting(s) in default profile.')
74