11 #include <sys/types.h> 18 fprintf(stderr,
"=== Test %s\n", name);
23 const char* ret = getenv(
"TEST_TMPDIR");
24 if (ret == NULL || ret[0] ==
'\0')
29 #define CheckNoError(err) \ 30 if ((err) != NULL) { \ 31 fprintf(stderr, "%s:%d: %s: %s\n", __FILE__, __LINE__, phase, (err)); \ 35 #define CheckCondition(cond) \ 37 fprintf(stderr, "%s:%d: %s: %s\n", __FILE__, __LINE__, phase, #cond); \ 41 static void CheckEqual(
const char* expected,
const char* v,
size_t n) {
42 if (expected == NULL && v == NULL) {
44 }
else if (expected != NULL && v != NULL && n == strlen(expected) &&
45 memcmp(expected, v, n) == 0) {
49 fprintf(stderr,
"%s: expected '%s', got '%s'\n",
51 (expected ? expected :
"(null)"),
57 static void Free(
char** ptr) {
68 const char* expected) {
72 val =
leveldb_get(db, options, key, strlen(key), &val_len, &err);
79 const char* key,
const char* val) {
90 const char* k,
size_t klen,
91 const char* v,
size_t vlen) {
92 int* state = (
int*) ptr;
108 static void CheckDel(
void* ptr,
const char* k,
size_t klen) {
109 int* state = (
int*) ptr;
118 const char* b,
size_t blen) {
119 int n = (alen < blen) ? alen : blen;
120 int r = memcmp(a, b, n);
122 if (alen < blen) r = -1;
123 else if (alen > blen) r = +1;
140 const char*
const* key_array,
const size_t* key_length_array,
142 size_t* filter_length) {
144 char* result = malloc(4);
145 memcpy(result,
"fake", 4);
150 const char* key,
size_t length,
151 const char* filter,
size_t filter_length) {
157 int main(
int argc,
char** argv) {
172 "%s/leveldb_c_test-%d",
220 CheckGet(db, roptions,
"foo", NULL);
223 leveldb_put(db, woptions,
"foo", 3,
"hello", 5, &err);
225 CheckGet(db, roptions,
"foo",
"hello");
229 CheckGet(db, roptions,
"foo",
"hello");
233 CheckGet(db, roptions,
"foo",
"hello");
245 CheckGet(db, roptions,
"foo",
"hello");
246 CheckGet(db, roptions,
"bar", NULL);
283 const char* start[2] = {
"a",
"k00000000000000010000" };
284 size_t start_len[2] = { 1, 21 };
285 const char* limit[2] = {
"k00000000000000010000",
"z" };
286 size_t limit_len[2] = { 21, 1 };
288 for (i = 0; i < n; i++) {
289 snprintf(keybuf,
sizeof(keybuf),
"k%020d", i);
290 snprintf(valbuf,
sizeof(valbuf),
"v%020d", i);
291 leveldb_put(db, woptions, keybuf, strlen(keybuf), valbuf, strlen(valbuf),
316 CheckGet(db, roptions,
"foo",
"hello");
318 CheckGet(db, roptions,
"foo", NULL);
331 CheckGet(db, roptions,
"foo", NULL);
332 CheckGet(db, roptions,
"bar", NULL);
339 for (run = 0; run < 2; run++) {
356 leveldb_put(db, woptions,
"foo", 3,
"foovalue", 8, &err);
358 leveldb_put(db, woptions,
"bar", 3,
"barvalue", 8, &err);
363 CheckGet(db, roptions,
"foo",
"foovalue");
364 CheckGet(db, roptions,
"bar",
"barvalue");
368 CheckGet(db, roptions,
"foo", NULL);
369 CheckGet(db, roptions,
"bar", NULL);
372 CheckGet(db, roptions,
"foo",
"foovalue");
373 CheckGet(db, roptions,
"bar",
"barvalue");
388 fprintf(stderr,
"PASS\n");
void leveldb_writebatch_clear(leveldb_writebatch_t *b)
void leveldb_options_set_cache(leveldb_options_t *opt, leveldb_cache_t *c)
void leveldb_options_set_paranoid_checks(leveldb_options_t *opt, unsigned char v)
char * leveldb_get(leveldb_t *db, const leveldb_readoptions_t *options, const char *key, size_t keylen, size_t *vallen, char **errptr)
static void CheckIter(leveldb_iterator_t *iter, const char *key, const char *val)
void leveldb_cache_destroy(leveldb_cache_t *cache)
void leveldb_iter_seek_to_last(leveldb_iterator_t *iter)
static const char * CmpName(void *arg)
void leveldb_options_set_block_restart_interval(leveldb_options_t *opt, int n)
static void CheckPut(void *ptr, const char *k, size_t klen, const char *v, size_t vlen)
static const char * FilterName(void *arg)
int leveldb_minor_version()
void leveldb_release_snapshot(leveldb_t *db, const leveldb_snapshot_t *snapshot)
unsigned char FilterKeyMatch(void *arg, const char *key, size_t length, const char *filter, size_t filter_length)
const char * leveldb_iter_key(const leveldb_iterator_t *iter, size_t *klen)
void leveldb_iter_prev(leveldb_iterator_t *iter)
int leveldb_major_version()
void leveldb_options_set_create_if_missing(leveldb_options_t *opt, unsigned char v)
void leveldb_destroy_db(const leveldb_options_t *options, const char *name, char **errptr)
void leveldb_options_set_filter_policy(leveldb_options_t *opt, leveldb_filterpolicy_t *policy)
leveldb_writebatch_t * leveldb_writebatch_create()
static char * FilterCreate(void *arg, const char *const *key_array, const size_t *key_length_array, int num_keys, size_t *filter_length)
void leveldb_iter_next(leveldb_iterator_t *iter)
leveldb_comparator_t * leveldb_comparator_create(void *state, void(*destructor)(void *), int(*compare)(void *, const char *a, size_t alen, const char *b, size_t blen), const char *(*name)(void *))
void leveldb_put(leveldb_t *db, const leveldb_writeoptions_t *options, const char *key, size_t keylen, const char *val, size_t vallen, char **errptr)
leveldb_readoptions_t * leveldb_readoptions_create()
static void CheckEqual(const char *expected, const char *v, size_t n)
static void FilterDestroy(void *arg)
void leveldb_write(leveldb_t *db, const leveldb_writeoptions_t *options, leveldb_writebatch_t *batch, char **errptr)
void leveldb_iter_get_error(const leveldb_iterator_t *iter, char **errptr)
void leveldb_options_destroy(leveldb_options_t *options)
void leveldb_writebatch_destroy(leveldb_writebatch_t *b)
static int CmpCompare(void *arg, const char *a, size_t alen, const char *b, size_t blen)
const leveldb_snapshot_t * leveldb_create_snapshot(leveldb_t *db)
void leveldb_writebatch_delete(leveldb_writebatch_t *b, const char *key, size_t klen)
char * leveldb_property_value(leveldb_t *db, const char *propname)
static void CheckDel(void *ptr, const char *k, size_t klen)
void leveldb_iter_destroy(leveldb_iterator_t *iter)
void leveldb_iter_seek_to_first(leveldb_iterator_t *iter)
void leveldb_free(void *ptr)
leveldb_writeoptions_t * leveldb_writeoptions_create()
leveldb_env_t * leveldb_create_default_env()
void leveldb_writebatch_put(leveldb_writebatch_t *b, const char *key, size_t klen, const char *val, size_t vlen)
unsigned char leveldb_iter_valid(const leveldb_iterator_t *iter)
void leveldb_options_set_comparator(leveldb_options_t *opt, leveldb_comparator_t *cmp)
void leveldb_options_set_max_open_files(leveldb_options_t *opt, int n)
static void Free(char **ptr)
const char * leveldb_iter_value(const leveldb_iterator_t *iter, size_t *vlen)
void leveldb_compact_range(leveldb_t *db, const char *start_key, size_t start_key_len, const char *limit_key, size_t limit_key_len)
void leveldb_options_set_error_if_exists(leveldb_options_t *opt, unsigned char v)
#define CheckCondition(cond)
void leveldb_close(leveldb_t *db)
void leveldb_options_set_info_log(leveldb_options_t *opt, leveldb_logger_t *l)
leveldb_filterpolicy_t * leveldb_filterpolicy_create(void *state, void(*destructor)(void *), char *(*create_filter)(void *, const char *const *key_array, const size_t *key_length_array, int num_keys, size_t *filter_length), unsigned char(*key_may_match)(void *, const char *key, size_t length, const char *filter, size_t filter_length), const char *(*name)(void *))
void leveldb_readoptions_set_snapshot(leveldb_readoptions_t *opt, const leveldb_snapshot_t *snap)
void leveldb_options_set_compression(leveldb_options_t *opt, int t)
void leveldb_filterpolicy_destroy(leveldb_filterpolicy_t *filter)
static void StartPhase(const char *name)
#define CheckNoError(err)
static void CheckGet(leveldb_t *db, const leveldb_readoptions_t *options, const char *key, const char *expected)
void leveldb_delete(leveldb_t *db, const leveldb_writeoptions_t *options, const char *key, size_t keylen, char **errptr)
leveldb_filterpolicy_t * leveldb_filterpolicy_create_bloom(int bits_per_key)
leveldb_options_t * leveldb_options_create()
void leveldb_iter_seek(leveldb_iterator_t *iter, const char *k, size_t klen)
void leveldb_env_destroy(leveldb_env_t *env)
void leveldb_readoptions_destroy(leveldb_readoptions_t *opt)
void leveldb_readoptions_set_verify_checksums(leveldb_readoptions_t *opt, unsigned char v)
static const char * GetTempDir(void)
void leveldb_approximate_sizes(leveldb_t *db, int num_ranges, const char *const *range_start_key, const size_t *range_start_key_len, const char *const *range_limit_key, const size_t *range_limit_key_len, uint64_t *sizes)
static unsigned char fake_filter_result
void leveldb_comparator_destroy(leveldb_comparator_t *cmp)
void leveldb_writeoptions_destroy(leveldb_writeoptions_t *opt)
void leveldb_options_set_env(leveldb_options_t *opt, leveldb_env_t *env)
void leveldb_readoptions_set_fill_cache(leveldb_readoptions_t *opt, unsigned char v)
void leveldb_options_set_write_buffer_size(leveldb_options_t *opt, size_t s)
leveldb_iterator_t * leveldb_create_iterator(leveldb_t *db, const leveldb_readoptions_t *options)
leveldb_cache_t * leveldb_cache_create_lru(size_t capacity)
void leveldb_writeoptions_set_sync(leveldb_writeoptions_t *opt, unsigned char v)
leveldb_t * leveldb_open(const leveldb_options_t *options, const char *name, char **errptr)
static void CmpDestroy(void *arg)
void leveldb_repair_db(const leveldb_options_t *options, const char *name, char **errptr)
void leveldb_options_set_block_size(leveldb_options_t *opt, size_t s)
void leveldb_writebatch_iterate(leveldb_writebatch_t *b, void *state, void(*put)(void *, const char *k, size_t klen, const char *v, size_t vlen), void(*deleted)(void *, const char *k, size_t klen))
int main(int argc, char **argv)