Skip to content

Commit 96cfa5c

Browse files
committed
tests: Tests for batch put, get and commit
1 parent 7c3b416 commit 96cfa5c

7 files changed

+193
-25
lines changed

src/leveldb.batch.pas

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
unit LevelDB.Batch;
2+
3+
{$mode objfpc}{$H+}
4+
5+
interface
6+
7+
uses
8+
ctypes
9+
, LevelDB.Common
10+
;
11+
12+
// Tested
13+
function leveldb_writebatch_create(): Pleveldb_writebatch_t; cdecl; external libname;
14+
// Tested
15+
procedure leveldb_writebatch_destroy(batch: Pleveldb_writebatch_t); cdecl; external libname;
16+
// Tested
17+
procedure leveldb_writebatch_clear(batch: Pleveldb_writebatch_t); cdecl; external libname;
18+
// Tested
19+
procedure leveldb_writebatch_put(batch: Pleveldb_writebatch_t; const key: PChar; keylen: csize_t; const val: PChar; vallen: csize_t); cdecl; external libname;
20+
// Tested
21+
procedure leveldb_writebatch_delete(batch: Pleveldb_writebatch_t; const key: PChar; keylen: csize_t); cdecl; external libname;
22+
//procedure leveldb_writebatch_iterate(batch: Pleveldb_writebatch_t; state: Pleveldb_state_t; put: procedure(state: Pleveldb_state_t; const key: PChar; keylen: csize_t; const val: PChar; vallen: csize_t); cdecl; deleted: procedure(state: Pleveldb_state_t; const key: PChar; keylen: csize_t); cdecl); cdecl; external libname;
23+
function leveldb_writebatch_append(destination: Pleveldb_writebatch_t; source: Pleveldb_writebatch_t): leveldb_status_t; cdecl; external libname;
24+
25+
implementation
26+
27+
end.

src/leveldb.common.pas

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ interface
2222
Pleveldb_readoptions_t = ^leveldb_readoptions_t;
2323
Pleveldb_seqfile_t = ^leveldb_seqfile_t;
2424
Pleveldb_snapshot_t = ^leveldb_snapshot_t;
25+
Pleveldb_state_t = ^leveldb_state_t;
26+
Pleveldb_status_t = ^leveldb_status_t;
2527
Pleveldb_writablefile_t = ^leveldb_writablefile_t;
2628
Pleveldb_writebatch_t = ^leveldb_writebatch_t;
2729
Pleveldb_writeoptions_t = ^leveldb_writeoptions_t;
@@ -40,6 +42,8 @@ leveldb_randomfile_t = record end;
4042
leveldb_readoptions_t = record end;
4143
leveldb_seqfile_t = record end;
4244
leveldb_snapshot_t = record end;
45+
leveldb_state_t = record end;
46+
leveldb_status_t = record end;
4347
leveldb_writablefile_t = record end;
4448
leveldb_writebatch_t = record end;
4549
leveldb_writeoptions_t = record end;
@@ -50,6 +54,9 @@ leveldb_writeoptions_t = record end;
5054
{$ENDIF}
5155
{$IFDEF WINDOWS}
5256
libname = 'libleveldb.dll'; // May have a different name
57+
{$ENDIF}
58+
{$IFDEF DARWIN}
59+
libname = 'libleveldb.???'; // May have a different name
5360
{$ENDIF}
5461
// Status codes
5562
LEVELDB_OK = 0;
@@ -65,4 +72,4 @@ leveldb_writeoptions_t = record end;
6572

6673
implementation
6774

68-
end.
75+
end.

src/leveldb.main.pas

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,23 @@ interface
1010
;
1111

1212
procedure leveldb_destroy_db(options: Pleveldb_options_t; const name: PChar; err: PChar); cdecl; external libname;
13+
// Tested
1314
function leveldb_open(options: Pleveldb_options_t; const name: PChar; err: PChar): Pleveldb_t; cdecl; external libname;
15+
// Tested
1416
procedure leveldb_close(db: Pleveldb_t); cdecl; external libname;
17+
// Tested
1518
function leveldb_put(db: Pleveldb_t; options: Pleveldb_writeoptions_t; const key: PChar; keylen: csize_t;
1619
const value: PChar; valuelen: csize_t; err: PChar): cint; cdecl; external libname;
20+
// Tested
1721
function leveldb_get(db: Pleveldb_t; options: Pleveldb_readoptions_t; const key: PChar; keylen: csize_t;
1822
valuelen: Pcsize_t; err: PChar): PChar; cdecl; external libname;
23+
// Tested
1924
procedure leveldb_delete(db: Pleveldb_t; options: Pleveldb_writeoptions_t; const key: PChar;
2025
keylen: csize_t; err: PChar); cdecl; external libname;
26+
// Tested
2127
procedure leveldb_write(db: Pleveldb_t; options: Pleveldb_writeoptions_t; batch: Pleveldb_writebatch_t;
2228
err: PChar); cdecl; external libname;
29+
// Tested
2330
procedure leveldb_free(ptr: Pointer); cdecl; external libname;
2431

2532
implementation

src/leveldb.options.pas

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,34 +16,41 @@ interface
1616
LEVELDB_DEFAULT_BLOCK_RESTART_INTERVAL = 16;
1717
LEVELDB_DEFAULT_MAX_FILE_SIZE = 2 * 1024 * 1024;
1818

19-
function leveldb_options_create(): Pleveldb_options_t; cdecl; external libname;
20-
procedure leveldb_options_destroy(options: Pleveldb_options_t); cdecl; external libname;
21-
procedure leveldb_options_set_comparator(options: Pleveldb_options_t; cmp: Pleveldb_comparator_t); cdecl; external libname;
22-
procedure leveldb_options_set_filter_policy(options: Pleveldb_options_t; policy: Pleveldb_filterpolicy_t); cdecl; external libname;
23-
procedure leveldb_options_set_create_if_missing(options: Pleveldb_options_t; value: cbool); cdecl; external libname;
24-
procedure leveldb_options_set_error_if_exists(options: Pleveldb_options_t; value: cbool); cdecl; external libname;
25-
procedure leveldb_options_set_paranoid_checks(options: Pleveldb_options_t; value: cbool); cdecl; external libname;
26-
procedure leveldb_options_set_env(options: Pleveldb_options_t; env: Pleveldb_env_t); cdecl; external libname;
27-
procedure leveldb_options_set_info_log(options: Pleveldb_options_t; logger: Pleveldb_logger_t); cdecl; external libname;
28-
procedure leveldb_options_set_write_buffer_size(options: Pleveldb_options_t; size: cint); cdecl; external libname;
29-
procedure leveldb_options_set_max_open_files(options: Pleveldb_options_t; num: cint); cdecl; external libname;
30-
procedure leveldb_options_set_cache(options: Pleveldb_options_t; cache: Pleveldb_cache_t); cdecl; external libname;
31-
procedure leveldb_options_set_block_size(options: Pleveldb_options_t; size: cint); cdecl; external libname;
32-
procedure leveldb_options_set_block_restart_interval(options: Pleveldb_options_t; interval: cint); cdecl; external libname;
33-
procedure leveldb_options_set_max_file_size(options: Pleveldb_options_t; size: cint); cdecl; external libname;
34-
procedure leveldb_options_set_compression(options: Pleveldb_options_t; level: cint); cdecl; external libname;
19+
// Tested
20+
function leveldb_options_create(): Pleveldb_options_t; cdecl; external libname;
21+
// Tested
22+
procedure leveldb_options_destroy(options: Pleveldb_options_t); cdecl; external libname;
23+
procedure leveldb_options_set_comparator(options: Pleveldb_options_t; cmp: Pleveldb_comparator_t); cdecl; external libname;
24+
procedure leveldb_options_set_filter_policy(options: Pleveldb_options_t; policy: Pleveldb_filterpolicy_t); cdecl; external libname;
25+
// Tested
26+
procedure leveldb_options_set_create_if_missing(options: Pleveldb_options_t; value: cbool); cdecl; external libname;
27+
procedure leveldb_options_set_error_if_exists(options: Pleveldb_options_t; value: cbool); cdecl; external libname;
28+
procedure leveldb_options_set_paranoid_checks(options: Pleveldb_options_t; value: cbool); cdecl; external libname;
29+
procedure leveldb_options_set_env(options: Pleveldb_options_t; env: Pleveldb_env_t); cdecl; external libname;
30+
procedure leveldb_options_set_info_log(options: Pleveldb_options_t; logger: Pleveldb_logger_t); cdecl; external libname;
31+
procedure leveldb_options_set_write_buffer_size(options: Pleveldb_options_t; size: cint); cdecl; external libname;
32+
procedure leveldb_options_set_max_open_files(options: Pleveldb_options_t; num: cint); cdecl; external libname;
33+
procedure leveldb_options_set_cache(options: Pleveldb_options_t; cache: Pleveldb_cache_t); cdecl; external libname;
34+
procedure leveldb_options_set_block_size(options: Pleveldb_options_t; size: cint); cdecl; external libname;
35+
procedure leveldb_options_set_block_restart_interval(options: Pleveldb_options_t; interval: cint); cdecl; external libname;
36+
procedure leveldb_options_set_max_file_size(options: Pleveldb_options_t; size: cint); cdecl; external libname;
37+
procedure leveldb_options_set_compression(options: Pleveldb_options_t; level: cint); cdecl; external libname;
3538

3639
// Read options
37-
function leveldb_readoptions_create(): Pleveldb_readoptions_t; cdecl; external libname;
38-
procedure leveldb_readoptions_destroy(options: Pleveldb_readoptions_t); cdecl; external libname;
39-
procedure leveldb_readoptions_set_verify_checksums(options: Pleveldb_readoptions_t; value: cbool); cdecl; external libname;
40-
procedure leveldb_readoptions_set_fill_cache(options: Pleveldb_readoptions_t; value: cbool); cdecl; external libname;
41-
procedure leveldb_readoptions_set_snapshot(options: Pleveldb_readoptions_t; snapshot: Pleveldb_snapshot_t); cdecl; external libname;
40+
// Tested
41+
function leveldb_readoptions_create(): Pleveldb_readoptions_t; cdecl; external libname;
42+
// Tested
43+
procedure leveldb_readoptions_destroy(options: Pleveldb_readoptions_t); cdecl; external libname;
44+
procedure leveldb_readoptions_set_verify_checksums(options: Pleveldb_readoptions_t; value: cbool); cdecl; external libname;
45+
procedure leveldb_readoptions_set_fill_cache(options: Pleveldb_readoptions_t; value: cbool); cdecl; external libname;
46+
procedure leveldb_readoptions_set_snapshot(options: Pleveldb_readoptions_t; snapshot: Pleveldb_snapshot_t); cdecl; external libname;
4247

4348
// Write options
44-
function leveldb_writeoptions_create(): Pleveldb_writeoptions_t; cdecl; external libname;
45-
procedure leveldb_writeoptions_destroy(options: Pleveldb_writeoptions_t); cdecl; external libname;
46-
procedure leveldb_writeoptions_set_sync(options: Pleveldb_writeoptions_t; value: cbool); cdecl; external libname;
49+
// Tested
50+
function leveldb_writeoptions_create(): Pleveldb_writeoptions_t; cdecl; external libname;
51+
// Tested
52+
procedure leveldb_writeoptions_destroy(options: Pleveldb_writeoptions_t); cdecl; external libname;
53+
procedure leveldb_writeoptions_set_sync(options: Pleveldb_writeoptions_t; value: cbool); cdecl; external libname;
4754

4855
implementation
4956

tests/testleveldb.lpi

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@
100100
<IsPartOfProject Value="True"/>
101101
<UnitName Value="TestLevelDBMain"/>
102102
</Unit>
103+
<Unit>
104+
<Filename Value="testleveldbbatch.pas"/>
105+
<IsPartOfProject Value="True"/>
106+
<UnitName Value="TestLevelDBBatch"/>
107+
</Unit>
103108
</Units>
104109
</ProjectOptions>
105110
<CompilerOptions>

tests/testleveldb.lpr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
Classes
77
, consoletestrunner
88
, TestLevelDBMain
9+
, TestLevelDBBatch
910
;
1011

1112
type

tests/testleveldbbatch.pas

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
unit TestLevelDBBatch;
2+
3+
{$mode objfpc}{$H+}
4+
5+
interface
6+
7+
uses
8+
Classes
9+
, SysUtils
10+
, fpcunit
11+
//, testutils
12+
, testregistry
13+
, LevelDB.Common
14+
, LevelDB.Main
15+
, LevelDB.Options
16+
, LevelDB.Batch
17+
;
18+
19+
type
20+
21+
{ TTestLevelDBBatch }
22+
23+
TTestLevelDBBatch= class(TTestCase)
24+
private
25+
FDB: Pleveldb_t;
26+
FOptions: Pleveldb_options_t;
27+
FWriteOptions: Pleveldb_writeoptions_t;
28+
FBatch: Pleveldb_writebatch_t;
29+
FError: PChar;
30+
protected
31+
procedure SetUp; override;
32+
procedure TearDown; override;
33+
published
34+
procedure TestLevelDBBatchPut;
35+
procedure TestLevelDBBatchDelete;
36+
procedure TestLevelDBBatchCommit;
37+
end;
38+
39+
implementation
40+
41+
const
42+
cDBPath = 'test.db';
43+
cTestKey = 'LevelDB';
44+
cTestValue = 'Rocks';
45+
46+
procedure TTestLevelDBBatch.SetUp;
47+
begin
48+
FError:= nil;
49+
FBatch:= nil;
50+
FOptions:= leveldb_options_create();
51+
leveldb_options_set_create_if_missing(FOptions, True);
52+
FDB:= leveldb_open(FOptions, PChar(cDBPath), @FError);
53+
end;
54+
55+
procedure TTestLevelDBBatch.TearDown;
56+
begin
57+
// Close down things
58+
if FBatch <> nil then
59+
leveldb_writebatch_destroy(FBatch);
60+
leveldb_options_destroy(FOptions);
61+
leveldb_close(FDB);
62+
63+
64+
if FError <> nil then
65+
leveldb_free(FError); // Free any remaining error strings
66+
end;
67+
68+
procedure TTestLevelDBBatch.TestLevelDBBatchPut;
69+
begin
70+
if FBatch = nil then
71+
FBatch := leveldb_writebatch_create();
72+
leveldb_writebatch_put(
73+
FBatch,
74+
PChar(cTestKey),
75+
Length(cTestKey),
76+
PChar(cTestValue),
77+
Length(cTestValue)
78+
);
79+
// Need to assert something here
80+
end;
81+
82+
procedure TTestLevelDBBatch.TestLevelDBBatchDelete;
83+
begin
84+
if FBatch = nil then
85+
FBatch := leveldb_writebatch_create();
86+
leveldb_writebatch_delete(
87+
FBatch,
88+
PChar(cTestKey),
89+
Length(cTestKey)
90+
);
91+
// Need to assert something here
92+
end;
93+
94+
procedure TTestLevelDBBatch.TestLevelDBBatchCommit;
95+
begin
96+
FWriteOptions := leveldb_writeoptions_create();
97+
if FBatch <> nil then
98+
begin
99+
leveldb_write(
100+
FDB,
101+
FWriteOptions,
102+
FBatch,
103+
@FError
104+
);
105+
AssertNull('After batch commit error is null', FError);
106+
leveldb_writebatch_clear(FBatch); // Clear the batch after committing
107+
end;
108+
leveldb_writeoptions_destroy(FWriteOptions);
109+
end;
110+
111+
initialization
112+
RegisterTest(TTestLevelDBBatch);
113+
end.
114+

0 commit comments

Comments
 (0)