Beispiel #1
0
END_TEST

START_TEST(test_zookeeper)
{
	assert_ret(init_event(4096), 0);
#ifdef BUILD_ZOOKEEPER
	zoo_set_debug_level(0);
#endif
	do_test("zookeeper:localhost:2181,timeout=1000");
}
Beispiel #2
0
		// perform sql statement
		db_query_basic::list_rec_set_t db_query_basic::perform(std::string query)
		{
			if (query.empty())
				return list_rec_set_t();
			// replace "%table_name%" to table_name
			//query = std::regex_replace(query, std::regex("\\%table_name%"), _table);
			int ret = mysql_real_query(_db.conn(), query.c_str(), static_cast<unsigned long>(query.length()));
			assert_ret(ret);

			list_rec_set_t list_rec_set;
			int status = 0;
			do
			{
				size_t num_col = mysql_field_count(_db.conn());
				MYSQL_RES* res = mysql_store_result(_db.conn());
				size_t affected = static_cast<size_t>(mysql_affected_rows(_db.conn()));
				if (res == nullptr)
				{
					// raise exception if result is supposed to be returned
					if (num_col > 0)
						throw ex_db_mariadb(_db.conn());
					db_record_meta::list_column_t list_col_empty;
					db_record_meta meta_empty(list_col_empty);
					db_record_set rec_set_empty(meta_empty);
					rec_set_empty._affected = affected;
					list_rec_set.push_back(rec_set_empty);
				}
				else // when MYSQL_RES* available
				{
					MYSQL_FIELD* p_col = mysql_fetch_fields(res);
					db_record_set rec_set(db_record_meta(p_col, num_col));
					for (size_t idx_row = 0; idx_row < res->row_count; idx_row++)
					{
						assert_res(res);
						const MYSQL_ROW row = mysql_fetch_row(res);
						assert_row(row);
						record_t rec_d = rec_set.record_new();
						for (size_t idx_col = 0; idx_col < num_col; idx_col++)
							rec_d[idx_col] = (row[idx_col] == nullptr ? "" : row[idx_col]);
						rec_set.list_record().push_back(rec_d);
					}
					rec_set._affected = res->row_count;
					list_rec_set.push_back(rec_set);
					mysql_free_result(res);
				}
				// check whether there are more result sets:
				//   status > 0   error occurred;
				//   status = 0   more result sets returned;
				//   status < 0   no next result set;
				if ((status = mysql_next_result(_db.conn())) > 0)
					throw ex_db_mariadb(_db.conn());
			} while (status == 0);

			return list_rec_set;
		}
static void test_check_numbers_up (sd_journal *j, int count) {
        for (int i = count; i >= 1; i--) {
                int r;
                test_check_number(j, i);
                assert_ret(r = sd_journal_previous(j));
                if (i == 1)
                        assert_se(r == 0);
                else
                        assert_se(r == 1);
        }

}
static void test_check_numbers_down (sd_journal *j, int count)
{
    for (int i = 1; i <= count; i++) {
        int r;
        test_check_number(j, i);
        assert_ret(r = sd_journal_next(j));
        if (i == count)
            assert_se(r == 0);
        else
            assert_se(r == 1);
    }

}
static void test_check_number (sd_journal *j, int n) {
        const void *d;
        _cleanup_free_ char *k;
        size_t l;
        int x;

        assert_ret(sd_journal_get_data(j, "NUMBER", &d, &l));
        assert_se(k = strndup(d, l));
        printf("%s\n", k);

        assert_se(safe_atoi(k + 7, &x) >= 0);
        assert_se(n == x);
}
static void append_number(JournalFile *f, int n, uint64_t *seqnum) {
        char *p;
        dual_timestamp ts;
        struct iovec iovec[1];

        dual_timestamp_get(&ts);

        assert_se(asprintf(&p, "NUMBER=%d", n) >= 0);
        iovec[0].iov_base = p;
        iovec[0].iov_len = strlen(p);
        assert_ret(journal_file_append_entry(f, &ts, iovec, 1, seqnum, NULL, NULL));
        free(p);
}
static void append_number(JournalFile *f, int n, uint64_t *seqnum) {
        char *p;
        dual_timestamp ts;
        static dual_timestamp previous_ts = {};
        struct iovec iovec[1];

        dual_timestamp_get(&ts);

        if (ts.monotonic <= previous_ts.monotonic)
                ts.monotonic = previous_ts.monotonic + 1;

        if (ts.realtime <= previous_ts.realtime)
                ts.realtime = previous_ts.realtime + 1;

        previous_ts = ts;

        assert_se(asprintf(&p, "NUMBER=%d", n) >= 0);
        iovec[0].iov_base = p;
        iovec[0].iov_len = strlen(p);
        assert_ret(journal_file_append_entry(f, &ts, iovec, 1, seqnum, NULL, NULL));
        free(p);
}
Beispiel #8
0
static void do_test(const char *arg)
{
	struct cluster_driver *driver;
	struct sd_node node;
	const char *option;
	size_t len = 4;
	void *msg;

	driver = find_cdrv(arg);
	if (!driver)
		return;

	option = get_cdrv_option(driver, arg);
	msg = xmalloc(len);

	assert_ret(driver->init(option), 0);
	assert_ret(driver->join(&node, msg, len), 0);

	LOOP_WHEN(method_nr_call(sd_join_handler) == 0);
	LOOP_WHEN(method_nr_call(sd_accept_handler) == 0);
	ck_assert_int_eq(method_nr_call(sd_join_handler), 1);
	ck_assert_int_eq(method_nr_call(sd_accept_handler), 1);

	assert_ret(driver->block(), 0);
	assert_ret(driver->block(), 0);

	LOOP_WHEN(method_nr_call(sd_block_handler) == 0);
	ck_assert_int_eq(method_nr_call(sd_block_handler), 1);

	assert_ret(driver->unblock(msg, len), 0);
	LOOP_WHEN(method_nr_call(sd_block_handler) == 1);

	ck_assert_int_eq(method_nr_call(sd_block_handler), 2);
	ck_assert_int_eq(method_nr_call(sd_notify_handler), 1);

	assert_ret(driver->unblock(msg, len), 0);
	LOOP_WHEN(method_nr_call(sd_notify_handler) == 1);

	ck_assert_int_eq(method_nr_call(sd_notify_handler), 2);

	free(msg);
}
static JournalFile *test_open (const char *name)
{
    JournalFile *f;
    assert_ret(journal_file_open(name, O_RDWR|O_CREAT, 0644, true, false, NULL, NULL, NULL, &f));
    return f;
}
static void test_skip(void (*setup)(void))
{
    char t[] = "/tmp/journal-skip-XXXXXX";
    sd_journal *j;
    int r;

    assert_se(mkdtemp(t));
    assert_se(chdir(t) >= 0);

    setup();

    /* Seek to head, iterate down.
     */
    assert_ret(sd_journal_open_directory(&j, t, 0));
    assert_ret(sd_journal_seek_head(j));
    assert_ret(sd_journal_next(j));
    test_check_numbers_down(j, 4);
    sd_journal_close(j);

    /* Seek to tail, iterate up.
     */
    assert_ret(sd_journal_open_directory(&j, t, 0));
    assert_ret(sd_journal_seek_tail(j));
    assert_ret(sd_journal_previous(j));
    test_check_numbers_up(j, 4);
    sd_journal_close(j);

    /* Seek to tail, skip to head, iterate down.
     */
    assert_ret(sd_journal_open_directory(&j, t, 0));
    assert_ret(sd_journal_seek_tail(j));
    assert_ret(r = sd_journal_previous_skip(j, 4));
    assert_se(r == 4);
    test_check_numbers_down(j, 4);
    sd_journal_close(j);

    /* Seek to head, skip to tail, iterate up.
     */
    assert_ret(sd_journal_open_directory(&j, t, 0));
    assert_ret(sd_journal_seek_head(j));
    assert_ret(r = sd_journal_next_skip(j, 4));
    assert_se(r == 4);
    test_check_numbers_up(j, 4);
    sd_journal_close(j);

    log_info("Done...");

    if (arg_keep)
        log_info("Not removing %s", t);
    else {
        journal_directory_vacuum(".", 3000000, 0, 0, NULL);

        assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
    }

    puts("------------------------------------------------------------");
}