blob: 43aeb9649f617fa317f1955b06ee1537fd71721e [file] [log] [blame]
# Copyright (c) 2011 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 dbus
import logging
import sys
import common
import constants
import login
import ownership
from autotest_lib.client.bin import test, utils
from autotest_lib.client.common_lib import error
class OwnershipTest(test.test):
"""Base class for tests that test device ownership and policies.
If your subclass overrides the initialize() or cleanup() methods, it
should make sure to invoke this class' version of those methods as well.
The standard super(...) function cannot be used for this, since the base
test class is not a 'new style' Python class.
"""
version = 1
def initialize(self):
ownership.clear_ownership()
login.refresh_login_screen()
super(OwnershipTest, self).initialize()
def connect_to_session_manager(self):
"""Create and return a DBus connection to session_manager.
Connects to the session manager over the DBus system bus. Returns
appropriately configured DBus interface object.
"""
return ownership.connect_to_session_manager()
def generate_policy(self, key, pubkey, policy, old_key=None):
"""Generate and serialize a populated device policy protobuffer.
Creates a protobuf containing the device policy |policy|, signed with
|key|. Also includes the public key |pubkey|, signed with |old_key|
if provided. If not, |pubkey| is signed with |key|. The protobuf
is serialized to a string and returned.
"""
# Pull in protobuf definitions.
sys.path.append(self.srcdir)
from device_management_backend_pb2 import PolicyFetchResponse
if old_key == None:
old_key = key
policy_proto = PolicyFetchResponse()
policy_proto.policy_data = policy
policy_proto.policy_data_signature = ownership.sign(key, policy)
policy_proto.new_public_key = pubkey
policy_proto.new_public_key_signature = ownership.sign(old_key, pubkey)
return policy_proto.SerializeToString()
def push_policy(self, policy_string, sm):
"""Push a device policy to the session manager over DBus.
The serialized device policy |policy_string| is sent to the session
manager with the StorePolicy DBus call. Success of the store is
validated by fetching the policy again and comparing.
"""
sm.StorePolicy(dbus.ByteArray(policy_string), byte_arrays=True)
login.wait_for_ownership()
retrieved_policy = sm.RetrievePolicy(byte_arrays=True)
if retrieved_policy != policy_string:
raise error.TestFail('Policy should not be %s' % retrieved_policy)
def cleanup(self):
login.nuke_login_manager()
super(OwnershipTest, self).cleanup()