public async Task PeriodicBackup_should_export_all_relevant_documents() { var existingData = new List <DummyDataEntry>(); var backupFolder = new DirectoryInfo(Path.GetTempPath() + "\\periodic_backup_" + Guid.NewGuid()); if (!backupFolder.Exists) { backupFolder.Create(); } documentStore.DatabaseCommands.GlobalAdmin.CreateDatabase(new DatabaseDocument { Id = "SourceDB", Settings = { { "Raven/ActiveBundles", "PeriodicBackup" }, { "Raven/DataDir", "~\\Databases\\SourceDB" } } }); documentStore.DatabaseCommands.GlobalAdmin.CreateDatabase(new DatabaseDocument { Id = "DestDB", Settings = { { "Raven/DataDir", "~\\Databases\\DestDB" } } }); //setup periodic export using (var session = documentStore.OpenSession("SourceDB")) { session.Store(new PeriodicExportSetup { LocalFolderName = backupFolder.FullName, IntervalMilliseconds = 500 }, PeriodicExportSetup.RavenDocumentKey); session.SaveChanges(); } //now enter dummy data using (var session = documentStore.OpenSession()) { for (int i = 0; i < 10000; i++) { var dummyDataEntry = new DummyDataEntry { Id = "Dummy/" + i, Data = "Data-" + i }; existingData.Add(dummyDataEntry); session.Store(dummyDataEntry); } session.SaveChanges(); } var connection = new RavenConnectionStringOptions { Url = documentStore.Url, DefaultDatabase = "DestDB" }; var smugglerApi = new SmugglerApi(); await smugglerApi.ImportData(new SmugglerImportOptions { FromFile = backupFolder.FullName, To = connection }, new SmugglerOptions { Incremental = true }); using (var session = documentStore.OpenSession()) { var fetchedData = new List <DummyDataEntry>(); using (var streamingQuery = session.Advanced.Stream <DummyDataEntry>("Dummy/")) { while (streamingQuery.MoveNext()) { fetchedData.Add(streamingQuery.Current.Document); } } Assert.Equal(existingData.Count, fetchedData.Count); Assert.True(existingData.Select(row => row.Data).ToHashSet().SetEquals(fetchedData.Select(row => row.Data))); } }
public async Task PeriodicBackup_should_export_all_relevant_documents() { var existingData = new List<DummyDataEntry>(); var backupFolder = new DirectoryInfo(Path.GetTempPath() + "\\periodic_backup_" + Guid.NewGuid()); if (!backupFolder.Exists) backupFolder.Create(); documentStore.DatabaseCommands.GlobalAdmin.CreateDatabase(new DatabaseDocument { Id = "SourceDB", Settings = { {"Raven/ActiveBundles", "PeriodicBackup"}, {"Raven/DataDir", "~\\Databases\\SourceDB"} } }); documentStore.DatabaseCommands.GlobalAdmin.CreateDatabase(new DatabaseDocument { Id = "DestDB", Settings = {{"Raven/DataDir", "~\\Databases\\DestDB"}} }); //setup periodic export using (var session = documentStore.OpenSession("SourceDB")) { session.Store(new PeriodicExportSetup {LocalFolderName = backupFolder.FullName, IntervalMilliseconds = 500}, PeriodicExportSetup.RavenDocumentKey); session.SaveChanges(); } //now enter dummy data using (var session = documentStore.OpenSession()) { for (int i = 0; i < 10000; i++) { var dummyDataEntry = new DummyDataEntry {Id = "Dummy/" + i, Data = "Data-" + i}; existingData.Add(dummyDataEntry); session.Store(dummyDataEntry); } session.SaveChanges(); } var connection = new RavenConnectionStringOptions {Url = documentStore.Url, DefaultDatabase = "DestDB"}; var smugglerApi = new SmugglerApi(); await smugglerApi.ImportData(new SmugglerImportOptions { FromFile = backupFolder.FullName, To = connection }, new SmugglerOptions { Incremental = true }); using (var session = documentStore.OpenSession()) { var fetchedData = new List<DummyDataEntry>(); using (var streamingQuery = session.Advanced.Stream<DummyDataEntry>("Dummy/")) { while (streamingQuery.MoveNext()) fetchedData.Add(streamingQuery.Current.Document); } Assert.Equal(existingData.Count, fetchedData.Count); Assert.True(existingData.Select(row => row.Data).ToHashSet().SetEquals(fetchedData.Select(row => row.Data))); } }
//[InlineData("munin")] public async Task PeriodicBackup_should_export_all_relevant_documents(string storageTypeName) { var existingData = new List<DummyDataEntry>(); var backupFolder = new DirectoryInfo(Path.GetTempPath() + "\\periodic_backup_" + Guid.NewGuid()); if (!backupFolder.Exists) backupFolder.Create(); using (var store = NewRemoteDocumentStore(runInMemory: false, requestedStorage: storageTypeName)) { store.DatabaseCommands.CreateDatabase(new DatabaseDocument { Id = "SourceDB", Settings = { {"Raven/ActiveBundles", "PeriodicBackup"}, {"Raven/DataDir", "~\\Databases\\SourceDB"} } }); store.DatabaseCommands.CreateDatabase(new DatabaseDocument { Id = "DestDB", Settings = {{"Raven/DataDir", "~\\Databases\\DestDB"}} }); } using(var ravenServer = GetNewServer(runInMemory:false,requestedStorage:storageTypeName)) using (var srcStore = NewRemoteDocumentStore(runInMemory: false, requestedStorage: storageTypeName,ravenDbServer:ravenServer, databaseName: "SourceDB")) { //setup periodic backup using (var session = srcStore.OpenSession("SourceDB")) { session.Store(new PeriodicBackupSetup { LocalFolderName = backupFolder.FullName, IntervalMilliseconds = 500 }, PeriodicBackupSetup.RavenDocumentKey); session.SaveChanges(); } //now enter dummy data using (var session = srcStore.OpenSession()) { for (int i = 0; i < 10000; i++) { var dummyDataEntry = new DummyDataEntry {Id = "Dummy/" + i, Data = "Data-" + i}; existingData.Add(dummyDataEntry); session.Store(dummyDataEntry); } session.SaveChanges(); } Thread.Sleep(10000); } using (var destStore = NewRemoteDocumentStore(runInMemory: false, requestedStorage: storageTypeName, databaseName: "DestDB")) { var smugglerApi = new SmugglerApi(new SmugglerOptions(), new RavenConnectionStringOptions {Url = destStore.Url, DefaultDatabase = "DestDB"}); await smugglerApi.ImportData(new SmugglerOptions {BackupPath = backupFolder.FullName}, true); using (var session = destStore.OpenSession()) { var fetchedData = new List<DummyDataEntry>(); using (var streamingQuery = session.Advanced.Stream<DummyDataEntry>("Dummy/")) { while (streamingQuery.MoveNext()) fetchedData.Add(streamingQuery.Current.Document); } Assert.Equal(existingData.Count, fetchedData.Count); Assert.True(existingData.Select(row => row.Data).ToHashSet().SetEquals(fetchedData.Select(row => row.Data))); } } }
public async Task PeriodicBackup_should_export_all_relevant_documents() { var existingData = new List <DummyDataEntry>(); var backupFolder = new DirectoryInfo(Path.GetTempPath() + "\\periodic_backup_" + Guid.NewGuid()); if (backupFolder.Exists == false) { backupFolder.Create(); } try { documentStore.DatabaseCommands.GlobalAdmin.CreateDatabase(new DatabaseDocument { Id = "SourceDB", Settings = { { "Raven/ActiveBundles", "PeriodicBackup" }, { "Raven/DataDir", "~\\Databases\\SourceDB" } } }); documentStore.DatabaseCommands.GlobalAdmin.CreateDatabase(new DatabaseDocument { Id = "TestDB", Settings = { { "Raven/DataDir", "~\\Databases\\TestDB" } } }); //now enter dummy data using (var session = documentStore.OpenSession("SourceDB")) { for (int i = 0; i < 10000; i++) { var dummyDataEntry = new DummyDataEntry { Id = "Dummy/" + i, Data = "Data-" + i }; existingData.Add(dummyDataEntry); session.Store(dummyDataEntry); } session.SaveChanges(); } var etag = documentStore.DatabaseCommands.ForDatabase("SourceDB").Get("Dummy/9999").Etag; //setup periodic export using (var session = documentStore.OpenSession("SourceDB")) { session.Store(new PeriodicExportSetup { LocalFolderName = backupFolder.FullName, IntervalMilliseconds = 500 }, PeriodicExportSetup.RavenDocumentKey); session.SaveChanges(); } var timeout = Debugger.IsAttached ? TimeSpan.FromMinutes(5) : TimeSpan.FromSeconds(5); SpinWait.SpinUntil(() => { var doc = documentStore.DatabaseCommands.ForDatabase("SourceDB").Get(PeriodicExportStatus.RavenDocumentKey); return(doc != null && doc.Etag == etag); }, timeout); var connection = new RavenConnectionStringOptions { Url = documentStore.Url, DefaultDatabase = "TestDB" }; var smugglerApi = new SmugglerDatabaseApi { Options = { Incremental = false } }; var actualBackupPath = Directory.GetDirectories(backupFolder.FullName)[0]; var fullBackupFilePath = Directory.GetFiles(actualBackupPath).FirstOrDefault(x => x.Contains("full")); Assert.NotNull(fullBackupFilePath); await smugglerApi.ImportData(new SmugglerImportOptions <RavenConnectionStringOptions> { FromFile = fullBackupFilePath, To = connection }); using (var session = documentStore.OpenSession("TestDB")) { var fetchedData = new List <DummyDataEntry>(); using (var streamingQuery = session.Advanced.Stream <DummyDataEntry>("Dummy/")) { while (streamingQuery.MoveNext()) { fetchedData.Add(streamingQuery.Current.Document); } } Assert.Equal(existingData.Count, fetchedData.Count); Assert.True(existingData.Select(row => row.Data).ToHashSet().SetEquals(fetchedData.Select(row => row.Data))); } } finally { IOExtensions.DeleteDirectory(backupFolder.FullName); } }
//[InlineData("munin")] public async Task PeriodicBackup_should_export_all_relevant_documents(string storageTypeName) { var existingData = new List <DummyDataEntry>(); var backupFolder = new DirectoryInfo(Path.GetTempPath() + "\\periodic_backup_" + Guid.NewGuid()); if (!backupFolder.Exists) { backupFolder.Create(); } using (var store = NewRemoteDocumentStore(runInMemory: false, requestedStorage: storageTypeName)) { store.DatabaseCommands.CreateDatabase(new DatabaseDocument { Id = "SourceDB", Settings = { { "Raven/ActiveBundles", "PeriodicBackup" }, { "Raven/DataDir", "~\\Databases\\SourceDB" } } }); store.DatabaseCommands.CreateDatabase(new DatabaseDocument { Id = "DestDB", Settings = { { "Raven/DataDir", "~\\Databases\\DestDB" } } }); } using (var ravenServer = GetNewServer(runInMemory: false, requestedStorage: storageTypeName)) using (var srcStore = NewRemoteDocumentStore(runInMemory: false, requestedStorage: storageTypeName, ravenDbServer: ravenServer, databaseName: "SourceDB")) { //setup periodic backup using (var session = srcStore.OpenSession("SourceDB")) { session.Store(new PeriodicBackupSetup { LocalFolderName = backupFolder.FullName, IntervalMilliseconds = 500 }, PeriodicBackupSetup.RavenDocumentKey); session.SaveChanges(); } //now enter dummy data using (var session = srcStore.OpenSession()) { for (int i = 0; i < 10000; i++) { var dummyDataEntry = new DummyDataEntry { Id = "Dummy/" + i, Data = "Data-" + i }; existingData.Add(dummyDataEntry); session.Store(dummyDataEntry); } session.SaveChanges(); } Thread.Sleep(10000); } using (var destStore = NewRemoteDocumentStore(runInMemory: false, requestedStorage: storageTypeName, databaseName: "DestDB")) { var smugglerApi = new SmugglerApi(new SmugglerOptions(), new RavenConnectionStringOptions { Url = destStore.Url, DefaultDatabase = "DestDB" }); await smugglerApi.ImportData(new SmugglerOptions { BackupPath = backupFolder.FullName }, true); using (var session = destStore.OpenSession()) { var fetchedData = new List <DummyDataEntry>(); using (var streamingQuery = session.Advanced.Stream <DummyDataEntry>("Dummy/")) { while (streamingQuery.MoveNext()) { fetchedData.Add(streamingQuery.Current.Document); } } Assert.Equal(existingData.Count, fetchedData.Count); Assert.True(existingData.Select(row => row.Data).ToHashSet().SetEquals(fetchedData.Select(row => row.Data))); } } }