Skip to content

Commit

Permalink
Refactor tests: delete duplicate code.
Browse files Browse the repository at this point in the history
Also make sure we clean up the output data after running the tests.
  • Loading branch information
Fitzchak Yitzchaki committed Apr 4, 2012
1 parent c9dad14 commit 861c9e8
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 116 deletions.
42 changes: 42 additions & 0 deletions Raven.Tests/Storage/AbstractDocumentStorageTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,64 @@
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.IO;
using System.Linq;
using System.Threading;
using Raven.Abstractions.Data;
using Raven.Abstractions.Extensions;
using Raven.Database;
using Raven.Database.Extensions;
using Xunit;

namespace Raven.Tests.Storage
{
public abstract class AbstractDocumentStorageTest : IDisposable
{
protected const string DataDir = "raven.db.test.esent";
protected const string BackupDir = "raven.db.test.backup";

protected AbstractDocumentStorageTest()
{
IOExtensions.DeleteDirectory(DataDir);
DeleteIfExists(BackupDir); // for full backups, we can't have anything in the target dir
}

public virtual void Dispose()
{
IOExtensions.DeleteDirectory(DataDir);
IOExtensions.DeleteDirectory(BackupDir);
}

protected static void DeleteIfExists(string directoryName)
{
string directoryFullName = Path.IsPathRooted(directoryName)
? directoryName
: Path.Combine(AppDomain.CurrentDomain.BaseDirectory, directoryName);

IOExtensions.DeleteDirectory(directoryFullName);
}

protected void WaitForBackup(DocumentDatabase db, bool checkError)
{
while (true)
{
var jsonDocument = db.Get(BackupStatus.RavenBackupStatusDocumentKey, null);
if (jsonDocument == null)
break;
var backupStatus = jsonDocument.DataAsJson.JsonDeserialization<BackupStatus>();
if (backupStatus.IsRunning == false)
{
if (checkError)
{
var firstOrDefault = backupStatus.Messages.FirstOrDefault(x => x.Severity == BackupStatus.BackupMessageSeverity.Error);
if (firstOrDefault != null)
Assert.False(true, firstOrDefault.Message);
}

return;
}
Thread.Sleep(50);
}
}
}
}
78 changes: 14 additions & 64 deletions Raven.Tests/Storage/BackupRestore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,15 @@
// Copyright (c) Hibernating Rhinos LTD. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.IO;
using System.Threading;
using System.Linq;
using Raven.Abstractions.Data;
using Raven.Abstractions.Extensions;
using Raven.Json.Linq;
using Raven.Client.Indexes;
using Raven.Database;
using Raven.Database.Config;
using Raven.Database.Extensions;
using Raven.Json.Linq;
using Xunit;
using System.Linq;

namespace Raven.Tests.Storage
{
Expand All @@ -38,35 +35,20 @@ public override void Dispose()
base.Dispose();
}

private static void DeleteIfExists(string DirectoryName)
{
string directoryFullName = null;

if (Path.IsPathRooted(DirectoryName) == false)
directoryFullName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DirectoryName);
else
directoryFullName = DirectoryName;

IOExtensions.DeleteDirectory(directoryFullName);
}

[Fact]
public void AfterBackupRestoreCanReadDocument()
{
DeleteIfExists("raven.db.test.backup"); // for full backups, we can't have anything in the target dir

db.Put("ayende", null, RavenJObject.Parse("{'email':'ayende@ayende.com'}"), new RavenJObject(), null);

db.StartBackup("raven.db.test.backup", false);
WaitForBackup(true);
db.StartBackup(BackupDir, false);
WaitForBackup(db, true);

db.Dispose();

DeleteIfExists(DataDir);

DocumentDatabase.Restore(new RavenConfiguration(), "raven.db.test.backup", DataDir);
DocumentDatabase.Restore(new RavenConfiguration(), BackupDir, DataDir);

db = new DocumentDatabase(new RavenConfiguration { DataDirectory = DataDir});
db = new DocumentDatabase(new RavenConfiguration {DataDirectory = DataDir});

var jObject = db.Get("ayende", null).ToJson();
Assert.Equal("ayende@ayende.com", jObject.Value<string>("email"));
Expand All @@ -76,18 +58,15 @@ public void AfterBackupRestoreCanReadDocument()
[Fact]
public void AfterBackupRestoreCanQueryIndex_CreatedAfterRestore()
{
DeleteIfExists("raven.db.test.backup"); // for full backups, we can't have anything in the target dir

db.Put("ayende", null, RavenJObject.Parse("{'email':'ayende@ayende.com'}"), RavenJObject.Parse("{'Raven-Entity-Name':'Users'}"), null);

db.StartBackup("raven.db.test.backup", false);
WaitForBackup(true);
db.StartBackup(BackupDir, false);
WaitForBackup(db, true);

db.Dispose();

DeleteIfExists(DataDir);

DocumentDatabase.Restore(new RavenConfiguration(), "raven.db.test.backup", DataDir);
DocumentDatabase.Restore(new RavenConfiguration(), BackupDir, DataDir);

db = new DocumentDatabase(new RavenConfiguration { DataDirectory = DataDir });
db.SpinBackgroundWorkers();
Expand All @@ -106,8 +85,6 @@ public void AfterBackupRestoreCanQueryIndex_CreatedAfterRestore()
[Fact]
public void AfterBackupRestoreCanQueryIndex_CreatedBeforeRestore()
{
DeleteIfExists("raven.db.test.backup"); // for full backups, we can't have anything in the target dir

db.Put("ayende", null, RavenJObject.Parse("{'email':'ayende@ayende.com'}"), RavenJObject.Parse("{'Raven-Entity-Name':'Users'}"), null);
db.SpinBackgroundWorkers();
QueryResult queryResult;
Expand All @@ -121,14 +98,13 @@ public void AfterBackupRestoreCanQueryIndex_CreatedBeforeRestore()
} while (queryResult.IsStale);
Assert.Equal(1, queryResult.Results.Count);

db.StartBackup("raven.db.test.backup", false);
WaitForBackup(true);
db.StartBackup(BackupDir, false);
WaitForBackup(db, true);

db.Dispose();

DeleteIfExists(DataDir);

DocumentDatabase.Restore(new RavenConfiguration(), "raven.db.test.backup", DataDir);
DocumentDatabase.Restore(new RavenConfiguration(), BackupDir, DataDir);

db = new DocumentDatabase(new RavenConfiguration { DataDirectory = DataDir });

Expand All @@ -143,8 +119,6 @@ public void AfterBackupRestoreCanQueryIndex_CreatedBeforeRestore()
[Fact]
public void AfterFailedBackupRestoreCanDetectError()
{
DeleteIfExists("raven.db.test.backup"); // for full backups, we can't have anything in the target dir

db.Put("ayende", null, RavenJObject.Parse("{'email':'ayende@ayende.com'}"), RavenJObject.Parse("{'Raven-Entity-Name':'Users'}"), null);
db.SpinBackgroundWorkers();
QueryResult queryResult;
Expand All @@ -158,10 +132,9 @@ public void AfterFailedBackupRestoreCanDetectError()
} while (queryResult.IsStale);
Assert.Equal(1, queryResult.Results.Count);


File.WriteAllText("raven.db.test.backup.txt", "Sabotage!");
db.StartBackup("raven.db.test.backup.txt", false);
WaitForBackup(false);
WaitForBackup(db, false);

Assert.True(GetStateOfLastStatusMessage().Severity == BackupStatus.BackupMessageSeverity.Error);
}
Expand All @@ -172,28 +145,5 @@ private BackupStatus.BackupMessage GetStateOfLastStatusMessage()
var backupStatus = jsonDocument.DataAsJson.JsonDeserialization<BackupStatus>();
return backupStatus.Messages.OrderByDescending(m => m.Timestamp).First();
}

private void WaitForBackup(bool checkError)
{
while (true)
{
var jsonDocument = db.Get(BackupStatus.RavenBackupStatusDocumentKey, null);
if (jsonDocument == null)
break;
var backupStatus = jsonDocument.DataAsJson.JsonDeserialization<BackupStatus>();
if (backupStatus.IsRunning == false)
{
if (checkError)
{
var firstOrDefault = backupStatus.Messages.FirstOrDefault(x => x.Severity == BackupStatus.BackupMessageSeverity.Error);
if (firstOrDefault != null)
Assert.False(true, firstOrDefault.Message);
}

return;
}
Thread.Sleep(50);
}
}
}
}
}
58 changes: 6 additions & 52 deletions Raven.Tests/Storage/IncrementalBackupRestore.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
using System;
using System.IO;
using System.Linq;
using System.Threading;
using Raven.Abstractions.Data;
using Raven.Abstractions.Extensions;
using Raven.Client.Indexes;
using Raven.Client.Indexes;
using Raven.Database;
using Raven.Database.Backup;
using Raven.Database.Config;
using Raven.Database.Extensions;
using Raven.Json.Linq;
using Xunit;

Expand Down Expand Up @@ -38,57 +30,19 @@ public override void Dispose()
base.Dispose();
}

private static void DeleteIfExists(string DirectoryName)
{
string directoryFullName = null;

if (Path.IsPathRooted(DirectoryName) == false)
directoryFullName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DirectoryName);
else
directoryFullName = DirectoryName;

IOExtensions.DeleteDirectory(directoryFullName);
}

private void WaitForBackup(bool checkError)
{
while (true)
{
var jsonDocument = db.Get(BackupStatus.RavenBackupStatusDocumentKey, null);
if (jsonDocument == null)
break;
var backupStatus = jsonDocument.DataAsJson.JsonDeserialization<BackupStatus>();
if (backupStatus.IsRunning == false)
{
if (checkError)
{
var firstOrDefault = backupStatus.Messages.FirstOrDefault(x => x.Severity == BackupStatus.BackupMessageSeverity.Error);
if(firstOrDefault != null)
Assert.False(true, firstOrDefault.Message);
}

return;
}
Thread.Sleep(50);
}
}

[Fact]
public void AfterIncrementalBackupRestoreCanReadDocument()
{
DeleteIfExists("raven.db.test.backup"); // for full backups, we can't have anything in the target dir

db.Put("ayende", null, RavenJObject.Parse("{'email':'ayende@ayende.com'}"), new RavenJObject(), null);

db.StartBackup("raven.db.test.backup", false);
WaitForBackup(true);
db.StartBackup(BackupDir, false);
WaitForBackup(db, true);

db.Put("itamar", null, RavenJObject.Parse("{'email':'itamar@ayende.com'}"), new RavenJObject(), null);
db.StartBackup("raven.db.test.backup", true);
WaitForBackup(true);
db.StartBackup(BackupDir, true);
WaitForBackup(db, true);

db.Dispose();

DeleteIfExists(DataDir);

DocumentDatabase.Restore(new RavenConfiguration
Expand All @@ -98,7 +52,7 @@ public void AfterIncrementalBackupRestoreCanReadDocument()
{"Raven/Esent/CircularLog", "false"}
}

}, "raven.db.test.backup", DataDir);
}, BackupDir, DataDir);

db = new DocumentDatabase(new RavenConfiguration { DataDirectory = DataDir });

Expand Down

0 comments on commit 861c9e8

Please sign in to comment.