7
7
namespace LightningDB . Tests
8
8
{
9
9
[ Collection ( "SharedFileSystem" ) ]
10
- public class TransactionDupFixedTests : IDisposable
10
+ public class TransactionTests : IDisposable
11
11
{
12
- private LightningEnvironment _env ;
12
+ private readonly LightningEnvironment _env ;
13
13
14
- public TransactionDupFixedTests ( SharedFileSystem fileSystem )
14
+ public TransactionTests ( SharedFileSystem fileSystem )
15
15
{
16
16
var path = fileSystem . CreateNewDirectoryForTest ( ) ;
17
17
_env = new LightningEnvironment ( path ) ;
@@ -22,167 +22,143 @@ public void Dispose()
22
22
{
23
23
_env . Dispose ( ) ;
24
24
}
25
-
26
-
25
+
27
26
[ Fact ]
28
- public void CanCountTransactionEntries ( )
27
+ public void CanDeletePreviouslyCommittedWithMultipleValuesByPassingNullForValue ( )
29
28
{
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 ) =>
40
30
{
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" ) ;
66
32
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 ) ;
70
44
}
71
45
72
46
[ Fact ]
73
47
public void TransactionShouldBeCreated ( )
74
48
{
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
+ } ) ;
78
53
}
79
54
80
55
[ Fact ]
81
56
public void TransactionShouldBeAbortedIfEnvironmentCloses ( )
82
57
{
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
+ } ) ;
88
63
}
89
64
90
65
[ Fact ]
91
66
public void TransactionShouldChangeStateOnCommit ( )
92
67
{
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
+ } ) ;
98
73
}
99
74
100
75
[ Fact ]
101
76
public void ChildTransactionShouldBeCreated ( )
102
77
{
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
+ } ) ;
108
83
}
109
84
110
85
[ Fact ]
111
86
public void ResetTransactionAbortedOnDispose ( )
112
87
{
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 ) ;
117
94
}
118
95
119
96
[ Fact ]
120
97
public void ChildTransactionShouldBeAbortedIfParentIsAborted ( )
121
98
{
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
+ } ) ;
128
105
}
129
106
130
107
[ Fact ]
131
108
public void ChildTransactionShouldBeAbortedIfParentIsCommited ( )
132
109
{
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
+ } ) ;
139
116
}
140
117
141
118
[ Fact ]
142
119
public void ChildTransactionShouldBeAbortedIfEnvironmentIsClosed ( )
143
120
{
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
+ } ) ;
150
127
}
151
128
152
129
[ Fact ]
153
130
public void ReadOnlyTransactionShouldChangeStateOnReset ( )
154
131
{
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 ) ;
160
137
}
161
138
162
139
[ Fact ]
163
140
public void ReadOnlyTransactionShouldChangeStateOnRenew ( )
164
141
{
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 ) ;
171
148
}
172
149
173
150
[ Fact ]
174
151
public void CanCountTransactionEntries ( )
175
152
{
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 ( ) ) ;
184
158
185
- Assert . Equal ( entriesCount , count ) ;
159
+ var count = tx . GetEntriesCount ( db ) ;
160
+ Assert . Equal ( entriesCount , count ) ;
161
+ } ) ;
186
162
}
187
163
188
164
[ Fact ]
0 commit comments