Skip to content

Commit a1b4c9d

Browse files
author
Sam Gammon
committed
Transition to 'testcontainers' for Firestore tests
- Fixes for ADC/creds in CI - Initialize against container and test
1 parent 3d87deb commit a1b4c9d

File tree

5 files changed

+50
-18
lines changed

5 files changed

+50
-18
lines changed

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ endif
139139

140140
# Flag: `DEV`
141141
ifeq ($(DEV),yes)
142-
BASE_ARGS += --config=devkey --test_output=errors
143-
BAZELISK_PREAMBLE = GOOGLE_APPLICATION_CREDENTIALS=$(BUILDKEY_PLAINTEXT)
142+
BASE_ARGS += --test_output=errors
143+
#BAZELISK_PREAMBLE = GOOGLE_APPLICATION_CREDENTIALS=$(BUILDKEY_PLAINTEXT)
144144
endif
145145

146146
# Flag: `STRICT`.

java/gust/backend/driver/firestore/FirestoreDriver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
*/
7474
@Immutable
7575
@ThreadSafe
76-
@SuppressWarnings("UnstableApiUsage")
76+
@SuppressWarnings({"UnstableApiUsage", "OptionalUsedAsFieldOrParameterType"})
7777
public final class FirestoreDriver<Key extends Message, Model extends Message>
7878
implements DatabaseDriver<Key, Model, DocumentSnapshot, CollapsedMessage> {
7979
/** Private log pipe. */

javatests/gust/backend/driver/firestore/BUILD.bazel

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,10 @@ _COMMON_DEPS = [
3434
maven("com.google.truth:truth"),
3535
maven("com.google.truth.extensions:truth-java8-extension"),
3636
maven("com.google.truth.extensions:truth-proto-extension"),
37-
maven("com.testcontainers:testcontainers"),
38-
maven("com.testcontainers:junit-jupiter"),
39-
maven("com.testcontainers:gcloud"),
37+
maven("com.google.cloud:google-cloud-firestore"),
38+
maven("org.testcontainers:testcontainers"),
39+
maven("org.testcontainers:junit-jupiter"),
40+
maven("org.testcontainers:gcloud"),
4041
]
4142

4243

javatests/gust/backend/driver/firestore/FirestoreAdapterTest.java

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,22 @@
1313
package gust.backend.driver.firestore;
1414

1515

16+
import com.google.api.gax.core.NoCredentialsProvider;
17+
import com.google.cloud.NoCredentials;
18+
import com.google.cloud.firestore.FirestoreOptions;
19+
import com.google.cloud.firestore.v1.stub.FirestoreStubSettings;
20+
import com.google.cloud.grpc.GrpcTransportOptions;
1621
import com.google.common.util.concurrent.ListeningScheduledExecutorService;
1722
import com.google.common.util.concurrent.MoreExecutors;
1823
import gust.backend.model.GenericPersistenceAdapterTest;
1924
import gust.backend.model.PersonRecord.Person;
2025
import gust.backend.model.PersonRecord.PersonKey;
2126
import org.junit.jupiter.api.AfterAll;
22-
import org.junit.jupiter.api.BeforeAll;
27+
import org.junit.jupiter.api.BeforeEach;
28+
import org.testcontainers.containers.FirestoreEmulatorContainer;
29+
import org.testcontainers.junit.jupiter.Container;
30+
import org.testcontainers.junit.jupiter.Testcontainers;
31+
import org.testcontainers.utility.DockerImageName;
2332

2433
import javax.annotation.Nonnull;
2534
import java.util.concurrent.Executors;
@@ -29,18 +38,44 @@
2938

3039

3140
/** Tests for the {@link FirestoreAdapter}. */
41+
@Testcontainers
3242
@SuppressWarnings("UnstableApiUsage")
3343
public final class FirestoreAdapterTest extends GenericPersistenceAdapterTest<FirestoreAdapter<PersonKey, Person>> {
3444
private static ListeningScheduledExecutorService executorService;
3545
private static FirestoreAdapter<PersonKey, Person> personAdapter;
46+
private static final String firestoreVersion = System.getProperty(
47+
"e2e.firestoreVersion", "349.0.0-emulators");
3648

37-
@BeforeAll
38-
static void initExecutor() {
49+
@Container
50+
public FirestoreEmulatorContainer firestore = new FirestoreEmulatorContainer(
51+
DockerImageName.parse("gcr.io/google.com/cloudsdktool/cloud-sdk:" + firestoreVersion)
52+
).withNetworkAliases("firestore");
53+
54+
@BeforeEach
55+
void initExecutor() {
3956
executorService = MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(3));
57+
var creds = NoCredentialsProvider.create();
58+
59+
var stubSettings = FirestoreStubSettings.newBuilder()
60+
.setEndpoint(firestore.getEmulatorEndpoint())
61+
.setCredentialsProvider(creds);
62+
4063
personAdapter = FirestoreAdapter.acquire(
64+
FirestoreOptions.newBuilder()
65+
.setProjectId("test-project")
66+
.setHost(firestore.getEmulatorEndpoint())
67+
.setEmulatorHost(firestore.getEmulatorEndpoint())
68+
.setCredentials(NoCredentials.getInstance())
69+
.setCredentialsProvider(NoCredentialsProvider.create()),
70+
stubSettings.getTransportChannelProvider()
71+
.withEndpoint(firestore.getEmulatorEndpoint())
72+
.withCredentials(NoCredentials.getInstance()),
73+
stubSettings.getCredentialsProvider(),
74+
GrpcTransportOptions.newBuilder().build(),
75+
executorService,
4176
PersonKey.getDefaultInstance(),
42-
Person.getDefaultInstance(),
43-
executorService);
77+
Person.getDefaultInstance()
78+
);
4479
}
4580

4681
@AfterAll
@@ -60,10 +95,6 @@ static void shutdownExecutor() throws InterruptedException {
6095
/** {@inheritDoc} */
6196
@Override
6297
protected void acquireDriver() {
63-
FirestoreAdapter<PersonKey, Person> personAdapter = FirestoreAdapter.acquire(
64-
PersonKey.getDefaultInstance(),
65-
Person.getDefaultInstance(),
66-
executorService);
6798
assertNotNull(personAdapter, "should not get `null` for adapter acquire");
6899
}
69100
}

tools/bazel.rc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ build --nojava_header_compilation
3030
build:dev --define=project=elide-ai
3131
build:dev --define=todolist_release_tag=latest
3232
build:adc --google_default_credentials=true
33-
build:devkey --google_credentials=crypto/build-key.json
34-
test:devkey --action_env=GOOGLE_APPLICATION_CREDENTIALS
33+
#build:devkey --google_credentials=crypto/build-key.json
34+
#test:devkey --action_env=GOOGLE_APPLICATION_CREDENTIALS
3535

3636
build --watchfs
3737
build --symlink_prefix=dist/
@@ -165,7 +165,7 @@ build:remote --remote_timeout=3600
165165
build:remote --google_default_credentials=true
166166

167167
test --instrumentation_filter=//java/...
168-
test --test_env=GOOGLE_APPLICATION_CREDENTIALS
168+
#test --test_env=GOOGLE_APPLICATION_CREDENTIALS
169169
coverage --instrumentation_filter=//java/...
170170

171171
coverage --collect_code_coverage

0 commit comments

Comments
 (0)