blob: 3be7630c0a63419b8cac9eab55bb19ae4ae321ba [file] [log] [blame]
# Copyright 2014 The Chromium 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 dbus
import inspect
import json
import logging
import sets
from autotest_lib.client.bin import test
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib.cros.tendo import buffet_config
from autotest_lib.client.common_lib.cros.tendo import buffet_dbus_helper
from autotest_lib.client.common_lib.cros.tendo import privet_helper
from autotest_lib.client.cros.networking import wifi_proxy
def check(expected, value):
"""Check that |value| == |expected|.
@param expected: expected value
@param value: actual value we found
"""
if value != expected:
frame = inspect.getouterframes(inspect.currentframe())[1]
raise error.TestFail('%s:%s: "%s" != "%s"' % (frame[1], frame[2],
expected, value))
class buffet_BasicDBusAPI(test.test):
"""Check that basic buffet daemon DBus APIs are functional."""
version = 1
def run_once(self):
"""Test entry point."""
buffet_config.BuffetConfig(
disable_pairing_security=True).restart_with_config()
buffet = buffet_dbus_helper.BuffetDBusHelper()
check('', buffet.device_id)
check('Chromium', buffet.oem_name)
check('Brillo', buffet.model_name)
check('AATST', buffet.model_id)
check('', buffet.description)
check('', buffet.location)
buffet.manager.UpdateDeviceInfo(dbus.String('A'),
dbus.String('B'),
dbus.String('C'))
check('A', buffet.name)
check('B', buffet.description)
check('C', buffet.location)
# The test method better work.
test_message = 'Hello world!'
echoed_message = buffet.manager.TestMethod(test_message)
if test_message != echoed_message:
raise error.TestFail('Expected Manager.TestMethod to return %s '
'but got %s instead.' % (test_message,
echoed_message))
# We should get the firmware version right.
expected_version = None
with open('/etc/lsb-release') as f:
for line in f.readlines():
pieces = line.split('=', 1)
if len(pieces) != 2:
continue
key = pieces[0].strip()
if key == 'CHROMEOS_RELEASE_VERSION':
expected_version = pieces[1].strip()
if expected_version is None:
raise error.TestError('Failed to read version from lsb-release')
raw_state = buffet.manager.GetState()
parsed_state = json.loads(raw_state)
logging.debug('%r', parsed_state)
actual_version = parsed_state['base']['firmwareVersion']
if actual_version != expected_version:
raise error.TestFail('Expected firmwareVersion "%s", but got "%s"' %
(expected_version, actual_version))
check(raw_state, buffet.state)
expected_base_keys = sets.Set(
['firmwareVersion', 'localDiscoveryEnabled',
'localAnonymousAccessMaxRole', 'localPairingEnabled'])
missing_base_keys = sets.Set(expected_base_keys).difference(
parsed_state['base'].keys())
if missing_base_keys:
raise error.TestFail('Missing base keys "%s"' % missing_base_keys)
# Privet API
shill = wifi_proxy.WifiProxy.get_proxy()
shill.remove_all_wifi_entries()
check({}, buffet.pairing_info)
# But we should still be able to pair.
helper = privet_helper.PrivetHelper()
data = {'pairing': 'pinCode', 'crypto': 'none'}
pairing = helper.send_privet_request(privet_helper.URL_PAIRING_START,
request_data=data)
# And now we should be able to see a pin code in our pairing status.
pairing_info = buffet.pairing_info
logging.debug(pairing_info)
check(pairing_info.get('sessionId', ''), pairing['sessionId'])
if not 'code' in pairing_info:
raise error.TestFail('No code in pairing info (%r)' % pairing_info)
# And if we start a new pairing session, the session ID should change.
old_session_id = pairing_info['sessionId']
pairing = helper.send_privet_request(privet_helper.URL_PAIRING_START,
request_data=data)
if pairing['sessionId'] == old_session_id:
raise error.TestFail('Session IDs should change on each new '
'pairing attempt.')
# And if we start and complete a pairing session, we should have no
# pairing information exposed.
helper.privet_auth()
check({}, buffet.pairing_info)
def cleanup(self):
"""Clean up processes altered during the test."""
buffet_config.naive_restart()