#!/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)