Google Cloud IAM C++ Client 2.13.0
A C++ Client Library for Google Cloud IAM
Loading...
Searching...
No Matches
Testing your Cloud IAM application with googlemock

This document describes how to test your own Cloud IAM application using the Cloud IAM C++ client library, Google Test and the Google Test Mocking Framework.

Mocking a Successful IAMClient::GetServiceAccount() call

First include the headers for the Cloud IAM Client, the mocking class, and the Google Mock framework:

#include "google/cloud/iam/admin/v1/iam_client.h"
#include "google/cloud/iam/admin/v1/mocks/mock_iam_connection.h"
#include <gmock/gmock.h>

The example uses a number of aliases to save typing and improve readability:

using ::google::cloud::iam_admin_v1_mocks::MockIAMConnection;
namespace iam = ::google::cloud::iam_admin_v1;

Create a mocking object for google::cloud::iam_admin_v1::IAMConnection:

auto mock = std::make_shared<MockIAMConnection>();

It is customary to first setup the expectations for your mock, and then write the rest of the code:

EXPECT_CALL(*mock, GetServiceAccount)
.WillOnce([&](google::iam::admin::v1::GetServiceAccountRequest const&
request) {
EXPECT_EQ("test-project-name", request.name());
google::iam::admin::v1::ServiceAccount service_account;
service_account.set_unique_id("test-unique-id");
service_account);
});

With the expectations in place, create a google::cloud::iam_admin_v1::IAMClient object:

iam::IAMClient iam_client(mock);

And then make calls on the client as usual:

auto service_account = iam_client.GetServiceAccount("test-project-name");

And then verify the results meet your expectations:

EXPECT_TRUE(service_account.ok());
EXPECT_EQ("test-unique-id", service_account->unique_id());

Full Listing

Finally we present the full code for this example:

#include "google/cloud/iam/admin/v1/iam_client.h"
#include "google/cloud/iam/admin/v1/mocks/mock_iam_connection.h"
#include <gmock/gmock.h>
namespace {
using ::google::cloud::iam_admin_v1_mocks::MockIAMConnection;
namespace iam = ::google::cloud::iam_admin_v1;
TEST(MockGetServiceAccountExample, GetServiceAccount) {
auto mock = std::make_shared<MockIAMConnection>();
EXPECT_CALL(*mock, GetServiceAccount)
.WillOnce([&](google::iam::admin::v1::GetServiceAccountRequest const&
request) {
EXPECT_EQ("test-project-name", request.name());
google::iam::admin::v1::ServiceAccount service_account;
service_account.set_unique_id("test-unique-id");
service_account);
});
iam::IAMClient iam_client(mock);
auto service_account = iam_client.GetServiceAccount("test-project-name");
EXPECT_TRUE(service_account.ok());
EXPECT_EQ("test-unique-id", service_account->unique_id());
}
} // namespace