diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/testing/LocalDatastoreHelper.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/testing/LocalDatastoreHelper.java index e586f7e55..db4bd112e 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/testing/LocalDatastoreHelper.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/testing/LocalDatastoreHelper.java @@ -16,6 +16,8 @@ package com.google.cloud.datastore.testing; +import static com.google.common.base.MoreObjects.firstNonNull; + import com.google.api.core.InternalApi; import com.google.cloud.NoCredentials; import com.google.cloud.ServiceOptions; @@ -68,7 +70,9 @@ public class LocalDatastoreHelper extends BaseEmulatorHelper { // Common settings private static final String CONSISTENCY_FLAG = "--consistency="; + private static final String PROJECT_FLAG = "--project="; private static final double DEFAULT_CONSISTENCY = 0.9; + private static final String DEFAULT_PROJECT_ID = PROJECT_ID_PREFIX + UUID.randomUUID(); private static final Logger LOGGER = Logger.getLogger(LocalDatastoreHelper.class.getName()); @@ -90,6 +94,7 @@ public static class Builder { private int port; private Path dataDir; private boolean storeOnDisk = true; + private String projectId; private Builder() {} @@ -109,6 +114,11 @@ public Builder setPort(int port) { return this; } + public Builder setProjectId(String projectId) { + this.projectId = projectId; + return this; + } + public Builder setDataDir(Path dataDir) { this.dataDir = dataDir; return this; @@ -129,7 +139,8 @@ private LocalDatastoreHelper(Builder builder) { super( "datastore", builder.port > 0 ? builder.port : BaseEmulatorHelper.findAvailablePort(DEFAULT_PORT), - PROJECT_ID_PREFIX + UUID.randomUUID().toString()); + firstNonNull(builder.projectId, DEFAULT_PROJECT_ID)); + String projectId = firstNonNull(builder.projectId, DEFAULT_PROJECT_ID); this.consistency = builder.consistency > 0 ? builder.consistency : DEFAULT_CONSISTENCY; this.gcdPath = builder.dataDir; this.storeOnDisk = builder.storeOnDisk; @@ -140,6 +151,7 @@ private LocalDatastoreHelper(Builder builder) { List gcloudCommand = new ArrayList<>(Arrays.asList(GCLOUD_CMD_TEXT.split(" "))); gcloudCommand.add(GCLOUD_CMD_PORT_FLAG + "localhost:" + getPort()); gcloudCommand.add(CONSISTENCY_FLAG + builder.consistency); + gcloudCommand.add(PROJECT_FLAG + projectId); if (!builder.storeOnDisk) { gcloudCommand.add("--no-store-on-disk"); } diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/testing/ITLocalDatastoreHelperTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/testing/ITLocalDatastoreHelperTest.java index 6cc236a8b..8a7fd88b0 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/testing/ITLocalDatastoreHelperTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/testing/ITLocalDatastoreHelperTest.java @@ -88,6 +88,14 @@ public void testCreateWithBuilder() { assertTrue(incompleteHelper.getProjectId().startsWith(PROJECT_ID_PREFIX)); } + @Test + public void testCreateWithCustomProjectId() { + String customProjectId = "custom-project-id"; + LocalDatastoreHelper helper = + LocalDatastoreHelper.newBuilder().setProjectId(customProjectId).build(); + assertEquals(customProjectId, helper.getProjectId()); + } + @Test public void testCreateWithToBuilder() throws IOException { LocalDatastoreHelper helper =