1#!/usr/bin/python2 2# 3# Copyright 2015 The Chromium OS Authors. All rights reserved. 4# Use of this source code is governed by a BSD-style license that can be 5# found in the LICENSE file. 6 7import unittest 8 9import common 10import dbus 11from autotest_lib.client.common_lib.cros import dbus_send 12 13EXAMPLE_SHILL_GET_PROPERTIES_OUTPUT = ( 14'method return sender=org.freedesktop.DBus -> destination=:1.37 serial=3 ' 15'reply_serial=2\n' 16""" 17 array [ 18 dict entry( 19 string "ActiveProfile" 20 variant string "/profile/default" 21 ) 22 dict entry( 23 string "ArpGateway" 24 variant boolean true 25 ) 26 dict entry( 27 string "AvailableTechnologies" 28 variant array [ 29 string "ethernet" 30 ] 31 ) 32 dict entry( 33 string "CheckPortalList" 34 variant string "''" 35 ) 36 dict entry( 37 string "ConnectedTechnologies" variant array [ 38 string "ethernet" 39 ] 40 ) 41 dict entry( 42 string "ConnectionState" 43 variant string "online" 44 ) 45 dict entry( 46 string "Country" 47 variant string "" 48 ) 49 dict entry( 50 string "DefaultService" 51 variant object path "/service/2" 52 ) 53 dict entry( 54 string "DefaultTechnology" 55 variant string "ethernet" 56 ) 57 dict entry( 58 string "Devices" 59 variant array [ 60 object path "/device/eth0" 61 object path "/device/eth1" 62 ] 63 ) 64 dict entry( 65 string "DisableWiFiVHT" 66 variant boolean false 67 ) 68 dict entry( 69 string "EnabledTechnologies" 70 variant array [ 71 string "ethernet" 72 ] 73 ) 74 dict entry( 75 string "HostName" 76 variant string "" 77 ) 78 dict entry( 79 string "IgnoredDNSSearchPaths" 80 variant string "gateway.2wire.net" 81 ) 82 dict entry( 83 string "LinkMonitorTechnologies" 84 variant string "wifi" 85 ) 86 dict entry( 87 string "NoAutoConnectTechnologies" 88 variant string "" 89 ) 90 dict entry( 91 string "OfflineMode" 92 variant boolean false 93 ) 94 dict entry( 95 string "PortalCheckInterval" 96 variant int32 30 97 ) 98 dict entry( 99 string "PortalURL" 100 variant string "http://www.gstatic.com/generate_204" 101 ) 102 dict entry( 103 string "Profiles" 104 variant array [ 105 object path "/profile/default" 106 ] 107 ) 108 dict entry( 109 string "ProhibitedTechnologies" 110 variant string "" 111 ) 112 dict entry( 113 string "ServiceCompleteList" 114 variant array [ 115 object path "/service/2" 116 object path "/service/1" 117 object path "/service/0" 118 ] 119 ) 120 dict entry( 121 string "ServiceWatchList" 122 variant array [ 123 object path "/service/2" 124 ] 125 ) 126 dict entry( 127 string "Services" 128 variant array [ 129 object path "/service/2" 130 ] 131 ) 132 dict entry( 133 string "State" 134 variant string "online" 135 ) 136 dict entry( 137 string "UninitializedTechnologies" 138 variant array [ 139 ] 140 ) 141 dict entry( 142 string "WakeOnLanEnabled" 143 variant boolean true 144 ) 145 ] 146""") 147 148PARSED_SHILL_GET_PROPERTIES_OUTPUT = { 149 'ActiveProfile': '/profile/default', 150 'ArpGateway': True, 151 'AvailableTechnologies': ['ethernet'], 152 'CheckPortalList': "''", 153 'ConnectedTechnologies': ['ethernet'], 154 'ConnectionState': 'online', 155 'Country': '', 156 'DefaultService': '/service/2', 157 'DefaultTechnology': 'ethernet', 158 'Devices': ['/device/eth0', '/device/eth1'], 159 'DisableWiFiVHT': False, 160 'EnabledTechnologies': ['ethernet'], 161 'HostName': '', 162 'IgnoredDNSSearchPaths': 'gateway.2wire.net', 163 'LinkMonitorTechnologies': 'wifi', 164 'NoAutoConnectTechnologies': '', 165 'OfflineMode': False, 166 'PortalCheckInterval': 30, 167 'PortalURL': 'http://www.gstatic.com/generate_204', 168 'Profiles': ['/profile/default'], 169 'ProhibitedTechnologies': '', 170 'ServiceCompleteList': ['/service/2', '/service/1', '/service/0'], 171 'ServiceWatchList': ['/service/2'], 172 'Services': ['/service/2'], 173 'State': 'online', 174 'UninitializedTechnologies': [], 175 'WakeOnLanEnabled': True, 176} 177 178EXAMPLE_AVAHI_GET_STATE_OUTPUT = ( 179'method return sender=org.freedesktop.DBus -> destination=:1.40 serial=3 ' 180'reply_serial=2\n' 181' int32 2') 182 183class DBusSendTest(unittest.TestCase): 184 """Check that we're correctly parsing dbus-send output.""" 185 186 187 def testAvahiGetState(self): 188 """Test that extremely simple input works.""" 189 result = dbus_send._parse_dbus_send_output( 190 EXAMPLE_AVAHI_GET_STATE_OUTPUT) 191 assert result.sender == 'org.freedesktop.DBus', ( 192 'Sender == %r' % result.sender) 193 assert result.responder == ':1.40', 'Responder == %r' % result.responder 194 assert result.response == 2, 'Response == %r' % result.response 195 196 197 def testShillManagerGetProperties(self): 198 """Test that we correctly parse fairly complex output. 199 200 We could simply write expected == actual, but this lends 201 itself to debugging a little more. 202 203 """ 204 result = dbus_send._parse_dbus_send_output( 205 EXAMPLE_SHILL_GET_PROPERTIES_OUTPUT) 206 assert result.sender == 'org.freedesktop.DBus', ( 207 'Sender == %r' % result.sender) 208 assert result.responder == ':1.37', 'Responder == %r' % result.responder 209 for k, v in PARSED_SHILL_GET_PROPERTIES_OUTPUT.iteritems(): 210 assert k in result.response, '%r not in response' % k 211 actual_v = result.response.pop(k) 212 assert actual_v == v, 'Expected %r, got %r' % (v, actual_v) 213 assert len(result.response) == 0, ( 214 'Got extra response: %r' % result.response) 215 216 def testBuildArgString(self): 217 """Test that we correctly form argument strings from dbus.* types.""" 218 self.assertEquals(dbus_send._build_arg_string( 219 [dbus.Int16(42)]), 220 'int16:42') 221 self.assertEquals(dbus_send._build_arg_string( 222 [dbus.Int16(42), dbus.Boolean(True)]), 223 'int16:42 boolean:true') 224 self.assertEquals(dbus_send._build_arg_string( 225 [dbus.Int16(42), dbus.Boolean(True), dbus.String("foo")]), 226 'int16:42 boolean:true string:foo') 227 228 229if __name__ == "__main__": 230 unittest.main() 231