231 lines
6.8 KiB
Python
Executable File
231 lines
6.8 KiB
Python
Executable File
#!/usr/bin/python2
|
|
#
|
|
# 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
|
|
import dbus
|
|
from autotest_lib.client.common_lib.cros import dbus_send
|
|
|
|
EXAMPLE_SHILL_GET_PROPERTIES_OUTPUT = (
|
|
'method return sender=org.freedesktop.DBus -> destination=:1.37 serial=3 '
|
|
'reply_serial=2\n'
|
|
"""
|
|
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=org.freedesktop.DBus -> destination=:1.40 serial=3 '
|
|
'reply_serial=2\n'
|
|
' int32 2')
|
|
|
|
class DBusSendTest(unittest.TestCase):
|
|
"""Check that we're correctly parsing dbus-send output."""
|
|
|
|
|
|
def testAvahiGetState(self):
|
|
"""Test that extremely simple input works."""
|
|
result = dbus_send._parse_dbus_send_output(
|
|
EXAMPLE_AVAHI_GET_STATE_OUTPUT)
|
|
assert result.sender == 'org.freedesktop.DBus', (
|
|
'Sender == %r' % result.sender)
|
|
assert result.responder == ':1.40', 'Responder == %r' % result.responder
|
|
assert result.response == 2, 'Response == %r' % result.response
|
|
|
|
|
|
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.
|
|
|
|
"""
|
|
result = dbus_send._parse_dbus_send_output(
|
|
EXAMPLE_SHILL_GET_PROPERTIES_OUTPUT)
|
|
assert result.sender == 'org.freedesktop.DBus', (
|
|
'Sender == %r' % result.sender)
|
|
assert result.responder == ':1.37', 'Responder == %r' % result.responder
|
|
for k, v in PARSED_SHILL_GET_PROPERTIES_OUTPUT.iteritems():
|
|
assert k in result.response, '%r not in response' % k
|
|
actual_v = result.response.pop(k)
|
|
assert actual_v == v, 'Expected %r, got %r' % (v, actual_v)
|
|
assert len(result.response) == 0, (
|
|
'Got extra response: %r' % result.response)
|
|
|
|
def testBuildArgString(self):
|
|
"""Test that we correctly form argument strings from dbus.* types."""
|
|
self.assertEquals(dbus_send._build_arg_string(
|
|
[dbus.Int16(42)]),
|
|
'int16:42')
|
|
self.assertEquals(dbus_send._build_arg_string(
|
|
[dbus.Int16(42), dbus.Boolean(True)]),
|
|
'int16:42 boolean:true')
|
|
self.assertEquals(dbus_send._build_arg_string(
|
|
[dbus.Int16(42), dbus.Boolean(True), dbus.String("foo")]),
|
|
'int16:42 boolean:true string:foo')
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|