From 1ae192e2b72124a10b325b0d7769dce22aee1d8d Mon Sep 17 00:00:00 2001 From: at055612 <22818309+at055612@users.noreply.github.com> Date: Tue, 10 Oct 2023 10:33:18 +0100 Subject: [PATCH 1/4] gh-3026 Add more docker managed volumes Also fix core_test stack having auth failures --- .../resources/ui/noauth/swagger/stroom.json | 30 ++++++++++++++++ .../resources/ui/noauth/swagger/stroom.yaml | 22 ++++++++++++ .../stroom-proxy-app/docker/Dockerfile | 6 ++++ .../resources/stroom/dist/proxy-expected.yaml | 3 +- .../java/stroom/proxy/repo/ProxyDbConfig.java | 35 +++++++++++++------ .../java/stroom/proxy/repo/ProxyDbModule.java | 27 ++++++++++++-- .../security/impl/AuthenticationService.java | 14 +++++--- stroom-ui/src/api/stroom.ts | 19 ++++++++++ 8 files changed, 137 insertions(+), 19 deletions(-) diff --git a/stroom-app/src/main/resources/ui/noauth/swagger/stroom.json b/stroom-app/src/main/resources/ui/noauth/swagger/stroom.json index e6e2f234bf6..d183e6ce80d 100644 --- a/stroom-app/src/main/resources/ui/noauth/swagger/stroom.json +++ b/stroom-app/src/main/resources/ui/noauth/swagger/stroom.json @@ -8957,6 +8957,36 @@ "tags" : [ "Authorisation" ] } }, + "/userNames/v1/findAssociates" : { + "post" : { + "operationId" : "findAssociateUserNames", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/FindUserNameCriteria" + } + } + }, + "description" : "criteria", + "required" : true + }, + "responses" : { + "default" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ResultPageUserName" + } + } + }, + "description" : "default response" + } + }, + "summary" : "Find the user names matching the supplied criteria of users who belong to at least one of the same groups as the current user. If the current user is admin or has Manage Users permission then they can see all users.", + "tags" : [ "Authorisation" ] + } + }, "/userNames/v1/getByDisplayName/{displayName}" : { "get" : { "operationId" : "getByDisplayName", diff --git a/stroom-app/src/main/resources/ui/noauth/swagger/stroom.yaml b/stroom-app/src/main/resources/ui/noauth/swagger/stroom.yaml index 377a4c871e1..fa8e4ca3926 100644 --- a/stroom-app/src/main/resources/ui/noauth/swagger/stroom.yaml +++ b/stroom-app/src/main/resources/ui/noauth/swagger/stroom.yaml @@ -6150,6 +6150,28 @@ paths: summary: Find the user names matching the supplied criteria tags: - Authorisation + /userNames/v1/findAssociates: + post: + operationId: findAssociateUserNames + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FindUserNameCriteria' + description: criteria + required: true + responses: + default: + content: + application/json: + schema: + $ref: '#/components/schemas/ResultPageUserName' + description: default response + summary: Find the user names matching the supplied criteria of users who belong + to at least one of the same groups as the current user. If the current user + is admin or has Manage Users permission then they can see all users. + tags: + - Authorisation /userNames/v1/getByDisplayName/{displayName}: get: operationId: getByDisplayName diff --git a/stroom-proxy/stroom-proxy-app/docker/Dockerfile b/stroom-proxy/stroom-proxy-app/docker/Dockerfile index fc39d10c5d8..8b5d44cb99c 100644 --- a/stroom-proxy/stroom-proxy-app/docker/Dockerfile +++ b/stroom-proxy/stroom-proxy-app/docker/Dockerfile @@ -58,6 +58,9 @@ VOLUME /stroom-proxy/certs/ VOLUME /stroom-proxy/content/ VOLUME /stroom-proxy/repo/ VOLUME /stroom-proxy/logs/ +VOLUME /stroom-proxy/db/ +VOLUME /stroom-proxy/failures/ +VOLUME /stroom-proxy/sqlite_library/ # run entrypoint script inside tini for better unix process handling, # see https://github.com/krallin/tini/issues/8 @@ -86,6 +89,9 @@ RUN \ mkdir -p /stroom-proxy/logs/send && \ mkdir -p /stroom-proxy/logs/app && \ mkdir -p /stroom-proxy/repo && \ + mkdir -p /stroom-proxy/db && \ + mkdir -p /stroom-proxy/failures && \ + mkdir -p /stroom-proxy/sqlite_library && \ chown -R proxy:proxy /stroom-proxy # Copy all the fat jars for the application and connectors diff --git a/stroom-proxy/stroom-proxy-app/src/test/resources/stroom/dist/proxy-expected.yaml b/stroom-proxy/stroom-proxy-app/src/test/resources/stroom/dist/proxy-expected.yaml index 2ddfc57f145..f7d9e31a58e 100644 --- a/stroom-proxy/stroom-proxy-app/src/test/resources/stroom/dist/proxy-expected.yaml +++ b/stroom-proxy/stroom-proxy-app/src/test/resources/stroom/dist/proxy-expected.yaml @@ -13,7 +13,7 @@ proxyConfig: syncFrequency: "PT1M" upstreamUrl: null db: - batchSize: 10000000 + batchSize: 1000000 cleanupFrequency: "PT1S" connectionPragma: - "pragma synchronous = normal;" @@ -23,6 +23,7 @@ proxyConfig: flushFrequency: "PT1S" globalPragma: - "pragma journal_mode = WAL;" + libraryDir: "sqlite_library" maintenancePragma: - "pragma wal_checkpoint(truncate);" - "pragma vacuum;" diff --git a/stroom-proxy/stroom-proxy-repo/src/main/java/stroom/proxy/repo/ProxyDbConfig.java b/stroom-proxy/stroom-proxy-repo/src/main/java/stroom/proxy/repo/ProxyDbConfig.java index 1be40bc5740..5df61fdc258 100644 --- a/stroom-proxy/stroom-proxy-repo/src/main/java/stroom/proxy/repo/ProxyDbConfig.java +++ b/stroom-proxy/stroom-proxy-repo/src/main/java/stroom/proxy/repo/ProxyDbConfig.java @@ -35,12 +35,12 @@ public class ProxyDbConfig extends AbstractConfig implements IsProxyConfig { // "pragma incremental_vacuum;"" private static final StroomDuration DEFAULT_MAINTENANCE_PRAGMA_FREQUENCY = StroomDuration.ofMinutes(1); - // TODO: 08/11/2022 Is this meant to be 1mil or 10mil - private static final int DEFAULT_BATCH_SIZE = 1_0000_000; + private static final int DEFAULT_BATCH_SIZE = 1_000_000; protected static final StroomDuration DEFAULT_FLUSH_FREQUENCY = StroomDuration.ofSeconds(1); protected static final StroomDuration DEFAULT_CLEANUP_FREQUENCY = StroomDuration.ofSeconds(1); private final String dbDir; + private final String libraryDir; private final List globalPragma; private final List connectionPragma; private final List maintenancePragma; @@ -52,6 +52,7 @@ public class ProxyDbConfig extends AbstractConfig implements IsProxyConfig { public ProxyDbConfig() { dbDir = "db"; + libraryDir = "sqlite_library"; globalPragma = DEFAULT_GLOBAL_PRAGMA; connectionPragma = DEFAULT_CONNECTION_PRAGMA; maintenancePragma = DEFAULT_MAINTENANCE_PRAGMA; @@ -64,6 +65,7 @@ public ProxyDbConfig() { @JsonCreator public ProxyDbConfig( @JsonProperty("dbDir") final String dbDir, + @JsonProperty("libraryDir") final String libraryDir, @JsonProperty("globalPragma") final List globalPragma, @JsonProperty("connectionPragma") final List connectionPragma, @JsonProperty("maintenancePragma") final List maintenancePragma, @@ -72,6 +74,7 @@ public ProxyDbConfig( @JsonProperty("flushFrequency") final StroomDuration flushFrequency, @JsonProperty("cleanupFrequency") final StroomDuration cleanupFrequency) { this.dbDir = dbDir; + this.libraryDir = libraryDir; this.globalPragma = List.copyOf(globalPragma); this.connectionPragma = List.copyOf(connectionPragma); this.maintenancePragma = maintenancePragma; @@ -88,6 +91,13 @@ public String getDbDir() { return dbDir; } + @RequiresProxyRestart + @JsonProperty + @JsonPropertyDescription("The directory to use for the proxy repository DB Sqlite library files") + public String getLibraryDir() { + return libraryDir; + } + @RequiresProxyRestart @JsonProperty @JsonPropertyDescription("A list of statements to run on the database on startup") @@ -146,18 +156,22 @@ public boolean equals(final Object o) { return false; } final ProxyDbConfig that = (ProxyDbConfig) o; - return batchSize == that.batchSize && Objects.equals(dbDir, that.dbDir) && Objects.equals( - globalPragma, - that.globalPragma) && Objects.equals(connectionPragma, - that.connectionPragma) && Objects.equals(maintenancePragma, - that.maintenancePragma) && Objects.equals(maintenancePragmaFrequency, - that.maintenancePragmaFrequency) && Objects.equals(flushFrequency, - that.flushFrequency) && Objects.equals(cleanupFrequency, that.cleanupFrequency); + return batchSize == that.batchSize + && Objects.equals(dbDir, that.dbDir) + && Objects.equals(libraryDir, that.libraryDir) + && Objects.equals(globalPragma, that.globalPragma) + && Objects.equals(connectionPragma, that.connectionPragma) + && Objects.equals(maintenancePragma, that.maintenancePragma) + && Objects.equals(maintenancePragmaFrequency, that.maintenancePragmaFrequency) + && Objects.equals(flushFrequency, that.flushFrequency) + && Objects.equals(cleanupFrequency, that.cleanupFrequency); } @Override public int hashCode() { - return Objects.hash(dbDir, + return Objects.hash( + dbDir, + libraryDir, globalPragma, connectionPragma, maintenancePragma, @@ -171,6 +185,7 @@ public int hashCode() { public String toString() { return "ProxyDbConfig{" + "dbDir='" + dbDir + '\'' + + ", libraryDir=" + libraryDir + ", globalPragma=" + globalPragma + ", connectionPragma=" + connectionPragma + ", maintenancePragma=" + maintenancePragma + diff --git a/stroom-proxy/stroom-proxy-repo/src/main/java/stroom/proxy/repo/ProxyDbModule.java b/stroom-proxy/stroom-proxy-repo/src/main/java/stroom/proxy/repo/ProxyDbModule.java index d27a2ff7cd4..e4800c9ae3d 100644 --- a/stroom-proxy/stroom-proxy-repo/src/main/java/stroom/proxy/repo/ProxyDbModule.java +++ b/stroom-proxy/stroom-proxy-repo/src/main/java/stroom/proxy/repo/ProxyDbModule.java @@ -11,8 +11,10 @@ import stroom.proxy.repo.dao.ForwardSourceDao; import stroom.proxy.repo.dao.SourceDao; import stroom.proxy.repo.dao.SourceItemDao; +import stroom.util.NullSafe; import stroom.util.guice.GuiceUtil; import stroom.util.io.FileUtil; +import stroom.util.io.PathCreator; import stroom.util.logging.LambdaLogger; import stroom.util.logging.LambdaLoggerFactory; import stroom.util.shared.Flushable; @@ -35,6 +37,7 @@ public class ProxyDbModule extends AbstractModule { private static final String FLYWAY_TABLE = "proxy_repo_schema_history"; private static final LambdaLogger LOGGER = LambdaLoggerFactory.getLogger(AbstractDataSourceProviderModule.class); + public static final String SQLITE_TEMPDIR_PROP = "org.sqlite.tmpdir"; @Override protected void configure() { @@ -52,16 +55,19 @@ protected void configure() { public ProxyRepoDbConnProvider getConnectionProvider( final RepoDbDirProvider repoDbDirProvider, final DataSourceFactory dataSourceFactory, - final ProxyDbConfig proxyDbConfig) { + final ProxyDbConfig proxyDbConfig, + final PathCreator pathCreator) { LOGGER.debug(() -> "Getting connection provider for " + MODULE); - final AbstractDbConfig config = getDbConfig(repoDbDirProvider); + final AbstractDbConfig config = getDbConfig(repoDbDirProvider, proxyDbConfig, pathCreator); final DataSource dataSource = dataSourceFactory.create(config, MODULE, true); FlywayUtil.migrate(dataSource, FLYWAY_LOCATIONS, FLYWAY_TABLE, MODULE); return new DataSourceImpl(dataSource, proxyDbConfig); } - private AbstractDbConfig getDbConfig(final RepoDbDirProvider repoDbDirProvider) { + private AbstractDbConfig getDbConfig(final RepoDbDirProvider repoDbDirProvider, + final ProxyDbConfig proxyDbConfig, + final PathCreator pathCreator) { final Path dbDir = repoDbDirProvider.get(); FileUtil.mkdirs(dbDir); @@ -69,6 +75,13 @@ private AbstractDbConfig getDbConfig(final RepoDbDirProvider repoDbDirProvider) throw new RuntimeException("Unable to find DB dir: " + FileUtil.getCanonicalPath(dbDir)); } + final String libraryDirStr = proxyDbConfig.getLibraryDir(); + if (!NullSafe.isBlankString(libraryDirStr)) { + final Path libraryDir = pathCreator.toAppPath(libraryDirStr); + LOGGER.info("Setting {} to '{}'", SQLITE_TEMPDIR_PROP, libraryDir.toString()); + System.setProperty(SQLITE_TEMPDIR_PROP, libraryDir.toString()); + } + final Path path = dbDir.resolve("proxy-repo.db"); final String fullPath = FileUtil.getCanonicalPath(path); @@ -83,6 +96,10 @@ private AbstractDbConfig getDbConfig(final RepoDbDirProvider repoDbDirProvider) return new MyProxyRepoDbConfig(connectionConfig); } + + // -------------------------------------------------------------------------------- + + private static class MyProxyRepoDbConfig extends AbstractDbConfig { public MyProxyRepoDbConfig(final ConnectionConfig connectionConfig) { @@ -90,6 +107,10 @@ public MyProxyRepoDbConfig(final ConnectionConfig connectionConfig) { } } + + // -------------------------------------------------------------------------------- + + public static class DataSourceImpl extends DataSourceProxy implements ProxyRepoDbConnProvider { private final ProxyDbConfig proxyDbConfig; diff --git a/stroom-security/stroom-security-impl/src/main/java/stroom/security/impl/AuthenticationService.java b/stroom-security/stroom-security-impl/src/main/java/stroom/security/impl/AuthenticationService.java index 0834a319038..90bcc8bf604 100755 --- a/stroom-security/stroom-security-impl/src/main/java/stroom/security/impl/AuthenticationService.java +++ b/stroom-security/stroom-security-impl/src/main/java/stroom/security/impl/AuthenticationService.java @@ -129,9 +129,7 @@ public Optional getUser(final String subjectId) { try { optUser = userDao.getBySubjectId(subjectId, false); - if (optUser.isEmpty() - && User.ADMIN_SUBJECT_ID.equals(subjectId) - && IdpType.INTERNAL_IDP.equals(openIdConfigProvider.get().getIdentityProviderType())) { + if (optUser.isEmpty() && shouldCreateAdminUser(subjectId)) { // TODO @AT Probably should be an explicit command to create this to avoid the accidental // running of stroom in UseInternal mode which then leaves admin/admin open @@ -147,6 +145,13 @@ public Optional getUser(final String subjectId) { return optUser; } + private boolean shouldCreateAdminUser(final String subjectId) { + return User.ADMIN_SUBJECT_ID.equals(subjectId) + && ( + IdpType.INTERNAL_IDP.equals(openIdConfigProvider.get().getIdentityProviderType()) + || IdpType.TEST_CREDENTIALS.equals(openIdConfigProvider.get().getIdentityProviderType())); + } + public User createOrRefreshUser(final String subjectId) { return createOrRefreshUserOrGroup(subjectId, false); } @@ -167,8 +172,7 @@ private User createOrRefreshUserOrGroup(final String subjectId, final boolean is final User userRef = create(subjectId, isGroup); // Creating the admin user so create its group too - if (User.ADMIN_SUBJECT_ID.equals(subjectId) - && IdpType.INTERNAL_IDP.equals(openIdConfigProvider.get().getIdentityProviderType())) { + if (shouldCreateAdminUser(subjectId)) { try { User userGroup = createOrRefreshAdminUserGroup(ADMINISTRATORS_GROUP_SUBJECT_ID); userDao.addUserToGroup(userRef.getUuid(), userGroup.getUuid()); diff --git a/stroom-ui/src/api/stroom.ts b/stroom-ui/src/api/stroom.ts index eabe296ff24..3f136fd550f 100644 --- a/stroom-ui/src/api/stroom.ts +++ b/stroom-ui/src/api/stroom.ts @@ -10675,6 +10675,25 @@ export class Api extends HttpClient + this.request({ + path: `/userNames/v1/findAssociates`, + method: "POST", + body: data, + secure: true, + type: ContentType.Json, + ...params, + }), + /** * No description * From ec11b262a90364028bb0cbda5f44fb49705b1d98 Mon Sep 17 00:00:00 2001 From: at055612 <22818309+at055612@users.noreply.github.com> Date: Tue, 10 Oct 2023 16:49:22 +0100 Subject: [PATCH 2/4] gh-3026 Add missing docker managed vols, use tmpfs mounts --- stroom-app/docker/Dockerfile | 12 ++++++++---- stroom-proxy/stroom-proxy-app/docker/Dockerfile | 5 ++++- .../stroom-proxy-app/docker/docker-entrypoint.sh | 3 +++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/stroom-app/docker/Dockerfile b/stroom-app/docker/Dockerfile index f486123a2dc..d35f09bb11f 100644 --- a/stroom-app/docker/Dockerfile +++ b/stroom-app/docker/Dockerfile @@ -65,6 +65,8 @@ VOLUME /stroom/config/ # Create Docker volume for the content_pack_import dir as this will be mutated on VOLUME /stroom/content_pack_import/ +# lmdb_library mouted as tmpfs not a managed volume + # Create Docker volume for SLF4J output VOLUME /stroom/logs/ @@ -80,9 +82,6 @@ VOLUME /stroom/reference_data/ # Create Docker volume for Stroom's off-heap search result data VOLUME /stroom/search_results/ -# Create Docker volume for Stroom's LMDB system library binary -VOLUME /stroom/lmdb_library/ - # Create Docker volume for Stroom's volumes dir VOLUME /stroom/volumes/ @@ -99,6 +98,9 @@ CMD ["./start.sh", "server"] # see https://github.com/docker-library/openjdk/issues/73#issuecomment-207816707 # Create a user with no home and no shell +# IMPORTANT!!! +# If you add any new dirs here, make sure you also chown them in docker-entrypoint.sh +# IMPORTANT!!! RUN \ apk add --no-cache \ ttf-dejavu && \ @@ -120,7 +122,9 @@ RUN \ mkdir -p /stroom/volumes && \ chown -R stroom:stroom /stroom -# IMPORTANT - if you add/change a dir above you need to do the same in entrypoint.sh +# IMPORTANT!!! +# If you add any new dirs above, make sure you also chown them in docker-entrypoint.sh +# IMPORTANT!!! # Those that are most likely to have changed get copied last to speed up build diff --git a/stroom-proxy/stroom-proxy-app/docker/Dockerfile b/stroom-proxy/stroom-proxy-app/docker/Dockerfile index 8b5d44cb99c..5bffee42b05 100644 --- a/stroom-proxy/stroom-proxy-app/docker/Dockerfile +++ b/stroom-proxy/stroom-proxy-app/docker/Dockerfile @@ -60,7 +60,7 @@ VOLUME /stroom-proxy/repo/ VOLUME /stroom-proxy/logs/ VOLUME /stroom-proxy/db/ VOLUME /stroom-proxy/failures/ -VOLUME /stroom-proxy/sqlite_library/ +# sqlite_library mounted as tmpfs not a managed volumne # run entrypoint script inside tini for better unix process handling, # see https://github.com/krallin/tini/issues/8 @@ -75,7 +75,10 @@ CMD ["./start.sh"] #RUN echo "151.101.112.249 dl-cdn.alpinelinux.org" >> /etc/hosts && \ # Create a system user/group with no home and no shell and a uid:gid of 1000:1000 + +# IMPORTANT!!! # If you add any new dirs here, make sure you also chown them in docker-entrypoint.sh +# IMPORTANT!!! RUN \ addgroup -g 1000 -S proxy && \ adduser -u 1000 -S -s /bin/false -D -G proxy proxy && \ diff --git a/stroom-proxy/stroom-proxy-app/docker/docker-entrypoint.sh b/stroom-proxy/stroom-proxy-app/docker/docker-entrypoint.sh index 2183a501983..abd64ab5ff4 100755 --- a/stroom-proxy/stroom-proxy-app/docker/docker-entrypoint.sh +++ b/stroom-proxy/stroom-proxy-app/docker/docker-entrypoint.sh @@ -15,6 +15,9 @@ if [ "$(id -u)" = '0' ]; then chown proxy:proxy /stroom-proxy/logs chown proxy:proxy /stroom-proxy/logs/extra_headers.txt chown proxy:proxy /stroom-proxy/repo + chown proxy:proxy /stroom-proxy/db + chown proxy:proxy /stroom-proxy/failures + chown proxy:proxy /stroom-proxy/sqlite_library # This is a bit of a cludge to get round "Text file in use" errors # See: https://github.com/moby/moby/issues/9547 From fbb64dac2248742ecbbcfc9c4ace328d68928b3a Mon Sep 17 00:00:00 2001 From: at055612 <22818309+at055612@users.noreply.github.com> Date: Wed, 11 Oct 2023 09:55:08 +0100 Subject: [PATCH 3/4] gh-3026 Ensure sqlite lib path exists --- .../src/main/java/stroom/proxy/repo/ProxyDbModule.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stroom-proxy/stroom-proxy-repo/src/main/java/stroom/proxy/repo/ProxyDbModule.java b/stroom-proxy/stroom-proxy-repo/src/main/java/stroom/proxy/repo/ProxyDbModule.java index e4800c9ae3d..6fcf7e2f006 100644 --- a/stroom-proxy/stroom-proxy-repo/src/main/java/stroom/proxy/repo/ProxyDbModule.java +++ b/stroom-proxy/stroom-proxy-repo/src/main/java/stroom/proxy/repo/ProxyDbModule.java @@ -80,6 +80,10 @@ private AbstractDbConfig getDbConfig(final RepoDbDirProvider repoDbDirProvider, final Path libraryDir = pathCreator.toAppPath(libraryDirStr); LOGGER.info("Setting {} to '{}'", SQLITE_TEMPDIR_PROP, libraryDir.toString()); System.setProperty(SQLITE_TEMPDIR_PROP, libraryDir.toString()); + if (!Files.exists(libraryDir)) { + LOGGER.info("Ensuring '{}' exists", libraryDir); + FileUtil.ensureDirExists(libraryDir); + } } final Path path = dbDir.resolve("proxy-repo.db"); From da7bb2def82fe5d8ce4b9f35b94ac23a7ba6e088 Mon Sep 17 00:00:00 2001 From: at055612 <22818309+at055612@users.noreply.github.com> Date: Wed, 11 Oct 2023 11:34:01 +0100 Subject: [PATCH 4/4] gh-3026 Fix failing tests --- .../stroom/proxy/repo/ProxyRepoTestModule.java | 11 ++++++++--- .../test/TestingHomeAndTempProvidersModule.java | 15 ++++++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/stroom-proxy/stroom-proxy-repo/src/test/java/stroom/proxy/repo/ProxyRepoTestModule.java b/stroom-proxy/stroom-proxy-repo/src/test/java/stroom/proxy/repo/ProxyRepoTestModule.java index 80177457963..56f0544332a 100644 --- a/stroom-proxy/stroom-proxy-repo/src/test/java/stroom/proxy/repo/ProxyRepoTestModule.java +++ b/stroom-proxy/stroom-proxy-repo/src/test/java/stroom/proxy/repo/ProxyRepoTestModule.java @@ -1,7 +1,7 @@ package stroom.proxy.repo; import stroom.db.util.DbModule; -import stroom.util.io.FileUtil; +import stroom.test.common.util.test.TestingHomeAndTempProvidersModule; import com.google.inject.AbstractModule; @@ -14,8 +14,13 @@ protected void configure() { install(new ProxyDbModule()); install(new DbModule()); - final Path repoDir = FileUtil.createTempDirectory("stroom-proxy-repo"); - final Path dbDir = FileUtil.createTempDirectory("stroom-proxy-db"); + final TestingHomeAndTempProvidersModule homeAndTempProvidersModule = new TestingHomeAndTempProvidersModule(); + install(homeAndTempProvidersModule); + + final Path homeDir = homeAndTempProvidersModule.getHomeDir(); + final Path repoDir = homeDir.resolve("repo"); + final Path dbDir = homeDir.resolve("db"); + bind(RepoDirProvider.class).toInstance(() -> repoDir); bind(RepoDbDirProvider.class).toInstance(() -> dbDir); bind(ErrorReceiver.class).to(ErrorReceiverImpl.class); diff --git a/stroom-test-common/src/main/java/stroom/test/common/util/test/TestingHomeAndTempProvidersModule.java b/stroom-test-common/src/main/java/stroom/test/common/util/test/TestingHomeAndTempProvidersModule.java index 004086599e8..c65e1608e46 100644 --- a/stroom-test-common/src/main/java/stroom/test/common/util/test/TestingHomeAndTempProvidersModule.java +++ b/stroom-test-common/src/main/java/stroom/test/common/util/test/TestingHomeAndTempProvidersModule.java @@ -5,14 +5,27 @@ import com.google.inject.AbstractModule; +import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; public class TestingHomeAndTempProvidersModule extends AbstractModule { private final Path tempDir; + private final Path homeDir; + + public TestingHomeAndTempProvidersModule() { + try { + this.tempDir = Files.createTempDirectory("stroom-temp"); + this.homeDir = tempDir.resolve("home"); + } catch (IOException e) { + throw new RuntimeException("Error creating temp dir", e); + } + } public TestingHomeAndTempProvidersModule(final Path tempDir) { this.tempDir = tempDir; + this.homeDir = tempDir.resolve("home"); } @Override @@ -24,7 +37,7 @@ protected void configure() { } public Path getHomeDir() { - return tempDir.resolve("home"); + return homeDir; } public Path getTempDir() {