Skip to content

Commit 14cbb67

Browse files
committed
Reviewed Environment and Database API for similar changes
1 parent 3528a88 commit 14cbb67

15 files changed

+277
-392
lines changed

src/LightningDB.Tests/DatabaseIOTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public void DatabaseGetShouldNotThrowExceptions()
4444
}
4545

4646
[Fact]
47-
public void DatabaseInsertedValueShouldBeRetrivedThen()
47+
public void DatabaseInsertedValueShouldBeRetrievedThen()
4848
{
4949
var key = "key";
5050
var value = "value";

src/LightningDB.Tests/DatabaseTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ public void TruncatingTheDatabase()
166166
db = _txn.OpenDatabase();
167167
var result = _txn.Get(db, UTF8.GetBytes("hello"));
168168

169-
Assert.Null(result);
169+
Assert.Equal(MDBResultCode.NotFound, result.resultCode);
170170
}
171171
}
172172
}

src/LightningDB.Tests/TestHelperExtensions.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ namespace LightningDB.Tests
66
{
77
public static class TestHelperExtensions
88
{
9-
public static void Put(this LightningTransaction tx, LightningDatabase db, string key, string value)
9+
public static MDBResultCode Put(this LightningTransaction tx, LightningDatabase db, string key, string value)
1010
{
1111
var enc = System.Text.Encoding.UTF8;
12-
tx.Put(db, enc.GetBytes(key), enc.GetBytes(value));
12+
return tx.Put(db, enc.GetBytes(key), enc.GetBytes(value));
1313
}
1414

1515
public static string Get(this LightningTransaction tx, LightningDatabase db, string key)
1616
{
1717
var enc = System.Text.Encoding.UTF8;
1818
var result = tx.Get(db, enc.GetBytes(key));
19-
return enc.GetString(result);
19+
return enc.GetString(result.value.CopyToNewArray());
2020
}
2121

2222
public static void Delete(this LightningTransaction tx, LightningDatabase db, string key)
@@ -57,5 +57,14 @@ public static void RunCursorScenario(this LightningEnvironment env,
5757
using var cursor = tx.CreateCursor(db);
5858
scenario(tx, db, cursor);
5959
}
60+
61+
public static void RunTransactionScenario(this LightningEnvironment env,
62+
Action<LightningTransaction, LightningDatabase> scenario,
63+
DatabaseOpenFlags flags = DatabaseOpenFlags.Create, TransactionBeginFlags transactionFlags = TransactionBeginFlags.None)
64+
{
65+
using var tx = env.BeginTransaction(transactionFlags);
66+
using var db = tx.OpenDatabase(configuration: new DatabaseConfiguration { Flags = flags });
67+
scenario(tx, db);
68+
}
6069
}
6170
}

src/LightningDB.Tests/TransactionTests.cs

Lines changed: 80 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
namespace LightningDB.Tests
88
{
99
[Collection("SharedFileSystem")]
10-
public class TransactionDupFixedTests : IDisposable
10+
public class TransactionTests : IDisposable
1111
{
12-
private LightningEnvironment _env;
12+
private readonly LightningEnvironment _env;
1313

14-
public TransactionDupFixedTests(SharedFileSystem fileSystem)
14+
public TransactionTests(SharedFileSystem fileSystem)
1515
{
1616
var path = fileSystem.CreateNewDirectoryForTest();
1717
_env = new LightningEnvironment(path);
@@ -22,167 +22,143 @@ public void Dispose()
2222
{
2323
_env.Dispose();
2424
}
25-
26-
25+
2726
[Fact]
28-
public void CanCountTransactionEntries()
27+
public void CanDeletePreviouslyCommittedWithMultipleValuesByPassingNullForValue()
2928
{
30-
LightningDatabase db;
31-
32-
using (var openDbTxn = _env.BeginTransaction())
33-
{
34-
db = openDbTxn.OpenDatabase();
35-
}
36-
37-
var key = MemoryMarshal.Cast<char, byte>("abcd");
38-
39-
using(var writeTxn = _env.BeginTransaction())
29+
_env.RunTransactionScenario((tx, db) =>
4030
{
41-
writeTxn.Put(db, key, MemoryMarshal.Cast<char,byte>("Value1"));
42-
writeTxn.Put(db, key, MemoryMarshal.Cast<char, byte>("Value2"));
43-
writeTxn.Commit();
44-
}
45-
46-
using (var delTxn = _env.BeginTransaction())
47-
{
48-
delTxn.Delete(db, key, null);//should not throw
49-
delTxn.Commit();
50-
}
51-
}
52-
}
53-
54-
55-
[Collection("SharedFileSystem")]
56-
public class TransactionTests : IDisposable
57-
{
58-
private LightningEnvironment _env;
59-
60-
public TransactionTests(SharedFileSystem fileSystem)
61-
{
62-
var path = fileSystem.CreateNewDirectoryForTest();
63-
_env = new LightningEnvironment(path);
64-
_env.Open();
65-
}
31+
var key = MemoryMarshal.Cast<char, byte>("abcd");
6632

67-
public void Dispose()
68-
{
69-
_env.Dispose();
33+
tx.Put(db, key, MemoryMarshal.Cast<char, byte>("Value1"));
34+
tx.Put(db, key, MemoryMarshal.Cast<char, byte>("Value2"), PutOptions.AppendData);
35+
tx.Commit();
36+
tx.Dispose();
37+
38+
using var delTxn = _env.BeginTransaction();
39+
var result = delTxn.Delete(db, key, null);
40+
Assert.Equal(MDBResultCode.Success, result);
41+
result = delTxn.Commit();
42+
Assert.Equal(MDBResultCode.Success, result);
43+
}, DatabaseOpenFlags.Create | DatabaseOpenFlags.DuplicatesFixed);
7044
}
7145

7246
[Fact]
7347
public void TransactionShouldBeCreated()
7448
{
75-
var txn = _env.BeginTransaction();
76-
77-
Assert.Equal(LightningTransactionState.Active, txn.State);
49+
_env.RunTransactionScenario((tx, db) =>
50+
{
51+
Assert.Equal(LightningTransactionState.Active, tx.State);
52+
});
7853
}
7954

8055
[Fact]
8156
public void TransactionShouldBeAbortedIfEnvironmentCloses()
8257
{
83-
var txn = _env.BeginTransaction();
84-
85-
_env.Dispose();
86-
87-
Assert.Equal(LightningTransactionState.Aborted, txn.State);
58+
_env.RunTransactionScenario((tx, db) =>
59+
{
60+
_env.Dispose();
61+
Assert.Equal(LightningTransactionState.Aborted, tx.State);
62+
});
8863
}
8964

9065
[Fact]
9166
public void TransactionShouldChangeStateOnCommit()
9267
{
93-
var txn = _env.BeginTransaction();
94-
95-
txn.Commit();
96-
97-
Assert.Equal(LightningTransactionState.Commited, txn.State);
68+
_env.RunTransactionScenario((tx, db) =>
69+
{
70+
tx.Commit();
71+
Assert.Equal(LightningTransactionState.Commited, tx.State);
72+
});
9873
}
9974

10075
[Fact]
10176
public void ChildTransactionShouldBeCreated()
10277
{
103-
var txn = _env.BeginTransaction();
104-
105-
var subTxn = txn.BeginTransaction();
106-
107-
Assert.Equal(LightningTransactionState.Active, subTxn.State);
78+
_env.RunTransactionScenario((tx, db) =>
79+
{
80+
var subTxn = tx.BeginTransaction();
81+
Assert.Equal(LightningTransactionState.Active, subTxn.State);
82+
});
10883
}
10984

11085
[Fact]
11186
public void ResetTransactionAbortedOnDispose()
11287
{
113-
var txn = _env.BeginTransaction(TransactionBeginFlags.ReadOnly);
114-
txn.Reset();
115-
txn.Dispose();
116-
Assert.Equal(LightningTransactionState.Aborted, txn.State);
88+
_env.RunTransactionScenario((tx, db) =>
89+
{
90+
tx.Reset();
91+
tx.Dispose();
92+
Assert.Equal(LightningTransactionState.Aborted, tx.State);
93+
}, transactionFlags: TransactionBeginFlags.ReadOnly);
11794
}
11895

11996
[Fact]
12097
public void ChildTransactionShouldBeAbortedIfParentIsAborted()
12198
{
122-
var txn = _env.BeginTransaction();
123-
var child = txn.BeginTransaction();
124-
125-
txn.Abort();
126-
127-
Assert.Equal(LightningTransactionState.Aborted, child.State);
99+
_env.RunTransactionScenario((tx, db) =>
100+
{
101+
var child = tx.BeginTransaction();
102+
tx.Abort();
103+
Assert.Equal(LightningTransactionState.Aborted, child.State);
104+
});
128105
}
129106

130107
[Fact]
131108
public void ChildTransactionShouldBeAbortedIfParentIsCommited()
132109
{
133-
var txn = _env.BeginTransaction();
134-
var child = txn.BeginTransaction();
135-
136-
txn.Commit();
137-
138-
Assert.Equal(LightningTransactionState.Aborted, child.State);
110+
_env.RunTransactionScenario((tx, db) =>
111+
{
112+
var child = tx.BeginTransaction();
113+
tx.Commit();
114+
Assert.Equal(LightningTransactionState.Aborted, child.State);
115+
});
139116
}
140117

141118
[Fact]
142119
public void ChildTransactionShouldBeAbortedIfEnvironmentIsClosed()
143120
{
144-
var txn = _env.BeginTransaction();
145-
var child = txn.BeginTransaction();
146-
147-
_env.Dispose();
148-
149-
Assert.Equal(LightningTransactionState.Aborted, child.State);
121+
_env.RunTransactionScenario((tx, db) =>
122+
{
123+
var child = tx.BeginTransaction();
124+
_env.Dispose();
125+
Assert.Equal(LightningTransactionState.Aborted, child.State);
126+
});
150127
}
151128

152129
[Fact]
153130
public void ReadOnlyTransactionShouldChangeStateOnReset()
154131
{
155-
var txn = _env.BeginTransaction(TransactionBeginFlags.ReadOnly);
156-
157-
txn.Reset();
158-
159-
Assert.Equal(LightningTransactionState.Reseted, txn.State);
132+
_env.RunTransactionScenario((tx, db) =>
133+
{
134+
tx.Reset();
135+
Assert.Equal(LightningTransactionState.Reseted, tx.State);
136+
}, transactionFlags: TransactionBeginFlags.ReadOnly);
160137
}
161138

162139
[Fact]
163140
public void ReadOnlyTransactionShouldChangeStateOnRenew()
164141
{
165-
var txn = _env.BeginTransaction(TransactionBeginFlags.ReadOnly);
166-
txn.Reset();
167-
168-
txn.Renew();
169-
170-
Assert.Equal(LightningTransactionState.Active, txn.State);
142+
_env.RunTransactionScenario((tx, db) =>
143+
{
144+
tx.Reset();
145+
tx.Renew();
146+
Assert.Equal(LightningTransactionState.Active, tx.State);
147+
}, transactionFlags: TransactionBeginFlags.ReadOnly);
171148
}
172149

173150
[Fact]
174151
public void CanCountTransactionEntries()
175152
{
176-
var txn = _env.BeginTransaction();
177-
var db = txn.OpenDatabase();
178-
179-
const int entriesCount = 10;
180-
for (var i = 0; i < entriesCount; i++)
181-
txn.Put(db, i.ToString(), i.ToString());
182-
183-
var count = txn.GetEntriesCount(db);
153+
_env.RunTransactionScenario((tx, db) =>
154+
{
155+
const int entriesCount = 10;
156+
for (var i = 0; i < entriesCount; i++)
157+
tx.Put(db, i.ToString(), i.ToString());
184158

185-
Assert.Equal(entriesCount, count);
159+
var count = tx.GetEntriesCount(db);
160+
Assert.Equal(entriesCount, count);
161+
});
186162
}
187163

188164
[Fact]

src/LightningDB/GetResult.cs

Lines changed: 0 additions & 70 deletions
This file was deleted.

0 commit comments

Comments
 (0)