1259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// 2259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// Copyright (C) 2015 The Android Open Source Project 3259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// 4259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// Licensed under the Apache License, Version 2.0 (the "License"); 5259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// you may not use this file except in compliance with the License. 6259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// You may obtain a copy of the License at 7259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// 8259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// http://www.apache.org/licenses/LICENSE-2.0 9259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// 10259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// Unless required by applicable law or agreed to in writing, software 11259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// distributed under the License is distributed on an "AS IS" BASIS, 12259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// See the License for the specific language governing permissions and 14259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// limitations under the License. 15259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// 16f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn 17f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn#include <string> 18f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn 19a08ddea5f4b861ddf1f4e91bb9c4c34e23dc0ba9Alex Vakulenko#include <brillo/bind_lambda.h> 20f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn#include <dbus/mock_object_proxy.h> 21f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn#include <gmock/gmock.h> 22f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn#include <gtest/gtest.h> 23f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn 24c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi#include "tpm_manager/client/tpm_nvram_dbus_proxy.h" 25f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn 26f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahnusing testing::_; 27f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahnusing testing::Invoke; 28f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahnusing testing::StrictMock; 29f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahnusing testing::WithArgs; 30f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn 31f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahnnamespace tpm_manager { 32f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn 33c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghiclass TpmNvramDBusProxyTest : public testing::Test { 34f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn public: 35c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi ~TpmNvramDBusProxyTest() override = default; 36f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn void SetUp() override { 37f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn mock_object_proxy_ = new StrictMock<dbus::MockObjectProxy>( 38f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn nullptr, "", dbus::ObjectPath("")); 39f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn proxy_.set_object_proxy(mock_object_proxy_.get()); 40f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn } 41644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi 42f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn protected: 43f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn scoped_refptr<StrictMock<dbus::MockObjectProxy>> mock_object_proxy_; 44c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi TpmNvramDBusProxy proxy_; 45f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn}; 46f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn 47a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(TpmNvramDBusProxyTest, DefineSpace) { 48644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi uint32_t nvram_index = 5; 49a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn size_t nvram_size = 32; 50a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn auto fake_dbus_call = [nvram_index, nvram_size]( 51644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MethodCall* method_call, 52644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi const dbus::MockObjectProxy::ResponseCallback& response_callback) { 53644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Verify request protobuf. 54644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageReader reader(method_call); 55a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DefineSpaceRequest request; 56644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(reader.PopArrayOfBytesAsProto(&request)); 57644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(request.has_index()); 58644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(nvram_index, request.index()); 59a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_TRUE(request.has_size()); 60a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(nvram_size, request.size()); 61644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Create reply protobuf. 62644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi auto response = dbus::Response::CreateEmpty(); 63644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageWriter writer(response.get()); 64a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DefineSpaceReply reply; 65a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn reply.set_result(NVRAM_RESULT_SUCCESS); 66644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi writer.AppendProtoAsArrayOfBytes(reply); 67644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi response_callback.Run(response.release()); 68644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 69644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_CALL(*mock_object_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 70644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi .WillOnce(WithArgs<0, 2>(Invoke(fake_dbus_call))); 71644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Set expectations on the outputs. 72644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi int callback_count = 0; 73a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn auto callback = [&callback_count](const DefineSpaceReply& reply) { 74644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi callback_count++; 75a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, reply.result()); 76644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 77a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DefineSpaceRequest request; 78644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi request.set_index(nvram_index); 79a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn request.set_size(nvram_size); 80a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn proxy_.DefineSpace(request, base::Bind(callback)); 81644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(1, callback_count); 82644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi} 83644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi 84a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(TpmNvramDBusProxyTest, DestroySpaceRequest) { 85644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi uint32_t nvram_index = 5; 86644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi auto fake_dbus_call = [nvram_index]( 87644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MethodCall* method_call, 88644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi const dbus::MockObjectProxy::ResponseCallback& response_callback) { 89644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Verify request protobuf. 90644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageReader reader(method_call); 91a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DestroySpaceRequest request; 92644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(reader.PopArrayOfBytesAsProto(&request)); 93644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(request.has_index()); 94644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(nvram_index, request.index()); 95644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Create reply protobuf. 96644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi auto response = dbus::Response::CreateEmpty(); 97644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageWriter writer(response.get()); 98a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DestroySpaceReply reply; 99a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn reply.set_result(NVRAM_RESULT_SUCCESS); 100644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi writer.AppendProtoAsArrayOfBytes(reply); 101644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi response_callback.Run(response.release()); 102644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 103644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_CALL(*mock_object_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 104644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi .WillOnce(WithArgs<0, 2>(Invoke(fake_dbus_call))); 105644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Set expectations on the outputs. 106644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi int callback_count = 0; 107a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn auto callback = [&callback_count](const DestroySpaceReply& reply) { 108644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi callback_count++; 109a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, reply.result()); 110644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 111a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DestroySpaceRequest request; 112644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi request.set_index(nvram_index); 113a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn proxy_.DestroySpace(request, base::Bind(callback)); 114644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(1, callback_count); 115644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi} 116a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(TpmNvramDBusProxyTest, WriteSpace) { 117644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi uint32_t nvram_index = 5; 118644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi std::string nvram_data("nvram_data"); 119644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi auto fake_dbus_call = [nvram_index, nvram_data]( 120644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MethodCall* method_call, 121644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi const dbus::MockObjectProxy::ResponseCallback& response_callback) { 122644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Verify request protobuf. 123644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageReader reader(method_call); 124a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn WriteSpaceRequest request; 125644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(reader.PopArrayOfBytesAsProto(&request)); 126644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(request.has_index()); 127644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(nvram_index, request.index()); 128644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(request.has_data()); 129644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(nvram_data, request.data()); 130644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Create reply protobuf. 131644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi auto response = dbus::Response::CreateEmpty(); 132644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageWriter writer(response.get()); 133a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn WriteSpaceReply reply; 134a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn reply.set_result(NVRAM_RESULT_SUCCESS); 135644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi writer.AppendProtoAsArrayOfBytes(reply); 136644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi response_callback.Run(response.release()); 137644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 138644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_CALL(*mock_object_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 139644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi .WillOnce(WithArgs<0, 2>(Invoke(fake_dbus_call))); 140644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Set expectations on the outputs. 141644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi int callback_count = 0; 142a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn auto callback = [&callback_count](const WriteSpaceReply& reply) { 143644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi callback_count++; 144a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, reply.result()); 145644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 146a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn WriteSpaceRequest request; 147644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi request.set_index(nvram_index); 148644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi request.set_data(nvram_data); 149a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn proxy_.WriteSpace(request, base::Bind(callback)); 150644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(1, callback_count); 151644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi} 152644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi 153a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(TpmNvramDBusProxyTest, ReadSpace) { 154644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi uint32_t nvram_index = 5; 155644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi std::string nvram_data("nvram_data"); 156644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi auto fake_dbus_call = [nvram_index, nvram_data]( 157644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MethodCall* method_call, 158644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi const dbus::MockObjectProxy::ResponseCallback& response_callback) { 159644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Verify request protobuf. 160644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageReader reader(method_call); 161a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn ReadSpaceRequest request; 162644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(reader.PopArrayOfBytesAsProto(&request)); 163644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(request.has_index()); 164644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(nvram_index, request.index()); 165644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Create reply protobuf. 166644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi auto response = dbus::Response::CreateEmpty(); 167644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageWriter writer(response.get()); 168a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn ReadSpaceReply reply; 169a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn reply.set_result(NVRAM_RESULT_SUCCESS); 170644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi reply.set_data(nvram_data); 171644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi writer.AppendProtoAsArrayOfBytes(reply); 172644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi response_callback.Run(response.release()); 173644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 174644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_CALL(*mock_object_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 175644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi .WillOnce(WithArgs<0, 2>(Invoke(fake_dbus_call))); 176644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Set expectations on the outputs. 177644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi int callback_count = 0; 178a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn auto callback = [&callback_count, nvram_data](const ReadSpaceReply& reply) { 179644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi callback_count++; 180a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, reply.result()); 181644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(reply.has_data()); 182644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(nvram_data, reply.data()); 183644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 184a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn ReadSpaceRequest request; 185644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi request.set_index(nvram_index); 186a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn proxy_.ReadSpace(request, base::Bind(callback)); 187644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(1, callback_count); 188644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi} 189644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi 190a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(TpmNvramDBusProxyTest, LockSpace) { 191644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi uint32_t nvram_index = 5; 192a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn auto fake_dbus_call = [nvram_index]( 193644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MethodCall* method_call, 194644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi const dbus::MockObjectProxy::ResponseCallback& response_callback) { 195644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Verify request protobuf. 196644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageReader reader(method_call); 197a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LockSpaceRequest request; 198644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(reader.PopArrayOfBytesAsProto(&request)); 199644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(request.has_index()); 200644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(nvram_index, request.index()); 201644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Create reply protobuf. 202644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi auto response = dbus::Response::CreateEmpty(); 203644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageWriter writer(response.get()); 204a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LockSpaceReply reply; 205a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn reply.set_result(NVRAM_RESULT_SUCCESS); 206644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi writer.AppendProtoAsArrayOfBytes(reply); 207644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi response_callback.Run(response.release()); 208644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 209644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_CALL(*mock_object_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 210644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi .WillOnce(WithArgs<0, 2>(Invoke(fake_dbus_call))); 211644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Set expectations on the outputs. 212644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi int callback_count = 0; 213a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn auto callback = [&callback_count](const LockSpaceReply& reply) { 214644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi callback_count++; 215a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, reply.result()); 216644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 217a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LockSpaceRequest request; 218644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi request.set_index(nvram_index); 219a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn proxy_.LockSpace(request, base::Bind(callback)); 220644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(1, callback_count); 221644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi} 222644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi 223a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(TpmNvramDBusProxyTest, ListSpaces) { 224a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn constexpr uint32_t nvram_index_list[] = {3, 4, 5}; 225a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn auto fake_dbus_call = [nvram_index_list]( 226644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MethodCall* method_call, 227644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi const dbus::MockObjectProxy::ResponseCallback& response_callback) { 228644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Verify request protobuf. 229644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageReader reader(method_call); 230a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn ListSpacesRequest request; 231644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(reader.PopArrayOfBytesAsProto(&request)); 232644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Create reply protobuf. 233644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi auto response = dbus::Response::CreateEmpty(); 234644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageWriter writer(response.get()); 235a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn ListSpacesReply reply; 236a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn reply.set_result(NVRAM_RESULT_SUCCESS); 237a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn for (auto index : nvram_index_list) { 238a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn reply.add_index_list(index); 239a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn } 240644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi writer.AppendProtoAsArrayOfBytes(reply); 241644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi response_callback.Run(response.release()); 242644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 243644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_CALL(*mock_object_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 244644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi .WillOnce(WithArgs<0, 2>(Invoke(fake_dbus_call))); 245644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Set expectations on the outputs. 246644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi int callback_count = 0; 2474dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn auto callback = [&callback_count, 248a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn nvram_index_list](const ListSpacesReply& reply) { 249644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi callback_count++; 250a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, reply.result()); 251a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(arraysize(nvram_index_list), reply.index_list_size()); 252a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn for (size_t i = 0; i < 3; i++) { 253a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(nvram_index_list[i], reply.index_list(i)); 254a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn } 255644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 256a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn ListSpacesRequest request; 257a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn proxy_.ListSpaces(request, base::Bind(callback)); 258644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(1, callback_count); 259644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi} 260644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi 261a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(TpmNvramDBusProxyTest, GetSpaceInfo) { 262644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi uint32_t nvram_index = 5; 263644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi size_t nvram_size = 32; 264644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi auto fake_dbus_call = [nvram_index, nvram_size]( 265644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MethodCall* method_call, 266644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi const dbus::MockObjectProxy::ResponseCallback& response_callback) { 267644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Verify request protobuf. 268644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageReader reader(method_call); 269a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn GetSpaceInfoRequest request; 270644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(reader.PopArrayOfBytesAsProto(&request)); 271644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(request.has_index()); 272644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(nvram_index, request.index()); 273644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Create reply protobuf. 274644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi auto response = dbus::Response::CreateEmpty(); 275644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi dbus::MessageWriter writer(response.get()); 276a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn GetSpaceInfoReply reply; 277a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn reply.set_result(NVRAM_RESULT_SUCCESS); 278644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi reply.set_size(nvram_size); 279644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi writer.AppendProtoAsArrayOfBytes(reply); 280644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi response_callback.Run(response.release()); 281644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 282644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_CALL(*mock_object_proxy_, CallMethodWithErrorCallback(_, _, _, _)) 283644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi .WillOnce(WithArgs<0, 2>(Invoke(fake_dbus_call))); 284644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi // Set expectations on the outputs. 285644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi int callback_count = 0; 2864dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn auto callback = [&callback_count, 287a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn nvram_size](const GetSpaceInfoReply& reply) { 288644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi callback_count++; 289a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, reply.result()); 290644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_TRUE(reply.has_size()); 291644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(nvram_size, reply.size()); 292644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi }; 293a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn GetSpaceInfoRequest request; 294644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi request.set_index(nvram_index); 295a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn proxy_.GetSpaceInfo(request, base::Bind(callback)); 296644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi EXPECT_EQ(1, callback_count); 297644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi} 298644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi 299f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn} // namespace tpm_manager 300