{"action":"created","comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/pulls/comments/177311422","pull_request_review_id":107156178,"id":177311422,"diff_hunk":"@@ -13,13 +13,278 @@\n // limitations under the License.\n \n #include \"bigtable/client/metadata_update_policy.h\"\n+#include \"bigtable/client/admin_client.h\"\n+#include \"bigtable/client/internal/make_unique.h\"\n+#include \"bigtable/client/table.h\"\n+#include \"bigtable/client/table_admin.h\"\n+#include \"google/bigtable/v2/bigtable.grpc.pb.h\"\n+#include <google/bigtable/admin/v2/bigtable_table_admin.grpc.pb.h>\n #include <gtest/gtest.h>\n+#include <thread>\n \n std::string const kInstanceName = \"projects/foo-project/instances/bar-instance\";\n std::string const kTableId = \"baz-table\";\n std::string const kTableName =\n     \"projects/foo-project/instances/bar-instance/tables/baz-table\";\n \n+namespace btproto = google::bigtable::v2;\n+namespace adminproto = google::bigtable::admin::v2;\n+\n+/**\n+ * Implement the portions of the `google.bigtable.v2.Bigtable` interface\n+ * necessary for the embedded server tests.\n+ *\n+ * This is not a Mock (use `google::bigtable::v2::MockBigtableStub` for that,\n+ * nor is this a Fake implementation (use the Cloud Bigtable Emulator for that),\n+ * this is an implementation of the interface that returns hardcoded values.\n+ * It is suitable for the embedded server tests, but for nothing else.\n+ */\n+class BigtableImpl final : public btproto::Bigtable::Service {\n+ public:\n+  BigtableImpl() {}\n+  grpc::Status ReadRows(\n+      grpc::ServerContext* context,\n+      google::bigtable::v2::ReadRowsRequest const* request,\n+      grpc::ServerWriter<google::bigtable::v2::ReadRowsResponse>* writer)\n+      override {\n+    for (std::multimap<grpc::string_ref, grpc::string_ref>::const_iterator it =\n+             context->client_metadata().begin();\n+         it != context->client_metadata().end(); ++it) {\n+      auto ele = std::make_pair((*it).first, (*it).second);\n+      client_metadata_.emplace(ele);\n+    }\n+    return grpc::Status::OK;\n+  }\n+\n+  const std::multimap<grpc::string_ref, grpc::string_ref>& client_metadata()\n+      const {\n+    return client_metadata_;\n+  }\n+\n+ private:\n+  std::multimap<grpc::string_ref, grpc::string_ref> client_metadata_;\n+};\n+\n+/**\n+ * Implement the `google.bigtable.admin.v2.BigtableTableAdmin` interface for the\n+ * embedded server tests.\n+ */\n+class TableAdminImpl final : public adminproto::BigtableTableAdmin::Service {\n+ public:\n+  TableAdminImpl() {}\n+\n+  grpc::Status CreateTable(\n+      grpc::ServerContext* context,\n+      google::bigtable::admin::v2::CreateTableRequest const* request,\n+      google::bigtable::admin::v2::Table* response) override {\n+    for (std::multimap<grpc::string_ref, grpc::string_ref>::const_iterator it =\n+             context->client_metadata().begin();\n+         it != context->client_metadata().end(); ++it) {\n+      auto ele = std::make_pair((*it).first, (*it).second);\n+      client_metadata_.emplace(ele);\n+    }\n+    return grpc::Status::OK;\n+  }\n+\n+  grpc::Status DeleteTable(\n+      grpc::ServerContext* context,\n+      google::bigtable::admin::v2::DeleteTableRequest const* request,\n+      ::google::protobuf::Empty* response) override {\n+    for (std::multimap<grpc::string_ref, grpc::string_ref>::const_iterator it =\n+             context->client_metadata().begin();\n+         it != context->client_metadata().end(); ++it) {\n+      auto ele = std::make_pair((*it).first, (*it).second);\n+      client_metadata_.emplace(ele);\n+    }\n+    return grpc::Status::OK;\n+  }\n+\n+  grpc::Status GetTable(\n+      grpc::ServerContext* context,\n+      google::bigtable::admin::v2::GetTableRequest const* request,\n+      google::bigtable::admin::v2::Table* response) override {\n+    for (std::multimap<grpc::string_ref, grpc::string_ref>::const_iterator it =\n+             context->client_metadata().begin();\n+         it != context->client_metadata().end(); ++it) {\n+      auto ele = std::make_pair((*it).first, (*it).second);\n+      client_metadata_.emplace(ele);\n+    }\n+    return grpc::Status::OK;\n+  }\n+\n+  const std::multimap<grpc::string_ref, grpc::string_ref>& client_metadata()\n+      const {\n+    return client_metadata_;\n+  }\n+\n+ private:\n+  std::multimap<grpc::string_ref, grpc::string_ref> client_metadata_;\n+};\n+\n+/// The implementation of EmbeddedServer.\n+class DefaultEmbeddedServer {\n+ public:\n+  explicit DefaultEmbeddedServer() {\n+    int port;\n+    std::string server_address(\"[::]:0\");\n+    builder_.AddListeningPort(server_address, grpc::InsecureServerCredentials(),\n+                              &port);\n+    builder_.RegisterService(&bigtable_service_);\n+    builder_.RegisterService(&admin_service_);\n+    server_ = builder_.BuildAndStart();\n+    address_ = \"localhost:\" + std::to_string(port);\n+  }\n+\n+  std::string address() const { return address_; }\n+  void Shutdown() { server_->Shutdown(); }\n+  void Wait() { server_->Wait(); }\n+  const std::multimap<grpc::string_ref, grpc::string_ref>&\n+  admin_service_client_metadata() const {\n+    return admin_service_.client_metadata();\n+  }\n+  const std::multimap<grpc::string_ref, grpc::string_ref>&\n+  bigtable_service_client_metadata() const {\n+    return bigtable_service_.client_metadata();\n+  }\n+\n+ private:\n+  BigtableImpl bigtable_service_;\n+  TableAdminImpl admin_service_;\n+  grpc::ServerBuilder builder_;\n+  std::unique_ptr<grpc::Server> server_;\n+  std::string address_;\n+};\n+\n+/// @test A test for setting metadata when table is not known.\n+TEST(MetadataUpdatePolicy, RunWithEmbeddedServer) {\n+  std::unique_ptr<DefaultEmbeddedServer> server =\n+      bigtable::internal::make_unique<DefaultEmbeddedServer>();\n+  std::string address = server->address();\n+  EXPECT_FALSE(server->address().empty());\n+  bigtable::ClientOptions options;\n+  options.set_admin_endpoint(address);\n+  options.set_data_endpoint(address);\n+  options.SetCredentials(grpc::InsecureChannelCredentials());\n+  std::thread wait_thread([&server]() { server->Wait(); });\n+  EXPECT_TRUE(wait_thread.joinable());\n+\n+  // Create the table against embedded server.\n+  bigtable::TableAdmin admin(\n+      bigtable::CreateDefaultAdminClient(\"fake-project\", options),\n+      \"fake-instance\");\n+  grpc::string_ref expected_x_goog_request_param =\n+      \"parent=projects/fake-project/instances/fake-instance\";\n+\n+  auto gc = bigtable::GcRule::MaxNumVersions(42);\n+  admin.CreateTable(\"fake-table-01\", bigtable::TableConfig({{\"fam\", gc}}, {}));\n+\n+  // Get the metadata from embedded server\n+  auto client_metadata = server->admin_service_client_metadata();\n+  std::pair<std::multimap<grpc::string_ref, grpc::string_ref>::iterator,\n+            std::multimap<grpc::string_ref, grpc::string_ref>::iterator>\n+      result;\n+  result = client_metadata.equal_range(\"x-goog-request-params\");\n+  // first check to see if client_metadata has only one occurance of parameter.\n+  EXPECT_EQ(1, std::distance(result.first, result.second));\n+\n+  for (std::multimap<grpc::string_ref, grpc::string_ref>::iterator it =\n+           result.first;\n+       it != result.second; ++it) {\n+    grpc::string_ref actual_x_goog_request_param = it->second;\n+    EXPECT_EQ(expected_x_goog_request_param, actual_x_goog_request_param);\n+  }\n+  EXPECT_TRUE(wait_thread.joinable());\n+  server->Shutdown();\n+  wait_thread.join();\n+}\n+/// @test A test for setting metadata when table_id is known during the call.\n+TEST(MetadataUpdatePolicy, RunWithEmbeddedServerLazyMetadata) {\n+  std::unique_ptr<DefaultEmbeddedServer> server =\n+      bigtable::internal::make_unique<DefaultEmbeddedServer>();\n+  std::string address = server->address();\n+  EXPECT_FALSE(server->address().empty());\n+  bigtable::ClientOptions options;\n+  options.set_admin_endpoint(address);\n+  options.set_data_endpoint(address);\n+  options.SetCredentials(grpc::InsecureChannelCredentials());\n+  std::thread wait_thread([&server]() { server->Wait(); });\n+  EXPECT_TRUE(wait_thread.joinable());\n+\n+  // Create the table against embedded server.\n+  bigtable::TableAdmin admin(\n+      bigtable::CreateDefaultAdminClient(\"fake-project\", options),\n+      \"fake-instance\");\n+\n+  admin.GetTable(\"fake-table-01\");\n+\n+  grpc::string_ref expected_x_goog_request_param =\n+      \"name=projects/fake-project/instances/fake-instance/tables/fake-table-01\";\n+  // Get the metadata from embedded server\n+  auto client_metadata = server->admin_service_client_metadata();\n+  std::pair<std::multimap<grpc::string_ref, grpc::string_ref>::iterator,\n+            std::multimap<grpc::string_ref, grpc::string_ref>::iterator>\n+      result;\n+  result = client_metadata.equal_range(\"x-goog-request-params\");\n+  // first check to see if client_metadata has only one occurance of parameter.\n+  EXPECT_EQ(1, std::distance(result.first, result.second));\n+\n+  for (std::multimap<grpc::string_ref, grpc::string_ref>::iterator it =\n+           result.first;\n+       it != result.second; ++it) {\n+    grpc::string_ref actual_x_goog_request_param = it->second;\n+    EXPECT_EQ(expected_x_goog_request_param, actual_x_goog_request_param);\n+  }\n+  EXPECT_TRUE(wait_thread.joinable());\n+  server->Shutdown();\n+  wait_thread.join();\n+}\n+\n+/// @test A test for setting metadata when table_id is known during the call.\n+TEST(MetadataUpdatePolicy, RunWithEmbeddedServerParamTableName) {\n+  std::unique_ptr<DefaultEmbeddedServer> server =\n+      bigtable::internal::make_unique<DefaultEmbeddedServer>();\n+  std::string address = server->address();\n+  EXPECT_FALSE(server->address().empty());\n+  bigtable::ClientOptions options;\n+  options.set_admin_endpoint(address);\n+  options.set_data_endpoint(address);\n+  options.SetCredentials(grpc::InsecureChannelCredentials());\n+  std::thread wait_thread([&server]() { server->Wait(); });\n+  EXPECT_TRUE(wait_thread.joinable());\n+\n+  bigtable::Table table(bigtable::CreateDefaultDataClient(","path":"bigtable/client/metadata_update_policy_test.cc","position":null,"original_position":243,"commit_id":"65308e4846f762e946f8c8191be4a94e282ff487","original_commit_id":"7e5fe54d63f17bc86d1d7675504a57208590f68f","user":{"login":"manish-qlogic","id":36055509,"avatar_url":"https://avatars2.githubusercontent.com/u/36055509?v=4","gravatar_id":"","url":"https://api.github.com/users/manish-qlogic","html_url":"https://github.com/manish-qlogic","followers_url":"https://api.github.com/users/manish-qlogic/followers","following_url":"https://api.github.com/users/manish-qlogic/following{/other_user}","gists_url":"https://api.github.com/users/manish-qlogic/gists{/gist_id}","starred_url":"https://api.github.com/users/manish-qlogic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/manish-qlogic/subscriptions","organizations_url":"https://api.github.com/users/manish-qlogic/orgs","repos_url":"https://api.github.com/users/manish-qlogic/repos","events_url":"https://api.github.com/users/manish-qlogic/events{/privacy}","received_events_url":"https://api.github.com/users/manish-qlogic/received_events","type":"User","site_admin":false},"body":"created new DataClient and AdminClient to use predefined channel.","created_at":"2018-03-27T05:28:18Z","updated_at":"2018-03-27T05:28:18Z","html_url":"https://github.com/GoogleCloudPlatform/google-cloud-cpp/pull/363#discussion_r177311422","pull_request_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/pulls/363","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/pulls/comments/177311422"},"html":{"href":"https://github.com/GoogleCloudPlatform/google-cloud-cpp/pull/363#discussion_r177311422"},"pull_request":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/pulls/363"}},"in_reply_to_id":176250513},"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/pulls/363","id":176582240,"html_url":"https://github.com/GoogleCloudPlatform/google-cloud-cpp/pull/363","diff_url":"https://github.com/GoogleCloudPlatform/google-cloud-cpp/pull/363.diff","patch_url":"https://github.com/GoogleCloudPlatform/google-cloud-cpp/pull/363.patch","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/issues/363","number":363,"state":"open","locked":false,"title":"unit tests in MetadataUpdatePolicy for parent, name and table_name x_goog_Request_params","user":{"login":"manish-qlogic","id":36055509,"avatar_url":"https://avatars2.githubusercontent.com/u/36055509?v=4","gravatar_id":"","url":"https://api.github.com/users/manish-qlogic","html_url":"https://github.com/manish-qlogic","followers_url":"https://api.github.com/users/manish-qlogic/followers","following_url":"https://api.github.com/users/manish-qlogic/following{/other_user}","gists_url":"https://api.github.com/users/manish-qlogic/gists{/gist_id}","starred_url":"https://api.github.com/users/manish-qlogic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/manish-qlogic/subscriptions","organizations_url":"https://api.github.com/users/manish-qlogic/orgs","repos_url":"https://api.github.com/users/manish-qlogic/repos","events_url":"https://api.github.com/users/manish-qlogic/events{/privacy}","received_events_url":"https://api.github.com/users/manish-qlogic/received_events","type":"User","site_admin":false},"body":"added embedded server test cases for 3 different scenarios","created_at":"2018-03-21T19:13:45Z","updated_at":"2018-03-27T05:28:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"51c854f29955151470e4cf22637faeef1dbc1450","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":760104389,"url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/labels/cla:%20yes","name":"cla: yes","color":"0e8a16","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/pulls/363/commits","review_comments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/pulls/363/comments","review_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/issues/363/comments","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/statuses/65308e4846f762e946f8c8191be4a94e282ff487","head":{"label":"manish-qlogic:unit-test-for-MetadataUpdatePolicy","ref":"unit-test-for-MetadataUpdatePolicy","sha":"65308e4846f762e946f8c8191be4a94e282ff487","user":{"login":"manish-qlogic","id":36055509,"avatar_url":"https://avatars2.githubusercontent.com/u/36055509?v=4","gravatar_id":"","url":"https://api.github.com/users/manish-qlogic","html_url":"https://github.com/manish-qlogic","followers_url":"https://api.github.com/users/manish-qlogic/followers","following_url":"https://api.github.com/users/manish-qlogic/following{/other_user}","gists_url":"https://api.github.com/users/manish-qlogic/gists{/gist_id}","starred_url":"https://api.github.com/users/manish-qlogic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/manish-qlogic/subscriptions","organizations_url":"https://api.github.com/users/manish-qlogic/orgs","repos_url":"https://api.github.com/users/manish-qlogic/repos","events_url":"https://api.github.com/users/manish-qlogic/events{/privacy}","received_events_url":"https://api.github.com/users/manish-qlogic/received_events","type":"User","site_admin":false},"repo":{"id":120631859,"name":"google-cloud-cpp","full_name":"manish-qlogic/google-cloud-cpp","owner":{"login":"manish-qlogic","id":36055509,"avatar_url":"https://avatars2.githubusercontent.com/u/36055509?v=4","gravatar_id":"","url":"https://api.github.com/users/manish-qlogic","html_url":"https://github.com/manish-qlogic","followers_url":"https://api.github.com/users/manish-qlogic/followers","following_url":"https://api.github.com/users/manish-qlogic/following{/other_user}","gists_url":"https://api.github.com/users/manish-qlogic/gists{/gist_id}","starred_url":"https://api.github.com/users/manish-qlogic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/manish-qlogic/subscriptions","organizations_url":"https://api.github.com/users/manish-qlogic/orgs","repos_url":"https://api.github.com/users/manish-qlogic/repos","events_url":"https://api.github.com/users/manish-qlogic/events{/privacy}","received_events_url":"https://api.github.com/users/manish-qlogic/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/manish-qlogic/google-cloud-cpp","description":"Google Cloud Client Library for C++","fork":true,"url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp","forks_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/forks","keys_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/teams","hooks_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/hooks","issue_events_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/issues/events{/number}","events_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/events","assignees_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/assignees{/user}","branches_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/branches{/branch}","tags_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/tags","blobs_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/git/refs{/sha}","trees_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/statuses/{sha}","languages_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/languages","stargazers_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/stargazers","contributors_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/contributors","subscribers_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/subscribers","subscription_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/subscription","commits_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/commits{/sha}","git_commits_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/git/commits{/sha}","comments_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/comments{/number}","issue_comment_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/issues/comments{/number}","contents_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/contents/{+path}","compare_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/merges","archive_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/downloads","issues_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/issues{/number}","pulls_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/pulls{/number}","milestones_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/milestones{/number}","notifications_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/labels{/name}","releases_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/releases{/id}","deployments_url":"https://api.github.com/repos/manish-qlogic/google-cloud-cpp/deployments","created_at":"2018-02-07T15:19:54Z","updated_at":"2018-03-27T05:16:25Z","pushed_at":"2018-03-27T05:20:34Z","git_url":"git://github.com/manish-qlogic/google-cloud-cpp.git","ssh_url":"git@github.com:manish-qlogic/google-cloud-cpp.git","clone_url":"https://github.com/manish-qlogic/google-cloud-cpp.git","svn_url":"https://github.com/manish-qlogic/google-cloud-cpp","homepage":"https://cloud.google.com/","size":26184,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"GoogleCloudPlatform:master","ref":"master","sha":"f15198ce45f3c8330d6365edb15bc580fde2346d","user":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars0.githubusercontent.com/u/2810941?v=4","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":111860063,"name":"google-cloud-cpp","full_name":"GoogleCloudPlatform/google-cloud-cpp","owner":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars0.githubusercontent.com/u/2810941?v=4","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GoogleCloudPlatform/google-cloud-cpp","description":"Google Cloud Client Library for C++","fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/releases{/id}","deployments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/deployments","created_at":"2017-11-24T00:19:31Z","updated_at":"2018-03-27T01:18:57Z","pushed_at":"2018-03-27T05:20:36Z","git_url":"git://github.com/GoogleCloudPlatform/google-cloud-cpp.git","ssh_url":"git@github.com:GoogleCloudPlatform/google-cloud-cpp.git","clone_url":"https://github.com/GoogleCloudPlatform/google-cloud-cpp.git","svn_url":"https://github.com/GoogleCloudPlatform/google-cloud-cpp","homepage":"https://cloud.google.com/","size":84842,"stargazers_count":18,"watchers_count":18,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":true,"forks_count":15,"mirror_url":null,"archived":false,"open_issues_count":48,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":15,"open_issues":48,"watchers":18,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/pulls/363"},"html":{"href":"https://github.com/GoogleCloudPlatform/google-cloud-cpp/pull/363"},"issue":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/issues/363"},"comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/issues/363/comments"},"review_comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/pulls/363/comments"},"review_comment":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/pulls/363/commits"},"statuses":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-cpp/statuses/65308e4846f762e946f8c8191be4a94e282ff487"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"manish-qlogic"}}