"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "src/lib-dict-backend/test-dict-sql.c" between
dovecot-2.3.16.tar.gz and dovecot-2.3.17.tar.gz

About: Dovecot is an IMAP and POP3 server, written with security primarily in mind.

test-dict-sql.c  (dovecot-2.3.16):test-dict-sql.c  (dovecot-2.3.17)
skipping to change at line 12 skipping to change at line 12
#include "lib.h" #include "lib.h"
#include "test-lib.h" #include "test-lib.h"
#include "sql-api.h" #include "sql-api.h"
#include "dict.h" #include "dict.h"
#include "dict-private.h" #include "dict-private.h"
#include "dict-sql.h" #include "dict-sql.h"
#include "dict-sql-private.h" #include "dict-sql-private.h"
#include "driver-test.h" #include "driver-test.h"
struct dict_op_settings dict_op_settings = {
.username = "testuser",
};
static void test_setup(struct dict **dict_r) static void test_setup(struct dict **dict_r)
{ {
const char *error = NULL; const char *error = NULL;
struct dict_settings set = { struct dict_settings set = {
.username = "testuser",
.base_dir = "." .base_dir = "."
}; };
struct dict *dict = NULL; struct dict *dict = NULL;
if (dict_init("mysql:" DICT_SRC_DIR "/dict.conf", &set, &dict, &error) < 0) if (dict_init("mysql:" DICT_SRC_DIR "/dict.conf", &set, &dict, &error) < 0)
i_fatal("cannot initialize dict: %s", error); i_fatal("cannot initialize dict: %s", error);
*dict_r = dict; *dict_r = dict;
} }
skipping to change at line 59 skipping to change at line 62
.rows = 1, .rows = 1,
.cols = 1, .cols = 1,
.col_names = (const char *[]){"value", NULL}, .col_names = (const char *[]){"value", NULL},
.row_data = (const char **[]){(const char*[]){"one", NULL}}, .row_data = (const char **[]){(const char*[]){"one", NULL}},
}; };
struct test_driver_result res = { struct test_driver_result res = {
.nqueries = 1, .nqueries = 1,
.queries = (const char *[]){"SELECT value FROM table WHERE a = 'h ello' AND b = 'world'", NULL}, .queries = (const char *[]){"SELECT value FROM table WHERE a = 'h ello' AND b = 'world'", NULL},
.result = &rset, .result = &rset,
}; };
const struct dict_op_settings set = {
.username = "testuser",
};
struct dict *dict; struct dict *dict;
pool_t pool = pool_datastack_create(); pool_t pool = pool_datastack_create();
test_begin("dict lookup one"); test_begin("dict lookup one");
test_setup(&dict); test_setup(&dict);
test_set_expected(dict, &res); test_set_expected(dict, &res);
test_assert(dict_lookup(dict, pool, "shared/dictmap/hello/world", &value, &error) == 1); test_assert(dict_lookup(dict, &set, pool, "shared/dictmap/hello/world", & value, &error) == 1);
test_assert_strcmp(value, "one"); test_assert_strcmp(value, "one");
if (error != NULL) if (error != NULL)
i_error("dict_lookup failed: %s", error); i_error("dict_lookup failed: %s", error);
test_teardown(&dict); test_teardown(&dict);
test_end(); test_end();
} }
static void test_atomic_inc(void) static void test_atomic_inc(void)
{ {
const char *error; const char *error;
struct test_driver_result res = { struct test_driver_result res = {
.nqueries = 3, .nqueries = 3,
.queries = (const char *[]){ .queries = (const char *[]){
"UPDATE counters SET value=value+128 WHERE class = 'globa l' AND name = 'counter'", "UPDATE counters SET value=value+128 WHERE class = 'globa l' AND name = 'counter'",
"UPDATE quota SET bytes=bytes+128,count=count+1 WHERE use rname = 'testuser'", "UPDATE quota SET bytes=bytes+128,count=count+1 WHERE use rname = 'testuser'",
"UPDATE quota SET bytes=bytes+128,count=count+1,folders=f olders+123 WHERE username = 'testuser'", "UPDATE quota SET bytes=bytes+128,count=count+1,folders=f olders+123 WHERE username = 'testuser'",
NULL}, NULL},
.result = NULL, .result = NULL,
}; };
struct dict_op_settings set = {
.username = "testuser",
};
struct dict *dict; struct dict *dict;
test_begin("dict atomic inc"); test_begin("dict atomic inc");
test_setup(&dict); test_setup(&dict);
test_set_expected(dict, &res); test_set_expected(dict, &res);
/* 1 field */ /* 1 field */
struct dict_transaction_context *ctx = dict_transaction_begin(dict); struct dict_transaction_context *ctx = dict_transaction_begin(dict, &set) ;
dict_atomic_inc(ctx, "shared/counters/global/counter", 128); dict_atomic_inc(ctx, "shared/counters/global/counter", 128);
test_assert(dict_transaction_commit(&ctx, &error) == 0); test_assert(dict_transaction_commit(&ctx, &error) == 0);
if (error != NULL) if (error != NULL)
i_error("dict_transaction_commit failed: %s", error); i_error("dict_transaction_commit failed: %s", error);
error = NULL; error = NULL;
/* 2 fields */ /* 2 fields */
ctx = dict_transaction_begin(dict); ctx = dict_transaction_begin(dict, &set);
dict_atomic_inc(ctx, "priv/quota/bytes", 128); dict_atomic_inc(ctx, "priv/quota/bytes", 128);
dict_atomic_inc(ctx, "priv/quota/count", 1); dict_atomic_inc(ctx, "priv/quota/count", 1);
test_assert(dict_transaction_commit(&ctx, &error) == 0); test_assert(dict_transaction_commit(&ctx, &error) == 0);
if (error != NULL) if (error != NULL)
i_error("dict_transaction_commit failed: %s", error); i_error("dict_transaction_commit failed: %s", error);
error = NULL; error = NULL;
/* 3 fields */ /* 3 fields */
ctx = dict_transaction_begin(dict); ctx = dict_transaction_begin(dict, &set);
dict_atomic_inc(ctx, "priv/quota/bytes", 128); dict_atomic_inc(ctx, "priv/quota/bytes", 128);
dict_atomic_inc(ctx, "priv/quota/count", 1); dict_atomic_inc(ctx, "priv/quota/count", 1);
dict_atomic_inc(ctx, "priv/quota/folders", 123); dict_atomic_inc(ctx, "priv/quota/folders", 123);
test_assert(dict_transaction_commit(&ctx, &error) == 0); test_assert(dict_transaction_commit(&ctx, &error) == 0);
if (error != NULL) if (error != NULL)
i_error("dict_transaction_commit failed: %s", error); i_error("dict_transaction_commit failed: %s", error);
test_teardown(&dict); test_teardown(&dict);
test_end(); test_end();
} }
skipping to change at line 144 skipping to change at line 153
.result = NULL, .result = NULL,
}; };
struct dict *dict; struct dict *dict;
test_begin("dict set"); test_begin("dict set");
test_setup(&dict); test_setup(&dict);
test_set_expected(dict, &res); test_set_expected(dict, &res);
/* 1 field */ /* 1 field */
struct dict_transaction_context *ctx = dict_transaction_begin(dict); struct dict_transaction_context *ctx = dict_transaction_begin(dict, &dict _op_settings);
dict_set(ctx, "shared/counters/global/counter", "128"); dict_set(ctx, "shared/counters/global/counter", "128");
test_assert(dict_transaction_commit(&ctx, &error) == 1); test_assert(dict_transaction_commit(&ctx, &error) == 1);
if (error != NULL) if (error != NULL)
i_error("dict_transaction_commit failed: %s", error); i_error("dict_transaction_commit failed: %s", error);
error = NULL; error = NULL;
/* 2 fields */ /* 2 fields */
ctx = dict_transaction_begin(dict); ctx = dict_transaction_begin(dict, &dict_op_settings);
dict_set(ctx, "priv/quota/bytes", "128"); dict_set(ctx, "priv/quota/bytes", "128");
dict_set(ctx, "priv/quota/count", "1"); dict_set(ctx, "priv/quota/count", "1");
test_assert(dict_transaction_commit(&ctx, &error) == 1); test_assert(dict_transaction_commit(&ctx, &error) == 1);
if (error != NULL) if (error != NULL)
i_error("dict_transaction_commit failed: %s", error); i_error("dict_transaction_commit failed: %s", error);
error = NULL; error = NULL;
/* 3 fields */ /* 3 fields */
ctx = dict_transaction_begin(dict); ctx = dict_transaction_begin(dict, &dict_op_settings);
dict_set(ctx, "priv/quota/bytes", "128"); dict_set(ctx, "priv/quota/bytes", "128");
dict_set(ctx, "priv/quota/count", "1"); dict_set(ctx, "priv/quota/count", "1");
dict_set(ctx, "priv/quota/folders", "123"); dict_set(ctx, "priv/quota/folders", "123");
test_assert(dict_transaction_commit(&ctx, &error) == 1); test_assert(dict_transaction_commit(&ctx, &error) == 1);
if (error != NULL) if (error != NULL)
i_error("dict_transaction_commit failed: %s", error); i_error("dict_transaction_commit failed: %s", error);
test_teardown(&dict); test_teardown(&dict);
test_end(); test_end();
} }
skipping to change at line 192 skipping to change at line 201
NULL}, NULL},
.result = NULL, .result = NULL,
}; };
struct dict *dict; struct dict *dict;
test_begin("dict unset"); test_begin("dict unset");
test_setup(&dict); test_setup(&dict);
test_set_expected(dict, &res); test_set_expected(dict, &res);
struct dict_transaction_context *ctx = dict_transaction_begin(dict); struct dict_transaction_context *ctx = dict_transaction_begin(dict, &dict _op_settings);
dict_unset(ctx, "shared/counters/global/counter"); dict_unset(ctx, "shared/counters/global/counter");
test_assert(dict_transaction_commit(&ctx, &error) == 1); test_assert(dict_transaction_commit(&ctx, &error) == 1);
if (error != NULL) if (error != NULL)
i_error("dict_transaction_commit failed: %s", error); i_error("dict_transaction_commit failed: %s", error);
error = NULL; error = NULL;
ctx = dict_transaction_begin(dict); ctx = dict_transaction_begin(dict, &dict_op_settings);
dict_unset(ctx, "priv/quota/bytes"); dict_unset(ctx, "priv/quota/bytes");
dict_unset(ctx, "priv/quota/count"); dict_unset(ctx, "priv/quota/count");
test_assert(dict_transaction_commit(&ctx, &error) == 1); test_assert(dict_transaction_commit(&ctx, &error) == 1);
if (error != NULL) if (error != NULL)
i_error("dict_transaction_commit failed: %s", error); i_error("dict_transaction_commit failed: %s", error);
test_teardown(&dict); test_teardown(&dict);
test_end(); test_end();
} }
static void test_iterate(void) static void test_iterate(void)
skipping to change at line 238 skipping to change at line 247
.result = &rset, .result = &rset,
}; };
struct dict *dict; struct dict *dict;
test_begin("dict iterate"); test_begin("dict iterate");
test_setup(&dict); test_setup(&dict);
test_set_expected(dict, &res); test_set_expected(dict, &res);
struct dict_iterate_context *iter = struct dict_iterate_context *iter =
dict_iterate_init(dict, "shared/counters/global/counter", dict_iterate_init(dict, &dict_op_settings, "shared/counters/globa l/counter",
DICT_ITERATE_FLAG_EXACT_KEY); DICT_ITERATE_FLAG_EXACT_KEY);
size_t idx = 0; size_t idx = 0;
while(dict_iterate(iter, &key, &value)) { while(dict_iterate(iter, &key, &value)) {
i_assert(idx < rset.rows); i_assert(idx < rset.rows);
test_assert_strcmp_idx(key, "shared/counters/global/counter", idx ); test_assert_strcmp_idx(key, "shared/counters/global/counter", idx );
test_assert_strcmp_idx(value, rset.row_data[idx][0], idx); test_assert_strcmp_idx(value, rset.row_data[idx][0], idx);
idx++; idx++;
} }
skipping to change at line 265 skipping to change at line 274
res.queries = (const char*[]){ res.queries = (const char*[]){
"SELECT value,name FROM counters WHERE class = 'global' AND name LIKE '%' AND name NOT LIKE '%/%'", "SELECT value,name FROM counters WHERE class = 'global' AND name LIKE '%' AND name NOT LIKE '%/%'",
NULL NULL
}; };
res.cur = 0; res.cur = 0;
res.result->cur = 0; res.result->cur = 0;
test_set_expected(dict, &res); test_set_expected(dict, &res);
iter = dict_iterate_init(dict, "shared/counters/global/", 0); iter = dict_iterate_init(dict, &dict_op_settings, "shared/counters/global /", 0);
idx = 0; idx = 0;
while(dict_iterate(iter, &key, &value)) { while(dict_iterate(iter, &key, &value)) {
i_assert(idx < rset.rows); i_assert(idx < rset.rows);
test_assert_strcmp_idx(key, "shared/counters/global/counter", idx ); test_assert_strcmp_idx(key, "shared/counters/global/counter", idx );
test_assert_strcmp_idx(value, rset.row_data[idx][0], idx); test_assert_strcmp_idx(value, rset.row_data[idx][0], idx);
idx++; idx++;
} }
 End of changes. 15 change blocks. 
12 lines changed or deleted 21 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)