#!/usr/bin/python # # Copyright 2015 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import unittest import common from autotest_lib.client.common_lib.cros import dbus_send EXAMPLE_SHILL_GET_PROPERTIES_OUTPUT = \ """method return sender=:1.12 -> dest=:1.37 reply_serial=2 array [ dict entry( string "ActiveProfile" variant string "/profile/default" ) dict entry( string "ArpGateway" variant boolean true ) dict entry( string "AvailableTechnologies" variant array [ string "ethernet" ] ) dict entry( string "CheckPortalList" variant string "''" ) dict entry( string "ConnectedTechnologies" variant array [ string "ethernet" ] ) dict entry( string "ConnectionState" variant string "online" ) dict entry( string "Country" variant string "" ) dict entry( string "DefaultService" variant object path "/service/2" ) dict entry( string "DefaultTechnology" variant string "ethernet" ) dict entry( string "Devices" variant array [ object path "/device/eth0" object path "/device/eth1" ] ) dict entry( string "DisableWiFiVHT" variant boolean false ) dict entry( string "EnabledTechnologies" variant array [ string "ethernet" ] ) dict entry( string "HostName" variant string "" ) dict entry( string "IgnoredDNSSearchPaths" variant string "gateway.2wire.net" ) dict entry( string "LinkMonitorTechnologies" variant string "wifi" ) dict entry( string "NoAutoConnectTechnologies" variant string "" ) dict entry( string "OfflineMode" variant boolean false ) dict entry( string "PortalCheckInterval" variant int32 30 ) dict entry( string "PortalURL" variant string "http://www.gstatic.com/generate_204" ) dict entry( string "Profiles" variant array [ object path "/profile/default" ] ) dict entry( string "ProhibitedTechnologies" variant string "" ) dict entry( string "ServiceCompleteList" variant array [ object path "/service/2" object path "/service/1" object path "/service/0" ] ) dict entry( string "ServiceWatchList" variant array [ object path "/service/2" ] ) dict entry( string "Services" variant array [ object path "/service/2" ] ) dict entry( string "State" variant string "online" ) dict entry( string "UninitializedTechnologies" variant array [ ] ) dict entry( string "WakeOnLanEnabled" variant boolean true ) ] """ PARSED_SHILL_GET_PROPERTIES_OUTPUT = { 'ActiveProfile': '/profile/default', 'ArpGateway': True, 'AvailableTechnologies': ['ethernet'], 'CheckPortalList': "''", 'ConnectedTechnologies': ['ethernet'], 'ConnectionState': 'online', 'Country': '', 'DefaultService': '/service/2', 'DefaultTechnology': 'ethernet', 'Devices': ['/device/eth0', '/device/eth1'], 'DisableWiFiVHT': False, 'EnabledTechnologies': ['ethernet'], 'HostName': '', 'IgnoredDNSSearchPaths': 'gateway.2wire.net', 'LinkMonitorTechnologies': 'wifi', 'NoAutoConnectTechnologies': '', 'OfflineMode': False, 'PortalCheckInterval': 30, 'PortalURL': 'http://www.gstatic.com/generate_204', 'Profiles': ['/profile/default'], 'ProhibitedTechnologies': '', 'ServiceCompleteList': ['/service/2', '/service/1', '/service/0'], 'ServiceWatchList': ['/service/2'], 'Services': ['/service/2'], 'State': 'online', 'UninitializedTechnologies': [], 'WakeOnLanEnabled': True, } EXAMPLE_AVAHI_GET_STATE_OUTPUT = \ """method return sender=:1.30 -> dest=:1.40 reply_serial=2 int32 2 """ class DBusSendTest(unittest.TestCase): """Check that we're correctly parsing dbus-send output.""" def testAvahiGetState(self): """Test that extremely simple input works.""" token_stream = dbus_send._build_token_stream( EXAMPLE_AVAHI_GET_STATE_OUTPUT.splitlines()[1:]) parsed_output = dbus_send._parse_value(token_stream) assert parsed_output == 2, 'Actual == %r' % parsed_output def testShillManagerGetProperties(self): """Test that we correctly parse fairly complex output. We could simply write expected == actual, but this lends itself to debugging a little more. """ token_stream = dbus_send._build_token_stream( EXAMPLE_SHILL_GET_PROPERTIES_OUTPUT.splitlines()[1:]) parsed_output = dbus_send._parse_value(token_stream) for k,v in PARSED_SHILL_GET_PROPERTIES_OUTPUT.iteritems(): assert k in parsed_output, '%r not in parsed output' % k actual_v = parsed_output.pop(k) assert actual_v == v, 'Expected %r, got %r' % (v, actual_v) assert len(parsed_output) == 0, ('Got extra parsed output: %r' % parsed_output)