From d01cf06de423b934d028f8ae0a5d76376e333c4e Mon Sep 17 00:00:00 2001 From: Sebastian Harl Date: Sat, 17 Jan 2015 15:17:09 -0800 Subject: [PATCH] integration: Split off mock_timeseries from mock_plugin. --- t/Makefile.am | 6 ++ t/integration/mock_plugin.c | 38 ------------ t/integration/mock_timeseries.c | 107 ++++++++++++++++++++++++++++++++ t/integration/query.sh | 2 + t/integration/test_lib.sh | 1 + 5 files changed, 116 insertions(+), 38 deletions(-) create mode 100644 t/integration/mock_timeseries.c diff --git a/t/Makefile.am b/t/Makefile.am index fd997e9..cff0920 100644 --- a/t/Makefile.am +++ b/t/Makefile.am @@ -77,5 +77,11 @@ integration_mock_plugin_la_SOURCES = integration/mock_plugin.c integration_mock_plugin_la_LDFLAGS = $(AM_LDFLAGS) -module -avoid-version \ -rpath /nonexistent +check_LTLIBRARIES += integration/mock_timeseries.la +integration_mock_timeseries_la_SOURCES = integration/mock_timeseries.c +# -rpath is a work-around to enforce a shared library +integration_mock_timeseries_la_LDFLAGS = $(AM_LDFLAGS) -module -avoid-version \ + -rpath /nonexistent + test: check diff --git a/t/integration/mock_plugin.c b/t/integration/mock_plugin.c index 8041c0d..5a9718d 100644 --- a/t/integration/mock_plugin.c +++ b/t/integration/mock_plugin.c @@ -192,42 +192,6 @@ mock_collect(sdb_object_t *user_data) return 0; } /* mock_collect */ -static sdb_timeseries_t * -mock_fetch_ts(const char *id, sdb_timeseries_opts_t *opts, - sdb_object_t *user_data) -{ - sdb_timeseries_t *ts; - const char *names[] = { "nameA", "nameB" }; - size_t i, j; - - if (*id != '/') { - sdb_log(SDB_LOG_ERR, "mock::plugin: Invalid time-series %s", id); - exit(1); - } - - if (SDB_OBJ_WRAPPER(user_data)->data != MAGIC_DATA) { - sdb_log(SDB_LOG_ERR, "mock::plugin: Invalid user data %p " - "passed to collect", SDB_OBJ_WRAPPER(user_data)->data); - exit(1); - } - - ts = sdb_timeseries_create(SDB_STATIC_ARRAY_LEN(names), names, 10); - if (! ts) - return NULL; - - ts->start = opts->start; - ts->end = opts->end; - - for (i = 0; i < 10; ++i) { - for (j = 0; j < SDB_STATIC_ARRAY_LEN(names); ++j) { - ts->data[j][i].timestamp = ts->start - + i * (ts->end - ts->start) / 10; - ts->data[j][i].value = (double)(i + j); - } - } - return ts; -} /* mock_fetch_ts */ - static int mock_config(oconfig_item_t *ci) { @@ -256,8 +220,6 @@ mock_config(oconfig_item_t *ci) sdb_plugin_register_collector("main", mock_collect, /* interval = */ NULL, user_data); - sdb_plugin_register_ts_fetcher("mock", mock_fetch_ts, user_data); - sdb_object_deref(user_data); return 0; } /* mock_config */ diff --git a/t/integration/mock_timeseries.c b/t/integration/mock_timeseries.c new file mode 100644 index 0000000..b0b462f --- /dev/null +++ b/t/integration/mock_timeseries.c @@ -0,0 +1,107 @@ +/* + * SysDB - t/integration/mock_timeseries.c + * Copyright (C) 2015 Sebastian 'tokkee' Harl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if HAVE_CONFIG_H +# include "config.h" +#endif /* HAVE_CONFIG_H */ + +#include "sysdb.h" +#include "core/plugin.h" +#include "core/store.h" +#include "utils/error.h" + +#include +#include + +#define MAGIC_DATA (void *)0x4711 + +SDB_PLUGIN_MAGIC; + +/* + * plugin API + */ + +static sdb_timeseries_t * +mock_fetch_ts(const char *id, sdb_timeseries_opts_t *opts, + sdb_object_t *user_data) +{ + sdb_timeseries_t *ts; + const char *names[] = { "nameA", "nameB" }; + size_t i, j; + + if (*id != '/') { + sdb_log(SDB_LOG_ERR, "mock::timeseries: Invalid time-series %s", id); + exit(1); + } + + if (SDB_OBJ_WRAPPER(user_data)->data != MAGIC_DATA) { + sdb_log(SDB_LOG_ERR, "mock::timeseries: Invalid user data %p " + "passed to collect", SDB_OBJ_WRAPPER(user_data)->data); + exit(1); + } + + ts = sdb_timeseries_create(SDB_STATIC_ARRAY_LEN(names), names, 10); + if (! ts) + return NULL; + + ts->start = opts->start; + ts->end = opts->end; + + for (i = 0; i < 10; ++i) { + for (j = 0; j < SDB_STATIC_ARRAY_LEN(names); ++j) { + ts->data[j][i].timestamp = ts->start + + i * (ts->end - ts->start) / 10; + ts->data[j][i].value = (double)(i + j); + } + } + return ts; +} /* mock_fetch_ts */ + +int +sdb_module_init(sdb_plugin_info_t *info) +{ + sdb_object_t *user_data; + + sdb_plugin_set_info(info, SDB_PLUGIN_INFO_DESC, "a mock timeseries fetcher"); + sdb_plugin_set_info(info, SDB_PLUGIN_INFO_COPYRIGHT, + "Copyright (C) 2012 Sebastian 'tokkee' Harl "); + sdb_plugin_set_info(info, SDB_PLUGIN_INFO_LICENSE, "BSD"); + sdb_plugin_set_info(info, SDB_PLUGIN_INFO_VERSION, SDB_VERSION); + sdb_plugin_set_info(info, SDB_PLUGIN_INFO_PLUGIN_VERSION, SDB_VERSION); + + user_data = sdb_object_create_wrapper("mock_data", MAGIC_DATA, NULL); + if (! user_data) { + sdb_log(SDB_LOG_ERR, "mock::plugin: Failed to allocate user data"); + exit(1); + } + sdb_plugin_register_ts_fetcher("mock", mock_fetch_ts, user_data); + sdb_object_deref(user_data); + return 0; +} /* sdb_module_init */ + +/* vim: set tw=78 sw=4 ts=4 noexpandtab : */ + diff --git a/t/integration/query.sh b/t/integration/query.sh index b2e6ed8..c9490f6 100755 --- a/t/integration/query.sh +++ b/t/integration/query.sh @@ -38,6 +38,8 @@ Listen "$SOCKET_FILE" PluginDir "$PLUGIN_DIR" Interval 2 +LoadPlugin mock_timeseries + LoadBackend mock_plugin diff --git a/t/integration/test_lib.sh b/t/integration/test_lib.sh index 8206ddf..469198a 100644 --- a/t/integration/test_lib.sh +++ b/t/integration/test_lib.sh @@ -33,6 +33,7 @@ TESTDIR="$( mktemp -d )" trap "rm -rf '$TESTDIR'; test -z \$SYSDBD_PID || kill \$SYSDBD_PID" EXIT mkdir "$TESTDIR/backend" +cp "$TOP_SRCDIR/t/integration/.libs/mock_timeseries.so" "$TESTDIR" cp "$TOP_SRCDIR/t/integration/.libs/mock_plugin.so" "$TESTDIR/backend" cp "$TOP_SRCDIR"/src/sysdb "$TESTDIR" -- 2.30.2