Skip to content

Commit

Permalink
Added basic dispatcher test.
Browse files Browse the repository at this point in the history
Change-Id: Ia2b327c1d0a7bd102eeb9333905f38539fd2c472
Reviewed-on: http://review.northscale.com:8080/158
Reviewed-by: Dustin Sallings <dustin@spy.net>
Tested-by: Dustin Sallings <dustin@spy.net>
  • Loading branch information
dustin committed May 25, 2010
1 parent 97e242e commit 146dcf8
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 1 deletion.
6 changes: 5 additions & 1 deletion Makefile.am
Expand Up @@ -33,7 +33,7 @@ ep_la_DEPENDENCIES = libsqlite3.la
libsqlite3_la_SOURCES = embedded/sqlite3.h embedded/sqlite3.c
libsqlite3_la_CFLAGS = $(AM_CFLAGS) ${NO_WERROR}

check_PROGRAMS=atomic_test atomic_ptr_test atomic_queue_test hash_table_test priority_test vbucket_test
check_PROGRAMS=atomic_test atomic_ptr_test atomic_queue_test hash_table_test priority_test vbucket_test dispatcher_test
TESTS=${check_PROGRAMS}

ep_testsuite_la_SOURCES= ep_testsuite.c
Expand All @@ -51,6 +51,10 @@ atomic_queue_test_CXXFLAGS = $(AM_CXXFLAGS) -I$(top_srcdir) ${NO_WERROR}
atomic_queue_test_SOURCES = t/atomic_queue_test.cc atomic.hh
atomic_queue_test_DEPENDENCIES = atomic.hh

dispatcher_test_CXXFLAGS = $(AM_CXXFLAGS) -I$(top_srcdir) ${NO_WERROR}
dispatcher_test_SOURCES = t/dispatcher_test.cc dispatcher.cc dispatcher.hh
dispatcher_test_DEPENDENCIES = dispatcher.hh dispatcher.cc

hash_table_test_CXXFLAGS = $(AM_CXXFLAGS) -I$(top_srcdir) ${NO_WERROR}
hash_table_test_SOURCES = t/hash_table_test.cc item.cc
hash_table_test_DEPENDENCIES = ep.hh item.hh
Expand Down
75 changes: 75 additions & 0 deletions t/dispatcher_test.cc
@@ -0,0 +1,75 @@
#include <cassert>

#include "dispatcher.hh"
#include "atomic.hh"
#include "locks.hh"

Dispatcher dispatcher;
static Atomic<int> callbacks;

class Thing;

class TestCallback : public DispatcherCallback {
public:
TestCallback(Thing *t) : thing(t) {
}

bool callback(Dispatcher &d, TaskId t);

private:
Thing *thing;
};

class Thing {
public:
void start(void) {
LockHolder lh(m);
TaskId t = dispatcher.schedule(shared_ptr<TestCallback>(new TestCallback(this)));
sleep(1); // simulate an artificial delay allowing another thread in
tid = t;
}

bool doSomething(Dispatcher &d, TaskId &t) {
LockHolder lh(m);
assert(t == tid);
assert(&d == &dispatcher);
++callbacks;
return true;
}
private:
TaskId tid;
Mutex m;
};

bool TestCallback::callback(Dispatcher &d, TaskId t) {
return thing->doSomething(d, t);
}

static const char* test_get_logger_name(void) {
return "dispatcher_test";
}

static void test_get_logger_log(EXTENSION_LOG_LEVEL severity,
const void* client_cookie,
const char *fmt, ...) {
(void)severity;
(void)client_cookie;
(void)fmt;
// ignore
}

EXTENSION_LOGGER_DESCRIPTOR* getLogger() {
static EXTENSION_LOGGER_DESCRIPTOR logger;
logger.get_name = test_get_logger_name;
logger.log = test_get_logger_log;
return &logger;
}

int main(int argc, char **argv) {
(void)argc; (void)argv;
dispatcher.start();
Thing t;
t.start();
dispatcher.stop();
assert(callbacks == 1);
}

0 comments on commit 146dcf8

Please sign in to comment.