Skip to content

Add missing native functions to Lmdb imports and add much more test coverage #179

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 3, 2025
Merged
Show file tree
Hide file tree
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
338 changes: 310 additions & 28 deletions src/LightningDB.Tests/CursorTests.cs

Large diffs are not rendered by default.

18 changes: 9 additions & 9 deletions src/LightningDB.Tests/DatabaseIOTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ namespace LightningDB.Tests;

public class DatabaseIOTests : TestBase
{
public void DatabasePutShouldNotThrowExceptions()
public void database_put_should_not_throw_exceptions()
{
using var env = CreateEnvironment();
env.Open();
Expand All @@ -17,7 +17,7 @@ public void DatabasePutShouldNotThrowExceptions()
});
}

public void DatabaseGetShouldNotThrowExceptions()
public void database_get_should_not_throw_exceptions()
{
using var env = CreateEnvironment();
env.Open();
Expand All @@ -27,7 +27,7 @@ public void DatabaseGetShouldNotThrowExceptions()
});
}

public void DatabaseInsertedValueShouldBeRetrievedThen()
public void database_inserted_value_should_be_retrieved_then()
{
using var env = CreateEnvironment();
env.Open();
Expand All @@ -43,7 +43,7 @@ public void DatabaseInsertedValueShouldBeRetrievedThen()
});
}

public void DatabaseDeleteShouldRemoveItem()
public void database_delete_should_remove_item()
{
using var env = CreateEnvironment();
env.Open();
Expand All @@ -59,7 +59,7 @@ public void DatabaseDeleteShouldRemoveItem()
});
}

public void DatabaseDeleteShouldRemoveAllDuplicateDataItems()
public void database_delete_should_remove_all_duplicate_data_items()
{
using var env = CreateEnvironment(TempPath(), new EnvironmentConfiguration { MapSize = 1024 * 1024 });
env.Open();
Expand All @@ -77,7 +77,7 @@ public void DatabaseDeleteShouldRemoveAllDuplicateDataItems()
}, DatabaseOpenFlags.DuplicatesSort);
}

public void ContainsKeyShouldReturnTrueIfKeyExists()
public void contains_key_should_return_true_if_key_exists()
{
using var env = CreateEnvironment();
env.Open();
Expand All @@ -94,7 +94,7 @@ public void ContainsKeyShouldReturnTrueIfKeyExists()
});
}

public void ContainsKeyShouldReturnFalseIfKeyNotExists()
public void contains_key_should_return_false_if_key_not_exists()
{
using var env = CreateEnvironment();
env.Open();
Expand All @@ -107,7 +107,7 @@ public void ContainsKeyShouldReturnFalseIfKeyNotExists()
});
}

public void TryGetShouldReturnValueIfKeyExists()
public void try_get_should_return_value_if_key_exists()
{
using var env = CreateEnvironment();
env.Open();
Expand All @@ -125,7 +125,7 @@ public void TryGetShouldReturnValueIfKeyExists()
});
}

public void CanCommitTransactionToNamedDatabase()
public void can_commit_transaction_to_named_database()
{
using var env = CreateEnvironment(TempPath(), new EnvironmentConfiguration{MaxDatabases = 2});
env.Open();
Expand Down
63 changes: 55 additions & 8 deletions src/LightningDB.Tests/DatabaseTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace LightningDB.Tests;
public class DatabaseTests : TestBase
{

public void DatabaseShouldBeCreated()
public void database_should_be_created()
{
using var env = CreateEnvironment();
const string dbName = "test";
Expand All @@ -25,7 +25,7 @@ public void DatabaseShouldBeCreated()
}
}

public void DatabaseShouldBeClosed()
public void database_should_be_closed()
{
using var env = CreateEnvironment();
env.Open();
Expand All @@ -37,7 +37,7 @@ public void DatabaseShouldBeClosed()
db.IsOpened.ShouldBeFalse();
}

public void DatabaseFromCommittedTransactionShouldBeAccessible()
public void database_from_committed_transaction_should_be_accessible()
{
using var env = CreateEnvironment();
env.Open();
Expand All @@ -57,7 +57,7 @@ public void DatabaseFromCommittedTransactionShouldBeAccessible()
}
}

public void NamedDatabaseNameExistsInMaster()
public void named_database_name_exists_in_master()
{
using var env = CreateEnvironment();
env.MaxDatabases = 2;
Expand All @@ -80,7 +80,7 @@ public void NamedDatabaseNameExistsInMaster()
}
}

public void ReadonlyTransactionOpenedDatabasesDontGetReused()
public void readonly_transaction_opened_databases_dont_get_reused()
{
//This is here to assert that previous issues with the way manager
//classes (since removed) worked don't happen anymore.
Expand Down Expand Up @@ -108,7 +108,7 @@ public void ReadonlyTransactionOpenedDatabasesDontGetReused()
}
}

public void DatabaseShouldBeDropped()
public void database_should_be_dropped()
{
using var env = CreateEnvironment();
env.MaxDatabases = 2;
Expand All @@ -133,7 +133,7 @@ public void DatabaseShouldBeDropped()
}
}

public void TruncatingTheDatabase()
public void truncating_the_database()
{
using var env = CreateEnvironment();
env.Open();
Expand All @@ -160,7 +160,7 @@ public void TruncatingTheDatabase()
}
}

public void DatabaseCanGetStats()
public void database_can_get_stats()
{
using var env = CreateEnvironment();
env.Open();
Expand All @@ -176,4 +176,51 @@ public void DatabaseCanGetStats()
stats.PageSize.ShouldBe(env.EnvironmentStats.PageSize);
stats.BTreeDepth.ShouldBe(1);
}

public void can_get_database_flags()
{
using var env = CreateEnvironment();
env.MaxDatabases = 10; // Allow more named databases
env.Open();

// Test with the transaction-based GetFlags method using a named database with IntegerKey flag
using (var txn = env.BeginTransaction())
{
using var db = txn.OpenDatabase("intkey", new DatabaseConfiguration
{
Flags = DatabaseOpenFlags.Create | DatabaseOpenFlags.IntegerKey
});

// Test using explicit transaction
var flags = db.GetFlags(txn);
flags.ShouldNotBe(DatabaseOpenFlags.None);

// The flags should include DatabaseOpenFlags.IntegerKey
flags.HasFlag(DatabaseOpenFlags.IntegerKey).ShouldBeTrue();
txn.Commit();
}

// Test default database (should have no special flags)
using (var txn = env.BeginTransaction())
{
using var db = txn.OpenDatabase(null, new DatabaseConfiguration { Flags = DatabaseOpenFlags.Create });

var flags = db.GetFlags(txn);
flags.ShouldBe(DatabaseOpenFlags.None);
txn.Commit();
}

// Test DuplicatesSort flag
using (var txn = env.BeginTransaction())
{
using var db = txn.OpenDatabase("dupsort", new DatabaseConfiguration
{
Flags = DatabaseOpenFlags.Create | DatabaseOpenFlags.DuplicatesSort
});

var flags = db.GetFlags(txn);
flags.HasFlag(DatabaseOpenFlags.DuplicatesSort).ShouldBeTrue();
txn.Commit();
}
}
}
Loading