blob: 6bfafcbf45815ec93555b984eb413ac3c9b03fec [file] [log] [blame]
#!/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
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()