public async Task TestCreateAndSave() { var path = Path.Combine(Path.GetTempPath(), "NewDatabase.kdbx"); var newFile = await _fileProxy.OpenBinaryFile(path); await _database.Create(_credentials, "NewDatabase"); var result = await _database.SaveDatabase(); await _fileProxy.WriteBinaryContentsToFile(path, result); _database.CloseDatabase(); Assert.DoesNotThrowAsync(async() => { await _database.Open(newFile, _credentials); }); }
public async Task Handle(SaveDatabaseCommand message) { if (!_database.IsOpen) { throw new DatabaseClosedException(); } try { var timeToSave = Stopwatch.StartNew(); if (!string.IsNullOrEmpty(message.FilePath)) { _database.FileAccessToken = message.FilePath; } var contents = await _database.SaveDatabase(); // Test DB integrity _database.CloseDatabase(); await _database.ReOpen(contents); // Transactional write to file await _file.WriteBinaryContentsToFile(_database.FileAccessToken, contents); timeToSave.Stop(); _logger.LogTrace("SaveCommand", new Dictionary <string, string> { { "duration", timeToSave.ElapsedMilliseconds.ToString() }, { "size", _database.Size.ToString() } }); } catch (Exception exception) { throw new SaveException(exception); } }