Sample test application.
*/
#include <assert.h>
-#include <memcached.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include "server.h"
-#include "../lib/common.h"
-#include "../src/generator.h"
-#include "../src/execute.h"
+#include "../libmemcached/common.h"
+#include "../clients/generator.h"
+#include "../clients/execute.h"
#ifndef INT64_MAX
#define INT64_MAX LONG_MAX
static char *global_keys[GLOBAL_COUNT];
static size_t global_keys_length[GLOBAL_COUNT];
-uint8_t cleanup_pairs(memcached_st *memc)
+static test_return cleanup_pairs(memcached_st *memc __attribute__((unused)))
{
pairs_free(global_pairs);
return 0;
}
-uint8_t generate_pairs(memcached_st *memc)
+static test_return generate_pairs(memcached_st *memc __attribute__((unused)))
{
unsigned long long x;
global_pairs= pairs_generate(GLOBAL_COUNT, 400);
return 0;
}
-uint8_t drizzle(memcached_st *memc)
+static test_return drizzle(memcached_st *memc)
{
unsigned int x;
memcached_return rc;
return 0;
}
-memcached_return pre_nonblock(memcached_st *memc)
+static memcached_return pre_nonblock(memcached_st *memc)
{
- memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, NULL);
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, 0);
return MEMCACHED_SUCCESS;
}
-memcached_return pre_md5(memcached_st *memc)
+static memcached_return pre_md5(memcached_st *memc)
{
- memcached_hash value= MEMCACHED_HASH_MD5;
- memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, &value);
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_MD5);
return MEMCACHED_SUCCESS;
}
-memcached_return pre_hsieh(memcached_st *memc)
+static memcached_return pre_hsieh(memcached_st *memc)
{
- memcached_hash value= MEMCACHED_HASH_HSIEH;
- memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, &value);
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_HSIEH);
return MEMCACHED_SUCCESS;
}
-memcached_return enable_consistent(memcached_st *memc)
+static memcached_return enable_consistent(memcached_st *memc)
{
memcached_server_distribution value= MEMCACHED_DISTRIBUTION_CONSISTENT;
memcached_hash hash;
- memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_DISTRIBUTION, &value);
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_DISTRIBUTION, value);
pre_hsieh(memc);
value= (memcached_server_distribution)memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_DISTRIBUTION);
return MEMCACHED_SUCCESS;
}
+/*
+ Set the value, then quit to make sure it is flushed.
+ Come back in and test that add fails.
+*/
+static test_return add_test(memcached_st *memc)
+{
+ memcached_return rc;
+ char *key= "foo";
+ char *value= "when we sanitize";
+ unsigned long long setting_value;
+
+ setting_value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_NO_BLOCK);
+
+ rc= memcached_set(memc, key, strlen(key),
+ value, strlen(value),
+ (time_t)0, (uint32_t)0);
+ assert(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED);
+ memcached_quit(memc);
+ rc= memcached_add(memc, key, strlen(key),
+ value, strlen(value),
+ (time_t)0, (uint32_t)0);
+
+ /* Too many broken OS'es have broken loopback in async, so we can't be sure of the result */
+ if (setting_value)
+ assert(rc == MEMCACHED_NOTSTORED || MEMCACHED_STORED);
+ else
+ assert(rc == MEMCACHED_NOTSTORED);
+
+ return 0;
+}
+
+/*
+ * repeating add_tests many times
+ * may show a problem in timing
+ */
+static test_return many_adds(memcached_st *memc)
+{
+ unsigned int i;
+ for (i = 0; i < TEST_COUNTER; i++)
+ {
+ add_test(memc);
+ }
+ return 0;
+}
+
test_st smash_tests[] ={
{"generate_pairs", 1, generate_pairs },
{"drizzle", 1, drizzle },
{"cleanup", 1, cleanup_pairs },
+ {"many_adds", 1, many_adds },
{0, 0, 0}
};
#define SERVERS_TO_CREATE 5
-void *world_create(void)
+static void *world_create(void)
{
server_startup_st *construct;
return construct;
}
-void world_destroy(void *p)
+static void world_destroy(void *p)
{
server_startup_st *construct= (server_startup_st *)p;
memcached_server_st *servers= (memcached_server_st *)construct->servers;