Skip to content

Commit 911adb9

Browse files
committed
Mongo integration test updates - ignore if MongoServer is not running.
1 parent d5285a5 commit 911adb9

11 files changed

Lines changed: 108 additions & 20 deletions

SharpRepository.MongoDbRepository/MongoDbRepository.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ public MongoDbRepository(string connectionString, ICachingStrategy<T, TKey> cach
3434
/// MongoDb repository layer
3535
/// </summary>
3636
/// <typeparam name="T">The type of object the repository acts on.</typeparam>
37-
public class MongoDbRepository<T> : MongoDbRepositoryBase<T, int> where T : class, new()
37+
public class MongoDbRepository<T> : MongoDbRepositoryBase<T, string> where T : class, new()
3838
{
3939
/// <summary>
4040
/// Initializes a new instance of the <see cref="MongoDbRepository&lt;T&gt;"/> class.
4141
/// </summary>
4242
/// <param name="cachingStrategy">The caching strategy. Defaults to <see cref="NoCachingStrategy&lt;T&gt;" />.</param>
43-
public MongoDbRepository(ICachingStrategy<T, int> cachingStrategy = null)
43+
public MongoDbRepository(ICachingStrategy<T, string> cachingStrategy = null)
4444
: base(cachingStrategy)
4545
{
4646
}
@@ -50,7 +50,7 @@ public MongoDbRepository(ICachingStrategy<T, int> cachingStrategy = null)
5050
/// </summary>
5151
/// <param name="connectionString">The connectionString of the MongoDb instance.</param>
5252
/// <param name="cachingStrategy">The caching strategy. Defaults to <see cref="NoCachingStrategy&lt;T&gt;" />.</param>
53-
public MongoDbRepository(string connectionString, ICachingStrategy<T, int> cachingStrategy = null)
53+
public MongoDbRepository(string connectionString, ICachingStrategy<T, string> cachingStrategy = null)
5454
: base(connectionString, cachingStrategy)
5555
{
5656
if (String.IsNullOrEmpty(connectionString)) throw new ArgumentNullException("connectionString");
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using MongoDB.Driver;
2+
3+
namespace SharpRepository.MongoDbRepository
4+
{
5+
public static class MongoDbRepositoryManager
6+
{
7+
public static bool ServerIsRunning(MongoServer server)
8+
{
9+
try
10+
{
11+
server.Ping();
12+
}
13+
catch
14+
{
15+
return false;
16+
}
17+
18+
return true;
19+
}
20+
21+
public static bool ServerIsRunning(string connectionString)
22+
{
23+
return ServerIsRunning(MongoServer.Create(connectionString));
24+
}
25+
26+
public static string DatabaseName(string connectionString)
27+
{
28+
return MongoUrl.Create(connectionString).DatabaseName;
29+
}
30+
31+
public static void DropDatabase(string connectionString)
32+
{
33+
MongoServer server = MongoServer.Create(connectionString);
34+
var db = DatabaseName(connectionString);
35+
server.DropDatabase(db);
36+
}
37+
}
38+
}

SharpRepository.MongoDbRepository/SharpRepository.MongoDbRepository.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
<Compile Include="..\CommonAssembly.cs">
5252
<Link>CommonAssembly.cs</Link>
5353
</Compile>
54+
<Compile Include="MongoDbRepositoryManager.cs" />
5455
<Compile Include="Properties\AssemblyInfo.cs" />
5556
<Compile Include="MongoDbRepository.cs" />
5657
<Compile Include="MongoDbRepositoryBase.cs" />

SharpRepository.Tests.Integration/Data/MongoDbDataDirectoryFactory.cs renamed to SharpRepository.Tests.Integration/Data/MongoDbConnectionStringFactory.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
using System;
2-
using System.IO;
32

43
namespace SharpRepository.Tests.Integration.Data
54
{
6-
public class MongoDbDataDirectoryFactory
5+
public class MongoDbConnectionStringFactory
76
{
87
private static int _num = 1;
98

109
public static string Build(string type)
1110
{
1211
var connectionString = String.Format("mongodb://127.0.0.1/{0}{1}", type, _num);
13-
_num++;
14-
12+
_num++; // since it goes through and calls this for each test before running them, we need a different database for each test
1513
return connectionString;
1614
}
1715
}

SharpRepository.Tests.Integration/Data/RepositoryTestCaseDataFactory.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections.Generic;
23
using System.Data.Entity;
34
using System.Data.Entity.Infrastructure;
@@ -48,11 +49,13 @@ public static IEnumerable<TestCaseData> Build(RepositoryTypes[] includeTypes)
4849

4950
if (includeTypes.Contains(RepositoryTypes.MongoDb))
5051
{
51-
string connectionString = MongoDbDataDirectoryFactory.Build("Contact");
52-
string databaseName = MongoUrl.Create(connectionString).DatabaseName;
53-
MongoServer server = MongoServer.Create(connectionString);
54-
server.DropDatabase(databaseName);
55-
yield return new TestCaseData(new MongoDbRepository<Contact, string>(connectionString)).SetName("MongoDb Test");
52+
string connectionString = MongoDbConnectionStringFactory.Build("Contact");
53+
54+
if (MongoDbRepositoryManager.ServerIsRunning(connectionString))
55+
{
56+
MongoDbRepositoryManager.DropDatabase(connectionString); // Pre-test cleanup
57+
yield return new TestCaseData(new MongoDbRepository<Contact, string>(connectionString)).SetName("MongoDb Test");
58+
}
5659
}
5760

5861
if (includeTypes.Contains(RepositoryTypes.RavenDb))

SharpRepository.Tests.Integration/RepositoryAddTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections.Generic;
23
using System.Linq;
34
using NUnit.Framework;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using NUnit.Framework;
2+
using SharpRepository.MongoDbRepository;
3+
using SharpRepository.Tests.Integration.Data;
4+
5+
namespace SharpRepository.Tests.Integration
6+
{
7+
[TestFixture]
8+
public class RepositoryRunningTest : TestBase
9+
{
10+
[Test]
11+
public void MongoServer_Is_Running()
12+
{
13+
string connectionString = MongoDbConnectionStringFactory.Build("Test");
14+
15+
if (MongoDbRepositoryManager.ServerIsRunning(connectionString))
16+
{
17+
MongoDbRepositoryManager.DropDatabase(connectionString);
18+
Assert.Pass("MongoServer is running");
19+
}
20+
else
21+
{
22+
AssertIgnores.MongoServerIsNotRunning();
23+
}
24+
}
25+
}
26+
}

SharpRepository.Tests.Integration/SharpRepository.Tests.Integration.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,10 @@
123123
<Compile Include="Data\DataDirectoryHelper.cs" />
124124
<Compile Include="Data\Db4oDataDirectoryFactory.cs" />
125125
<Compile Include="Data\EfDataDirectoryFactory.cs" />
126-
<Compile Include="Data\MongoDbDataDirectoryFactory.cs" />
126+
<Compile Include="Data\MongoDbConnectionStringFactory.cs" />
127127
<Compile Include="Helpers\CurrentDirectory.cs" />
128-
<Compile Include="MongoRepositoryTests.cs" />
128+
<Compile Include="RepositoryRunningTest.cs" />
129+
<Compile Include="Spikes\MongoRepositorySpikes.cs" />
129130
<Compile Include="Spikes\RavenDbEmbeddedTests.cs" />
130131
<Compile Include="TestAttributes\ExecuteForAllRepositoriesAttribute.cs" />
131132
<Compile Include="TestAttributes\ExecuteForRepositoriesAttribute.cs" />
@@ -183,7 +184,6 @@
183184
<ItemGroup>
184185
<Folder Include="Data\Db4o\" />
185186
<Folder Include="Data\Ef\" />
186-
<Folder Include="Data\MongoDb\" />
187187
<Folder Include="Data\Xml\" />
188188
</ItemGroup>
189189
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

SharpRepository.Tests.Integration/MongoRepositoryTests.cs renamed to SharpRepository.Tests.Integration/Spikes/MongoRepositorySpikes.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
using SharpRepository.Tests.Integration.TestObjects;
1313
using Should;
1414

15-
namespace SharpRepository.Tests.Integration
15+
namespace SharpRepository.Tests.Integration.Spikes
1616
{
1717
// Getting MongoDb installed on Windows
1818
// http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/
@@ -31,12 +31,19 @@ public class Order
3131
}
3232

3333
[TestFixture]
34-
public class MongoRepositoryTests : TestBase
34+
public class MongoRepositorySpikes : TestBase
3535
{
3636
[Test]
37-
public void Mongo()
37+
public void MongoDb_Supports_Basic_Crud_Operations()
3838
{
39-
MongoServer server = MongoServer.Create("mongodb://localhost");
39+
const string connectionString = "mongodb://localhost";
40+
41+
if (!MongoDbRepositoryManager.ServerIsRunning(connectionString))
42+
{
43+
AssertIgnores.MongoServerIsNotRunning();
44+
}
45+
46+
MongoServer server = MongoServer.Create(connectionString);
4047
var databaseNames = server.GetDatabaseNames();
4148
foreach (var db in databaseNames)
4249
{
@@ -102,6 +109,12 @@ public void Mongo()
102109
public void MongoRepository_Supports_Basic_Crud_Operations()
103110
{
104111
const string connectionString = "mongodb://127.0.0.1";
112+
113+
if (!MongoDbRepositoryManager.ServerIsRunning(connectionString))
114+
{
115+
AssertIgnores.MongoServerIsNotRunning();
116+
}
117+
105118
var repo = new MongoDbRepository<Order, string>(connectionString);
106119

107120
// Create

SharpRepository.Tests.Integration/TestBase.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,14 @@ protected static T S<T>(params object[] argumentsForConstructor) where T : class
5555
{
5656
return MockRepository.GenerateStub<T>(argumentsForConstructor);
5757
}
58+
59+
protected static class AssertIgnores
60+
{
61+
public static void MongoServerIsNotRunning()
62+
{
63+
Assert.Ignore("MongoServer is NOT running. MongoDbRepository integration tests are excluded from the test suite until MongoDb installed on this machine. Get MongoDb installed and running on Windows: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/");
64+
}
65+
}
66+
5867
}
5968
}

0 commit comments

Comments
 (0)