dbus_proxy_test.cc revision 62c73fa5a343fbbf6a0b0176dd789352b85c44e5
1b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn// Copyright 2015 The Chromium OS Authors. All rights reserved. 2b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn// Use of this source code is governed by a BSD-style license that can be 3b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn// found in the LICENSE file. 4b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 5b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn#include <string> 6b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 70752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn#include <chromeos/bind_lambda.h> 8b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn#include <dbus/mock_object_proxy.h> 9b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn#include <gmock/gmock.h> 10b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn#include <gtest/gtest.h> 11b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 12b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn#include "attestation/client/dbus_proxy.h" 13b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 14b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahnusing testing::_; 15b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahnusing testing::Invoke; 16b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahnusing testing::StrictMock; 17b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahnusing testing::WithArgs; 18b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 19b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahnnamespace attestation { 20b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 21b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahnclass DBusProxyTest : public testing::Test { 22b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn public: 23b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn ~DBusProxyTest() override = default; 24b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn void SetUp() override { 25b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn mock_object_proxy_ = new StrictMock<dbus::MockObjectProxy>( 26b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn nullptr, "", dbus::ObjectPath("")); 27b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn proxy_.set_object_proxy(mock_object_proxy_.get()); 28b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn } 29b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn protected: 30b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn scoped_refptr<StrictMock<dbus::MockObjectProxy>> mock_object_proxy_; 31b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn DBusProxy proxy_; 32b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn}; 33b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 346222defa52eb13c0d90673f642f2647f7753478bDarren KrahnTEST_F(DBusProxyTest, CreateGoogleAttestedKey) { 350752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn auto fake_dbus_call = []( 360752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn dbus::MethodCall* method_call, 370752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn const dbus::MockObjectProxy::ResponseCallback& response_callback) { 38b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn // Verify request protobuf. 39b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn dbus::MessageReader reader(method_call); 40b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn CreateGoogleAttestedKeyRequest request_proto; 41b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn EXPECT_TRUE(reader.PopArrayOfBytesAsProto(&request_proto)); 42b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn EXPECT_EQ("label", request_proto.key_label()); 43b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn EXPECT_EQ(KEY_TYPE_ECC, request_proto.key_type()); 44b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn EXPECT_EQ(KEY_USAGE_SIGN, request_proto.key_usage()); 45b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn EXPECT_EQ(ENTERPRISE_MACHINE_CERTIFICATE, 46b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn request_proto.certificate_profile()); 4759d7aa26782d3c6efd707e3b936d56c893a2555aDarren Krahn EXPECT_EQ("user", request_proto.username()); 4859d7aa26782d3c6efd707e3b936d56c893a2555aDarren Krahn EXPECT_EQ("origin", request_proto.origin()); 49b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn // Create reply protobuf. 502e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn auto response = dbus::Response::CreateEmpty(); 51b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn dbus::MessageWriter writer(response.get()); 52b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn CreateGoogleAttestedKeyReply reply_proto; 53d66389850c33614ffbbbbc3f768621182fd853baDarren Krahn reply_proto.set_status(STATUS_SUCCESS); 540752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn reply_proto.set_certificate_chain("certificate"); 55b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn reply_proto.set_server_error("server_error"); 56b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn writer.AppendProtoAsArrayOfBytes(reply_proto); 570752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn response_callback.Run(response.release()); 58b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn }; 596222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_CALL(*mock_object_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 600752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn .WillOnce(WithArgs<0, 2>(Invoke(fake_dbus_call))); 610752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn 620752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn // Set expectations on the outputs. 63d66389850c33614ffbbbbc3f768621182fd853baDarren Krahn int callback_count = 0; 64b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn auto callback = [&callback_count](const CreateGoogleAttestedKeyReply& reply) { 65d66389850c33614ffbbbbc3f768621182fd853baDarren Krahn callback_count++; 66b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn EXPECT_EQ(STATUS_SUCCESS, reply.status()); 67b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn EXPECT_EQ("certificate", reply.certificate_chain()); 68b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn EXPECT_EQ("server_error", reply.server_error()); 690752bd25ba9f45c07bc989d42bf5272133a85afaDarren Krahn }; 70b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn CreateGoogleAttestedKeyRequest request; 71b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn request.set_key_label("label"); 72b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn request.set_key_type(KEY_TYPE_ECC); 73b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn request.set_key_usage(KEY_USAGE_SIGN); 74b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn request.set_certificate_profile(ENTERPRISE_MACHINE_CERTIFICATE); 75b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn request.set_username("user"); 76b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn request.set_origin("origin"); 77b48a50fc394b9c8a1059463c9eaba4c8d1985b9bDarren Krahn proxy_.CreateGoogleAttestedKey(request, base::Bind(callback)); 78d66389850c33614ffbbbbc3f768621182fd853baDarren Krahn EXPECT_EQ(1, callback_count); 79b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn} 80b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn 816222defa52eb13c0d90673f642f2647f7753478bDarren KrahnTEST_F(DBusProxyTest, GetKeyInfo) { 826222defa52eb13c0d90673f642f2647f7753478bDarren Krahn auto fake_dbus_call = []( 836222defa52eb13c0d90673f642f2647f7753478bDarren Krahn dbus::MethodCall* method_call, 846222defa52eb13c0d90673f642f2647f7753478bDarren Krahn const dbus::MockObjectProxy::ResponseCallback& response_callback) { 856222defa52eb13c0d90673f642f2647f7753478bDarren Krahn // Verify request protobuf. 866222defa52eb13c0d90673f642f2647f7753478bDarren Krahn dbus::MessageReader reader(method_call); 876222defa52eb13c0d90673f642f2647f7753478bDarren Krahn GetKeyInfoRequest request_proto; 886222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_TRUE(reader.PopArrayOfBytesAsProto(&request_proto)); 896222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_EQ("label", request_proto.key_label()); 906222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_EQ("username", request_proto.username()); 916222defa52eb13c0d90673f642f2647f7753478bDarren Krahn // Create reply protobuf. 922e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn auto response = dbus::Response::CreateEmpty(); 936222defa52eb13c0d90673f642f2647f7753478bDarren Krahn dbus::MessageWriter writer(response.get()); 946222defa52eb13c0d90673f642f2647f7753478bDarren Krahn GetKeyInfoReply reply_proto; 956222defa52eb13c0d90673f642f2647f7753478bDarren Krahn reply_proto.set_status(STATUS_SUCCESS); 966222defa52eb13c0d90673f642f2647f7753478bDarren Krahn reply_proto.set_key_type(KEY_TYPE_ECC); 976222defa52eb13c0d90673f642f2647f7753478bDarren Krahn reply_proto.set_key_usage(KEY_USAGE_SIGN); 986222defa52eb13c0d90673f642f2647f7753478bDarren Krahn reply_proto.set_public_key("public_key"); 996222defa52eb13c0d90673f642f2647f7753478bDarren Krahn reply_proto.set_certify_info("certify_info"); 1006222defa52eb13c0d90673f642f2647f7753478bDarren Krahn reply_proto.set_certify_info_signature("signature"); 1016222defa52eb13c0d90673f642f2647f7753478bDarren Krahn reply_proto.set_certificate("certificate"); 1026222defa52eb13c0d90673f642f2647f7753478bDarren Krahn writer.AppendProtoAsArrayOfBytes(reply_proto); 1036222defa52eb13c0d90673f642f2647f7753478bDarren Krahn response_callback.Run(response.release()); 1046222defa52eb13c0d90673f642f2647f7753478bDarren Krahn }; 1056222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_CALL(*mock_object_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 1066222defa52eb13c0d90673f642f2647f7753478bDarren Krahn .WillOnce(WithArgs<0, 2>(Invoke(fake_dbus_call))); 1076222defa52eb13c0d90673f642f2647f7753478bDarren Krahn 1086222defa52eb13c0d90673f642f2647f7753478bDarren Krahn // Set expectations on the outputs. 1096222defa52eb13c0d90673f642f2647f7753478bDarren Krahn int callback_count = 0; 1106222defa52eb13c0d90673f642f2647f7753478bDarren Krahn auto callback = [&callback_count](const GetKeyInfoReply& reply) { 1116222defa52eb13c0d90673f642f2647f7753478bDarren Krahn callback_count++; 1126222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_EQ(STATUS_SUCCESS, reply.status()); 1136222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_EQ(KEY_TYPE_ECC, reply.key_type()); 1146222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_EQ(KEY_USAGE_SIGN, reply.key_usage()); 1156222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_EQ("public_key", reply.public_key()); 1166222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_EQ("certify_info", reply.certify_info()); 1176222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_EQ("signature", reply.certify_info_signature()); 1186222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_EQ("certificate", reply.certificate()); 1196222defa52eb13c0d90673f642f2647f7753478bDarren Krahn }; 1206222defa52eb13c0d90673f642f2647f7753478bDarren Krahn GetKeyInfoRequest request; 1216222defa52eb13c0d90673f642f2647f7753478bDarren Krahn request.set_key_label("label"); 1226222defa52eb13c0d90673f642f2647f7753478bDarren Krahn request.set_username("username"); 1236222defa52eb13c0d90673f642f2647f7753478bDarren Krahn proxy_.GetKeyInfo(request, base::Bind(callback)); 1246222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_EQ(1, callback_count); 1256222defa52eb13c0d90673f642f2647f7753478bDarren Krahn} 1266222defa52eb13c0d90673f642f2647f7753478bDarren Krahn 127cd5486df897619718b68223ebefc1322a1f5ab29Darren KrahnTEST_F(DBusProxyTest, GetEndorsementInfo) { 128cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn auto fake_dbus_call = []( 129cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn dbus::MethodCall* method_call, 130cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn const dbus::MockObjectProxy::ResponseCallback& response_callback) { 131cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn // Verify request protobuf. 132cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn dbus::MessageReader reader(method_call); 133cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn GetEndorsementInfoRequest request_proto; 134cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn EXPECT_TRUE(reader.PopArrayOfBytesAsProto(&request_proto)); 135cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn EXPECT_EQ(KEY_TYPE_ECC, request_proto.key_type()); 136cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn // Create reply protobuf. 1372e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn auto response = dbus::Response::CreateEmpty(); 138cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn dbus::MessageWriter writer(response.get()); 139cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn GetEndorsementInfoReply reply_proto; 140cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn reply_proto.set_status(STATUS_SUCCESS); 141cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn reply_proto.set_ek_public_key("public_key"); 142cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn reply_proto.set_ek_certificate("certificate"); 143cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn writer.AppendProtoAsArrayOfBytes(reply_proto); 144cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn response_callback.Run(response.release()); 145cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn }; 146cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn EXPECT_CALL(*mock_object_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 147cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn .WillOnce(WithArgs<0, 2>(Invoke(fake_dbus_call))); 148cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn 149cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn // Set expectations on the outputs. 150cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn int callback_count = 0; 151cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn auto callback = [&callback_count](const GetEndorsementInfoReply& reply) { 152cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn callback_count++; 153cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn EXPECT_EQ(STATUS_SUCCESS, reply.status()); 154cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn EXPECT_EQ("public_key", reply.ek_public_key()); 155cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn EXPECT_EQ("certificate", reply.ek_certificate()); 156cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn }; 157cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn GetEndorsementInfoRequest request; 158cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn request.set_key_type(KEY_TYPE_ECC); 159cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn proxy_.GetEndorsementInfo(request, base::Bind(callback)); 160cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn EXPECT_EQ(1, callback_count); 161cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn} 162cd5486df897619718b68223ebefc1322a1f5ab29Darren Krahn 163566c836c403212d5c13428b02ed65e5ff6e49a6bDarren KrahnTEST_F(DBusProxyTest, GetAttestationKeyInfo) { 164566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn auto fake_dbus_call = []( 165566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn dbus::MethodCall* method_call, 166566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn const dbus::MockObjectProxy::ResponseCallback& response_callback) { 167566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn // Verify request protobuf. 168566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn dbus::MessageReader reader(method_call); 169566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn GetAttestationKeyInfoRequest request_proto; 170566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn EXPECT_TRUE(reader.PopArrayOfBytesAsProto(&request_proto)); 171566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn EXPECT_EQ(KEY_TYPE_ECC, request_proto.key_type()); 172566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn // Create reply protobuf. 1732e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn auto response = dbus::Response::CreateEmpty(); 174566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn dbus::MessageWriter writer(response.get()); 175566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn GetAttestationKeyInfoReply reply_proto; 176566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn reply_proto.set_status(STATUS_SUCCESS); 177566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn reply_proto.set_public_key("public_key"); 1782e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn reply_proto.set_public_key_tpm_format("public_key_tpm_format"); 179566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn reply_proto.set_certificate("certificate"); 180566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn reply_proto.mutable_pcr0_quote()->set_quote("pcr0"); 181566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn reply_proto.mutable_pcr1_quote()->set_quote("pcr1"); 182566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn writer.AppendProtoAsArrayOfBytes(reply_proto); 183566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn response_callback.Run(response.release()); 184566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn }; 185566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn EXPECT_CALL(*mock_object_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 186566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn .WillOnce(WithArgs<0, 2>(Invoke(fake_dbus_call))); 187566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn 188566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn // Set expectations on the outputs. 189566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn int callback_count = 0; 190566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn auto callback = [&callback_count](const GetAttestationKeyInfoReply& reply) { 191566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn callback_count++; 192566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn EXPECT_EQ(STATUS_SUCCESS, reply.status()); 193566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn EXPECT_EQ("public_key", reply.public_key()); 1942e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_EQ("public_key_tpm_format", reply.public_key_tpm_format()); 195566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn EXPECT_EQ("certificate", reply.certificate()); 196566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn EXPECT_EQ("pcr0", reply.pcr0_quote().quote()); 197566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn EXPECT_EQ("pcr1", reply.pcr1_quote().quote()); 198566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn }; 199566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn GetAttestationKeyInfoRequest request; 200566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn request.set_key_type(KEY_TYPE_ECC); 201566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn proxy_.GetAttestationKeyInfo(request, base::Bind(callback)); 202566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn EXPECT_EQ(1, callback_count); 203566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn} 204566c836c403212d5c13428b02ed65e5ff6e49a6bDarren Krahn 2052e89ba764046e015ae90a1668f7cb3eb29cf509dDarren KrahnTEST_F(DBusProxyTest, ActivateAttestationKey) { 2062e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn auto fake_dbus_call = []( 2072e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn dbus::MethodCall* method_call, 2082e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn const dbus::MockObjectProxy::ResponseCallback& response_callback) { 2092e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn // Verify request protobuf. 2102e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn dbus::MessageReader reader(method_call); 2112e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn ActivateAttestationKeyRequest request_proto; 2122e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_TRUE(reader.PopArrayOfBytesAsProto(&request_proto)); 2132e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_EQ(KEY_TYPE_ECC, request_proto.key_type()); 2142e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_EQ("encrypted1", 2152e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn request_proto.encrypted_certificate().asym_ca_contents()); 2162e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_EQ("encrypted2", 2172e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn request_proto.encrypted_certificate().sym_ca_attestation()); 2182e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_TRUE(request_proto.save_certificate()); 2192e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn // Create reply protobuf. 2202e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn auto response = dbus::Response::CreateEmpty(); 2212e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn dbus::MessageWriter writer(response.get()); 2222e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn ActivateAttestationKeyReply reply_proto; 2232e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn reply_proto.set_status(STATUS_SUCCESS); 2242e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn reply_proto.set_certificate("certificate"); 2252e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn writer.AppendProtoAsArrayOfBytes(reply_proto); 2262e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn response_callback.Run(response.release()); 2272e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn }; 2282e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_CALL(*mock_object_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 2292e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn .WillOnce(WithArgs<0, 2>(Invoke(fake_dbus_call))); 2302e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn 2312e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn // Set expectations on the outputs. 2322e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn int callback_count = 0; 2332e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn auto callback = [&callback_count](const ActivateAttestationKeyReply& reply) { 2342e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn callback_count++; 2352e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_EQ(STATUS_SUCCESS, reply.status()); 2362e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_EQ("certificate", reply.certificate()); 2372e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn }; 2382e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn ActivateAttestationKeyRequest request; 2392e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn request.set_key_type(KEY_TYPE_ECC); 2402e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn request.mutable_encrypted_certificate()->set_asym_ca_contents("encrypted1"); 2412e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn request.mutable_encrypted_certificate()->set_sym_ca_attestation("encrypted2"); 2422e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn request.set_save_certificate(true); 2432e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn proxy_.ActivateAttestationKey(request, base::Bind(callback)); 2442e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_EQ(1, callback_count); 2452e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn} 2462e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn 24762c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren KrahnTEST_F(DBusProxyTest, CreateCertifiableKey) { 24862c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn auto fake_dbus_call = []( 24962c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn dbus::MethodCall* method_call, 25062c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn const dbus::MockObjectProxy::ResponseCallback& response_callback) { 25162c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn // Verify request protobuf. 25262c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn dbus::MessageReader reader(method_call); 25362c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn CreateCertifiableKeyRequest request_proto; 25462c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn EXPECT_TRUE(reader.PopArrayOfBytesAsProto(&request_proto)); 25562c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn EXPECT_EQ("label", request_proto.key_label()); 25662c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn EXPECT_EQ(KEY_TYPE_ECC, request_proto.key_type()); 25762c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn EXPECT_EQ(KEY_USAGE_SIGN, request_proto.key_usage()); 25862c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn EXPECT_EQ("user", request_proto.username()); 25962c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn // Create reply protobuf. 26062c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn auto response = dbus::Response::CreateEmpty(); 26162c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn dbus::MessageWriter writer(response.get()); 26262c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn CreateCertifiableKeyReply reply_proto; 26362c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn reply_proto.set_status(STATUS_SUCCESS); 26462c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn reply_proto.set_public_key("public_key"); 26562c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn reply_proto.set_certify_info("certify_info"); 26662c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn reply_proto.set_certify_info_signature("signature"); 26762c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn writer.AppendProtoAsArrayOfBytes(reply_proto); 26862c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn response_callback.Run(response.release()); 26962c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn }; 27062c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn EXPECT_CALL(*mock_object_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 27162c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn .WillOnce(WithArgs<0, 2>(Invoke(fake_dbus_call))); 27262c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn 27362c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn // Set expectations on the outputs. 27462c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn int callback_count = 0; 27562c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn auto callback = [&callback_count](const CreateCertifiableKeyReply& reply) { 27662c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn callback_count++; 27762c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn EXPECT_EQ(STATUS_SUCCESS, reply.status()); 27862c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn EXPECT_EQ("public_key", reply.public_key()); 27962c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn EXPECT_EQ("certify_info", reply.certify_info()); 28062c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn EXPECT_EQ("signature", reply.certify_info_signature()); 28162c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn }; 28262c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn CreateCertifiableKeyRequest request; 28362c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn request.set_key_label("label"); 28462c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn request.set_key_type(KEY_TYPE_ECC); 28562c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn request.set_key_usage(KEY_USAGE_SIGN); 28662c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn request.set_username("user"); 28762c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn proxy_.CreateCertifiableKey(request, base::Bind(callback)); 28862c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn EXPECT_EQ(1, callback_count); 28962c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn} 29062c73fa5a343fbbf6a0b0176dd789352b85c44e5Darren Krahn 291b91fd4923f411705be97fbc5c0ada37481c0cd8dDarren Krahn} // namespace attestation 292