googleapis / googleapis/google-cloud-java

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

Abierto
#13,143 8 comentarios 0 reacciones 0 asignados Ver en GitHub
api: firestore type: feature request
Lenguaje dominante
Java
Estrellas
2.1k
Forks
1.2k
Merge medio
1 d 23 h
PR fusionados (30 d)
154

Descripción

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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.