Example #1
0
        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);
                }
            }