/integration-tests/mongodb-panache/src/test/java/io/quarkus/it/mongodb/panache/MongoTestResource.java

https://github.com/quarkusio/quarkus · Java · 79 lines · 66 code · 10 blank · 3 comment · 2 complexity · a4811ab96050a4e0e728a603dda4f8e5 MD5 · raw file

  1. package io.quarkus.it.mongodb.panache;
  2. import java.util.Collections;
  3. import java.util.Map;
  4. import org.jboss.logging.Logger;
  5. import de.flapdoodle.embed.mongo.Command;
  6. import de.flapdoodle.embed.mongo.MongodExecutable;
  7. import de.flapdoodle.embed.mongo.MongodStarter;
  8. import de.flapdoodle.embed.mongo.config.IMongodConfig;
  9. import de.flapdoodle.embed.mongo.config.MongodConfigBuilder;
  10. import de.flapdoodle.embed.mongo.config.Net;
  11. import de.flapdoodle.embed.mongo.config.RuntimeConfigBuilder;
  12. import de.flapdoodle.embed.mongo.distribution.Version;
  13. import de.flapdoodle.embed.process.config.IRuntimeConfig;
  14. import de.flapdoodle.embed.process.config.io.ProcessOutput;
  15. import de.flapdoodle.embed.process.runtime.Network;
  16. import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
  17. public class MongoTestResource implements QuarkusTestResourceLifecycleManager {
  18. private static final Logger LOGGER = Logger.getLogger(MongoTestResource.class);
  19. private static MongodExecutable MONGO;
  20. @Override
  21. public Map<String, String> start() {
  22. try {
  23. Version.Main version = Version.Main.V4_0;
  24. int port = 27018;
  25. LOGGER.infof("Starting Mongo %s on port %s", version, port);
  26. IMongodConfig config = new MongodConfigBuilder()
  27. .version(version)
  28. .net(new Net(port, Network.localhostIsIPv6()))
  29. .build();
  30. MONGO = getMongodExecutable(config);
  31. try {
  32. MONGO.start();
  33. } catch (Exception e) {
  34. //every so often mongo fails to start on CI runs
  35. //see if this helps
  36. Thread.sleep(1000);
  37. MONGO.start();
  38. }
  39. return Collections.emptyMap();
  40. } catch (Exception e) {
  41. throw new RuntimeException(e);
  42. }
  43. }
  44. private MongodExecutable getMongodExecutable(IMongodConfig config) {
  45. try {
  46. return doGetExecutable(config);
  47. } catch (Exception e) {
  48. // sometimes the download process can timeout so just sleep and try again
  49. try {
  50. Thread.sleep(1000);
  51. } catch (InterruptedException ignored) {
  52. }
  53. return doGetExecutable(config);
  54. }
  55. }
  56. private MongodExecutable doGetExecutable(IMongodConfig config) {
  57. IRuntimeConfig runtimeConfig = new RuntimeConfigBuilder()
  58. .defaults(Command.MongoD)
  59. .processOutput(ProcessOutput.getDefaultInstanceSilent())
  60. .build();
  61. return MongodStarter.getInstance(runtimeConfig).prepare(config);
  62. }
  63. @Override
  64. public void stop() {
  65. if (MONGO != null) {
  66. MONGO.stop();
  67. }
  68. }
  69. }