Sample test application.
*/
#include <assert.h>
-#include <memcached.h>
+#include <libmemcached/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
return 0;
}
+uint8_t server_sort_test(memcached_st *ptr)
+{
+ unsigned int setting;
+ memcached_server_st *server_list;
+ memcached_return rc;
+
+ setting= 1;
+ memcached_behavior_set(ptr, MEMCACHED_BEHAVIOR_SORT_HOSTS, &setting);
+
+ server_list= memcached_server_list_append(NULL, "arg", 0, &rc);
+ assert(server_list);
+
+ server_list= memcached_server_list_append(server_list, "localhost", 0, &rc);
+ assert(server_list);
+
+ server_list= memcached_server_list_append(server_list, "c", 0, &rc);
+ assert(server_list);
+
+ server_list= memcached_server_list_append(server_list, "abba", 0, &rc);
+ assert(server_list);
+
+ free(server_list);
+
+ return 0;
+}
+
uint8_t allocation_test(memcached_st *not_used)
{
memcached_st *memc;
assert(strlen("we the people") == value_length);
assert(rc == MEMCACHED_SUCCESS);
+ rc= memcached_cas(memc, key, key_length,
+ "change the value", strlen("change the value"),
+ 0, 0, memcached_result_cas(results));
+
+ assert(rc == MEMCACHED_SUCCESS);
+
+ rc= memcached_cas(memc, key, key_length,
+ "change the value", strlen("change the value"),
+ 0, 0, 23);
+
+ assert(rc == MEMCACHED_DATA_EXISTS);
+
+
memcached_result_free(&results_obj);
return 0;
return 0;
}
+memcached_return server_function(memcached_st *ptr, memcached_server_st *server, void *context)
+{
+ /* Do Nothing */
+
+ return MEMCACHED_SUCCESS;
+}
+
+uint8_t memcached_server_cursor_test(memcached_st *memc)
+{
+ char *context= "foo bad";
+ memcached_server_function callbacks[1];
+
+ callbacks[0]= server_function;
+ memcached_server_cursor(memc, callbacks, context, 1);
+
+ return 0;
+}
+
+uint8_t bad_key_test(memcached_st *memc)
+{
+ memcached_return rc;
+ char *key= "foo bad";
+ char *string;
+ size_t string_length;
+ uint32_t flags;
+ memcached_st *clone;
+ unsigned int set= 1;
+
+ clone= memcached_clone(NULL, memc);
+ assert(clone);
+
+ (void)memcached_behavior_set(clone, MEMCACHED_BEHAVIOR_VERIFY_KEY, &set);
+
+ string= memcached_get(clone, key, strlen(key),
+ &string_length, &flags, &rc);
+ assert(rc == MEMCACHED_BAD_KEY_PROVIDED);
+ assert(string_length == 0);
+ assert(!string);
+
+ set= 0;
+ (void)memcached_behavior_set(clone, MEMCACHED_BEHAVIOR_VERIFY_KEY, &set);
+ string= memcached_get(clone, key, strlen(key),
+ &string_length, &flags, &rc);
+ assert(rc == MEMCACHED_NOTFOUND);
+ assert(string_length == 0);
+ assert(!string);
+
+ memcached_free(clone);
+
+ return 0;
+}
+
uint8_t get_test(memcached_st *memc)
{
memcached_return rc;
size_t key_length[]= {5, 3, 4};
unsigned int x;
unsigned int counter;
- unsigned int (*callbacks[1])(memcached_st *, memcached_result_st *, void *);
+ memcached_execute_function callbacks[1];
/* We need to empty the server before continueing test */
rc= memcached_flush(memc, 0);
for (x= 0; x < value_length; x++)
value[x] = (char) (x % 127);
- for (current_length= 1; current_length < value_length; current_length++)
+ for (current_length= 0; current_length < value_length; current_length++)
{
rc= memcached_set(memc, key, strlen(key),
value, current_length,
return 0;
}
+/*
+ Look for zero length value problems
+ */
+uint8_t user_supplied_bug15(memcached_st *memc)
+{
+ uint32_t x;
+ memcached_return rc;
+ char *key= "mykey";
+ char *value;
+ size_t length;
+ uint32_t flags;
+
+ for (x= 0; x < 2; x++)
+ {
+ rc= memcached_set(memc, key, strlen(key),
+ NULL, 0,
+ (time_t)0, (uint32_t)0);
+
+ assert(rc == MEMCACHED_SUCCESS);
+
+ value= memcached_get(memc, key, strlen(key),
+ &length, &flags, &rc);
+
+ assert(rc == MEMCACHED_SUCCESS);
+ assert(value == NULL);
+ assert(length == 0);
+ assert(flags == 0);
+
+ value= memcached_get(memc, key, strlen(key),
+ &length, &flags, &rc);
+
+ assert(rc == MEMCACHED_SUCCESS);
+ assert(value == NULL);
+ assert(length == 0);
+ assert(flags == 0);
+ }
+
+ return 0;
+}
+
uint8_t result_static(memcached_st *memc)
{
memcached_result_st result;
return MEMCACHED_SUCCESS;
}
+memcached_return pre_murmur(memcached_st *memc)
+{
+ memcached_hash value= MEMCACHED_HASH_MURMUR;
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, &value);
+
+ return MEMCACHED_SUCCESS;
+}
+
memcached_return pre_md5(memcached_st *memc)
{
memcached_hash value= MEMCACHED_HASH_MD5;
{"init", 0, init_test },
{"allocation", 0, allocation_test },
{"server_list_null_test", 0, server_list_null_test},
+ {"server_sort", 0, server_sort_test},
{"clone_test", 0, clone_test },
{"error", 0, error_test },
{"set", 0, set_test },
{"behavior_test", 0, get_stats_keys },
{"callback_test", 0, get_stats_keys },
{"version_string_test", 0, version_string_test},
+ {"bad_key", 1, bad_key_test },
+ {"memcached_server_cursor", 1, memcached_server_cursor_test },
{0, 0, 0}
};
{"user_supplied_bug12", 1, user_supplied_bug12 },
{"user_supplied_bug13", 1, user_supplied_bug13 },
{"user_supplied_bug14", 1, user_supplied_bug14 },
+ {"user_supplied_bug15", 1, user_supplied_bug15 },
{0, 0, 0}
};
{"generate_hsieh", pre_hsieh, 0, generate_tests},
{"generate_hsieh_consistent", enable_consistent, 0, generate_tests},
{"generate_md5", pre_md5, 0, generate_tests},
+ {"generate_murmur", pre_murmur, 0, generate_tests},
{"generate_nonblock", pre_nonblock, 0, generate_tests},
{0, 0, 0, 0}
};