Google Cloud IAM C++ Client 2.13.0
A C++ Client Library for Google Cloud IAM
Loading...
Searching...
No Matches
Testing your Cloud IAM Credentials 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 IAMCredentialsClient::SignJwt() call

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

#include "google/cloud/iam/credentials/v1/iam_credentials_client.h"
#include "google/cloud/iam/credentials/v1/mocks/mock_iam_credentials_connection.h"
#include <gmock/gmock.h>

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

using ::google::cloud::iam_credentials_v1_mocks::MockIAMCredentialsConnection;
namespace iam = ::google::cloud::iam_credentials_v1;

Create a mocking object for google::cloud::iam_credentials_v1::IAMCredentialsConnection:

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

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

EXPECT_CALL(*mock, SignJwt)
.WillOnce(
[&](google::iam::credentials::v1::SignJwtRequest const& request) {
EXPECT_EQ("projects/-/serviceAccounts/test-account-unique-id",
request.name());
google::iam::credentials::v1::SignJwtResponse response;
response.set_key_id("test-key-id");
google::iam::credentials::v1::SignJwtResponse>(response);
});

With the expectations in place, create a google::cloud::iam_credentials_v1::IAMCredentialsClient object:

iam::IAMCredentialsClient iam_credentials_client(mock);

And then make calls on the client as usual:

std::string payload;
auto response = iam_credentials_client.SignJwt(
"projects/-/serviceAccounts/test-account-unique-id", {}, payload);

And then verify the results meet your expectations:

EXPECT_TRUE(response.ok());
EXPECT_EQ("test-key-id", response->key_id());

Full Listing

Finally we present the full code for this example:

#include "google/cloud/iam/credentials/v1/iam_credentials_client.h"
#include "google/cloud/iam/credentials/v1/mocks/mock_iam_credentials_connection.h"
#include <gmock/gmock.h>
namespace {
using ::google::cloud::iam_credentials_v1_mocks::MockIAMCredentialsConnection;
namespace iam = ::google::cloud::iam_credentials_v1;
TEST(MockSignJwtExample, SignJwt) {
auto mock = std::make_shared<MockIAMCredentialsConnection>();
EXPECT_CALL(*mock, SignJwt)
.WillOnce(
[&](google::iam::credentials::v1::SignJwtRequest const& request) {
EXPECT_EQ("projects/-/serviceAccounts/test-account-unique-id",
request.name());
google::iam::credentials::v1::SignJwtResponse response;
response.set_key_id("test-key-id");
google::iam::credentials::v1::SignJwtResponse>(response);
});
iam::IAMCredentialsClient iam_credentials_client(mock);
std::string payload;
auto response = iam_credentials_client.SignJwt(
"projects/-/serviceAccounts/test-account-unique-id", {}, payload);
EXPECT_TRUE(response.ok());
EXPECT_EQ("test-key-id", response->key_id());
}
} // namespace