Skip to content

Commit

Permalink
Add environment variable to configure mongo binary path (#69)
Browse files Browse the repository at this point in the history
* Add environment variable to configure mongo binary path

* Update variable name

* Add doc

* Add more config
  • Loading branch information
meziantou authored Apr 29, 2024
1 parent aac64a2 commit 6cf0368
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 3 deletions.
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,12 @@ When this method is called, each time a database or collection is requested with
* A randomly named database is provided to your code.

When you dispose of the `IServiceProvider`, the related resources are destroyed. We leverage internal caching to avoid running multiple instances of MongoDB servers concurrently, opting instead to reuse a single instance. This method allows you to run multiple concurrent tests, each with their own MongoDB database. If your test runner crashes, the MongoDB process will be terminated, preventing orphaned processes from consuming unnecessary resources.


Available environment variables:
- `WORKLEAP_EXTENSIONS_MONGO_EPHEMERAL_BINARYDIRECTORY`: Specify the path of the MongoDB binaries
- `WORKLEAP_EXTENSIONS_MONGO_EPHEMERAL_DATADIRECTORY`: Specify the path to store data
- `WORKLEAP_EXTENSIONS_MONGO_EPHEMERAL_CONNECTIONTIMEOUT`: Specify the timeout to connect to the database
- `WORKLEAP_EXTENSIONS_MONGO_EPHEMERAL_USESINGLENODEREPLICASET`: Configure the replicaset

## Included Roslyn analyzers

Expand Down
36 changes: 34 additions & 2 deletions src/Workleap.Extensions.Mongo.Ephemeral/ReusableMongoRunner.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Globalization;
using EphemeralMongo;

namespace Workleap.Extensions.Mongo.Ephemeral;
Expand Down Expand Up @@ -33,12 +34,43 @@ public void Rent(Guid renter)

// The lock and use count prevent multiple instances of local mongod processes for a same named MongoClient
// that would degrade the overall performance.
this._runner ??= MongoRunner.Run(new MongoRunnerOptions
var options = new MongoRunnerOptions
{
UseSingleNodeReplicaSet = true,
KillMongoProcessesWhenCurrentProcessExits = true,
});
};

var binaryDirectory = Environment.GetEnvironmentVariable("WORKLEAP_EXTENSIONS_MONGO_EPHEMERAL_BINARYDIRECTORY")?.Trim();
if (!string.IsNullOrEmpty(binaryDirectory))
{
options.BinaryDirectory = binaryDirectory;
}

var dataDirectory = Environment.GetEnvironmentVariable("WORKLEAP_EXTENSIONS_MONGO_EPHEMERAL_DATADIRECTORY")?.Trim();
if (!string.IsNullOrEmpty(dataDirectory))
{
options.DataDirectory = dataDirectory;
}

var additionalArguments = Environment.GetEnvironmentVariable("WORKLEAP_EXTENSIONS_MONGO_EPHEMERAL_ADDITIONALARGUMENTS")?.Trim();
if (!string.IsNullOrEmpty(additionalArguments))
{
options.AdditionalArguments = additionalArguments;
}

var connectionTimeout = Environment.GetEnvironmentVariable("WORKLEAP_EXTENSIONS_MONGO_EPHEMERAL_CONNECTIONTIMEOUT")?.Trim();
if (TimeSpan.TryParse(connectionTimeout, CultureInfo.InvariantCulture, out var parsedConnectionTimeout))
{
options.ConnectionTimeout = parsedConnectionTimeout;
}

var useSingleNodeReplicaSet = Environment.GetEnvironmentVariable("WORKLEAP_EXTENSIONS_MONGO_EPHEMERAL_USESINGLENODEREPLICASET")?.Trim();
if (bool.TryParse(useSingleNodeReplicaSet, out var parsedUseSingleNodeReplicaSet))
{
options.UseSingleNodeReplicaSet = parsedUseSingleNodeReplicaSet;
}

this._runner ??= MongoRunner.Run(options);
this._useCount++;
this._connectionString = this._runner.ConnectionString;
this._renters.Add(renter);
Expand Down

0 comments on commit 6cf0368

Please sign in to comment.