• 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 logging
6
7from autotest_lib.client.bin import test
8from autotest_lib.client.common_lib import error
9from autotest_lib.client.common_lib.cros.network import interface
10from autotest_lib.client.cros import shill_temporary_profile
11from autotest_lib.client.cros.networking import wifi_proxy
12
13class network_BasicProfileProperties(test.test):
14    """Test that shill's DBus properties for profiles work."""
15
16    version = 1
17
18    PROFILE_NAME = 'test'
19    PROFILE_PROPERTY_NAME = 'Name'
20    PROFILE_PROPERTY_ENTRIES = 'Entries'
21
22
23    @staticmethod
24    def get_field_from_properties(properties, field):
25        """Get a field from a dictionary of properties.
26
27        Raises an exception on failure.
28
29        @param properties dict of properties (presumably from some
30                DBus object).
31        @param field string key to search for in |properties|.
32        @return value of properties[field].
33
34        """
35        if not field in properties:
36            raise error.TestFail('No %s field in properties %r?' %
37                                 (field, properties))
38
39        return properties[field]
40
41
42    def run_once(self):
43        """Test body."""
44        shill = wifi_proxy.WifiProxy.get_proxy()
45        with shill_temporary_profile.ShillTemporaryProfile(
46                shill.manager, profile_name=self.PROFILE_NAME):
47            profiles = shill.get_profiles()
48            logging.info('Got profiles %r', profiles)
49            # The last profile should be the one we just created.
50            profile = profiles[-1]
51            profile_properties = shill.dbus2primitive(
52                    profile.GetProperties(utf8_strings=True))
53            logging.debug('Profile properties: %r.', profile_properties)
54            profile_name = self.get_field_from_properties(
55                    profile_properties, self.PROFILE_PROPERTY_NAME)
56            if profile_name != self.PROFILE_NAME:
57                raise error.TestFail('Found unexpected top profile with name '
58                                     '%r.' % profile_name)
59
60            entries = shill.dbus2primitive(self.get_field_from_properties(
61                    profile_properties, self.PROFILE_PROPERTY_ENTRIES))
62            logging.info('Found entries: %r', entries)
63            ethernet_if = interface.Interface.get_connected_ethernet_interface()
64            mac = ethernet_if.mac_address.replace(':', '').lower()
65            ethernet_entry_key = 'ethernet_%s' % mac
66            if not ethernet_entry_key in entries:
67                raise error.TestFail('Missing ethernet entry %s from profile.' %
68                                     ethernet_entry_key)
69
70            entry = profile.GetEntry(ethernet_entry_key)
71