#include <fnmatch.h>
#include <stdint.h>
+#include "libmemcached/memcached.h"
#include "test.h"
static void world_stats_print(world_stats_st *stats)
fprintf(stderr, "\tSucceeded\t\t%u\n", stats->success);
}
-static long int timedif(struct timeval a, struct timeval b)
+long int timedif(struct timeval a, struct timeval b)
{
long us, s;
_runner_default
};
+static test_return_t _default_callback(void *p)
+{
+ (void)p;
+
+ return TEST_SUCCESS;
+}
+
+static inline void set_default_fn(test_callback_fn *fn)
+{
+ if (*fn == NULL)
+ {
+ *fn= _default_callback;
+ }
+}
+
+static collection_st *init_world(world_st *world)
+{
+ if (! world->runner)
+ {
+ world->runner= &defualt_runners;
+ }
+
+ set_default_fn(&world->collection.startup);
+ set_default_fn(&world->collection.shutdown);
+
+ return world->collections;
+}
+
int main(int argc, char *argv[])
{
world_stats_st stats;
+#ifdef LIBMEMCACHED_WITH_SASL_SUPPORT
+ if (sasl_client_init(NULL) != SASL_OK)
+ {
+ fprintf(stderr, "Failed to initialize sasl library!\n");
+ return 1;
+ }
+#endif
+
memset(&stats, 0, sizeof(stats));
memset(&world, 0, sizeof(world));
get_world(&world);
- if (! world.runner)
- {
- world.runner= &defualt_runners;
- }
-
- collection= world.collections;
+ collection= init_world(&world);
if (world.create)
{
stats.collection_total++;
- if (world.collection_startup)
+ collection_rc= world.collection.startup(world_ptr);
+
+ if (collection_rc != TEST_SUCCESS)
+ goto skip_pre;
+
+ if (next->pre)
{
- collection_rc= world.collection_startup(world_ptr);
+ collection_rc= world.runner->pre(next->pre, world_ptr);
}
+skip_pre:
switch (collection_rc)
{
case TEST_SUCCESS:
break;
case TEST_FAILURE:
fprintf(stderr, "\n%s [ failed ]\n\n", next->name);
- stats.failed++;
- continue;
+ stats.collection_failed++;
+ goto cleanup;
case TEST_SKIPPED:
fprintf(stderr, "\n%s [ skipping ]\n\n", next->name);
- stats.skipped++;
- continue;
+ stats.collection_skipped++;
+ goto cleanup;
case TEST_MEMORY_ALLOCATION_FAILURE:
case TEST_MAXIMUM_RETURN:
default:
break;
}
+
for (x= 0; run->name; run++)
{
struct timeval start_time, end_time;
// Runner code
{
+#if 0
if (next->pre && world.runner->pre)
{
return_code= world.runner->pre(next->pre, world_ptr);
goto error;
}
}
+#endif
gettimeofday(&start_time, NULL);
return_code= world.runner->run(run->test_fn, world_ptr);
gettimeofday(&end_time, NULL);
load_time= timedif(end_time, start_time);
+#if 0
if (next->post && world.runner->post)
{
(void) world.runner->post(next->post, world_ptr);
}
+#endif
}
if (world.test.post_run)
world.test.post_run(world_ptr);
}
-error:
stats.total++;
fprintf(stderr, "\t\t\t\t\t");
}
}
- if (failed)
- {
- stats.collection_failed++;
- }
-
- if (skipped)
+ if (next->post && world.runner->post)
{
- stats.collection_skipped++;
+ (void) world.runner->post(next->post, world_ptr);
}
if (! failed && ! skipped)
{
stats.collection_success++;
}
+cleanup:
- if (world.collection_shutdown)
- {
- world.collection_shutdown(world_ptr);
- }
+ world.collection.shutdown(world_ptr);
}
if (stats.collection_failed || stats.collection_skipped)
world_stats_print(&stats);
+#ifdef LIBMEMCACHED_WITH_SASL_SUPPORT
+ sasl_done();
+#endif
+
return stats.failed == 0 ? 0 : 1;
}