Skip to content
This repository has been archived by the owner on Sep 26, 2023. It is now read-only.

feat: add support for quotaProjectId header #826

Merged
merged 3 commits into from Dec 12, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -42,6 +42,7 @@
@BetaApi("The surface for customizing headers is not stable yet and may change in the future.")
public class ApiClientHeaderProvider implements HeaderProvider, Serializable {
private static final long serialVersionUID = -8876627296793342119L;
static final String QUOTA_PROJECT_ID_HEADER_KEY = "x-goog-user-project";

private final Map<String, String> headers;

Expand All @@ -65,6 +66,10 @@ protected ApiClientHeaderProvider(Builder builder) {
headersBuilder.put(builder.getResourceHeaderKey(), builder.getResourceToken());
}

if (builder.getQuotaProjectIdToken() != null) {
headersBuilder.put(QUOTA_PROJECT_ID_HEADER_KEY, builder.getQuotaProjectIdToken());
}

this.headers = headersBuilder.build();
}

Expand Down Expand Up @@ -101,6 +106,7 @@ public static class Builder {
private String generatedLibToken;
private String generatedRuntimeToken;
private String transportToken;
private String quotaProjectIdToken;

private String resourceHeaderKey;
private String resourceToken;
Expand All @@ -113,6 +119,7 @@ protected Builder() {
generatedLibToken = null;
setClientRuntimeToken(GaxProperties.getGaxVersion());
transportToken = null;
quotaProjectIdToken = null;

resourceHeaderKey = getDefaultResourceHeaderKey();
resourceToken = null;
Expand Down Expand Up @@ -172,6 +179,17 @@ public Builder setTransportToken(String name, String version) {
return this;
}

/** @return the quotaProjectIdToken used for quota and billing purposes. */
public String getQuotaProjectIdToken() {
codyoss marked this conversation as resolved.
Show resolved Hide resolved
return quotaProjectIdToken;
}

/** Sets the project ID used for quota and billing purposes. */
public Builder setQuotaProjectIdToken(String quotaProjectIdToken) {
this.quotaProjectIdToken = quotaProjectIdToken;
return this;
}

public String getResourceHeaderKey() {
return resourceHeaderKey;
}
Expand Down
Expand Up @@ -123,4 +123,19 @@ public void testCustomHeaderKeys() {
.matches("^gl-java/.* gapic/4\\.5\\.6 gax/.* grpc/1\\.2\\.3$");
assertThat(provider.getHeaders().get("custom-header2")).isEqualTo("test-prefix");
}

@Test
public void testQuotaProjectHeader() {
String quotaProjectHeaderValue = "quota-project-id-value";
ApiClientHeaderProvider provider =
ApiClientHeaderProvider.newBuilder()
.setClientLibToken("gccl", "1.2.3")
.setQuotaProjectIdToken(quotaProjectHeaderValue)
.build();
assertThat(provider.getHeaders().size()).isEqualTo(2);
assertThat(provider.getHeaders().get(X_GOOG_API_CLIENT))
.matches("^gl-java/.* gccl/1\\.2\\.3 gax/.*$");
assertThat(provider.getHeaders().get(ApiClientHeaderProvider.QUOTA_PROJECT_ID_HEADER_KEY))
.matches(quotaProjectHeaderValue);
}
}