googleapis / googleapis/google-cloud-java

[java-firestore] Ability to set emulator host/port from .setHost rather than env var

オープン
#13,143 コメント 8 件 リアクション 0 件 担当者 0 名 GitHub で見る
api: firestore type: feature request
主要言語
Java
スター
2.1k
フォーク
1.2k
平均マージ
1日 23時間
マージ済み PR(30日)
154

説明

#### Environment details

1. OSX, Java

#### Steps to reproduce

1. To use Testcontainer + Firestore emulator is extremely difficult.

#### Code example
Firestore client library can only connect to a firestore emulator by using an env var. This is not idiomatic for Java unit tests.

it's impossible to set the emulator host/port simply from `.setHost(..)`
```java
FirestoreOptions firestoreOptions =
FirestoreOptions.newBuilder().setHost(...).
```

The real code is this:
```java
// duplicate the FakeCredentials class because it's package protected and not publicly accessible.
static class FakeCredentials extends Credentials {
private final Map> HEADERS =
ImmutableMap.of("Authorization", Arrays.asList("Bearer owner"));
...
}

// then, duplicate the code that otherwise executes from an env var:
FirestoreOptions firestoreOptions =
FirestoreOptions.newBuilder()
.setProjectId(FIRESTORE_PROJECT_ID)
.setChannelProvider(
InstantiatingGrpcChannelProvider.newBuilder()
.setEndpoint(
String.format(
"%s:%d",
FIRESTORE_CONTAINER.getContainerIpAddress(),
FIRESTORE_CONTAINER.getMappedPort(8080)))
.setChannelConfigurator(
(managedChannelBuilder -> managedChannelBuilder.usePlaintext()))
.build())
.setCredentialsProvider(FixedCredentialsProvider.create(new FakeCredentials()))
.build();

```

#### Any additional information below
It'd be MUCH easier if emulator host/port can simply be set via .setHost(...), OR, a convenience method, such as .useEmulator(host, port)

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。