Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions tests/ArrowDbCore.Tests.Integrity/OverwriteForceClear.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
using Bogus;

namespace ArrowDbCore.Tests.Integrity;

public class OverwriteForceClear {
[Fact]
public async Task SerializeOverwritesExistingFile() {
const int itemCount = 1_000;

var faker = new Faker<Person>();
faker.UseSeed(1337);
faker.RuleFor(p => p.Name, (f, _) => f.Name.FullName());
faker.RuleFor(p => p.Age, (f, _) => f.Random.Int(1, 100));
faker.RuleFor(p => p.BirthDate, (f, _) => f.Date.Past(1, DateTime.Now.AddYears(-100)));
faker.RuleFor(p => p.IsMarried, (f, _) => f.Random.Bool());

var buffer = new char[256];

var path = Sharpify.Utils.Env.PathInBaseDirectory("overwrite-test.db");
try {
// load the db
var db = await ArrowDb.CreateFromFile(path);
// clear
db.Clear();
// add items
for (var j = 0; j < itemCount; j++) {
var person = faker.Generate();
var key = ArrowDb.GenerateTypedKey<Person>(person.Name, buffer);
db.Upsert(key, person, JContext.Default.Person);
}
// save
await db.SerializeAsync();
// now we have sample data to verify overwrite
var fileSize = new FileInfo(path).Length;
// now we overwrite
db.Clear();
await db.SerializeAsync();
// clear data and overwritten (file should next to empty - aside from headers)
var newFileSize = new FileInfo(path).Length;
// check if new is smaller
Assert.True(newFileSize < fileSize);
} finally {
if (File.Exists(path)) {
File.Delete(path);
}
}

// this test fails if an exception is thrown or the file is not overwritten
}
}
Loading