googleapis / googleapis/google-cloud-java

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

Open
#13,143 8 comments 0 reactions 0 assignees View on GitHub
api: firestore type: feature request
Dominant language
Java
Stars
2.1k
Forks
1.2k
Avg merge
1d 23h
Merged PRs (30d)
154

Description

#### 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)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.