Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ability to set emulator host/port from .setHost rather than env var #7231

Closed
saturnism opened this issue May 8, 2020 · 2 comments
Closed
Assignees

Comments

@saturnism
Copy link

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(..)

FirestoreOptions firestoreOptions =
   FirestoreOptions.newBuilder().setHost(...).

The real code is this:

// duplicate the FakeCredentials class because it's package protected and not publicly accessible.
static class FakeCredentials extends Credentials {
 private final Map<String, List<String>> 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)

@saturnism
Copy link
Author

/cc @eddumelendez who's also working with TestContainer integration for GCP. https://github.com/eddumelendez/testcontainers-java/tree/gcloud

@saturnism
Copy link
Author

hmm, i think this is the wrong repo after filing the issue. moving to googleapis/java-firestore#210

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant