X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=tests%2Fmem_functions.c;h=96d0ac20c8d9f41324bbac9af4d18786ed1e1b61;hb=de161b27e5e394ea0ae4a88e58fc9ebb21e821d0;hp=090d00cc1978a71873b3e7d9740ea5d81ab05fba;hpb=f0d3a824ed9acb9f6e3080683abe2bcc8b0cd6bd;p=m6w6%2Flibmemcached diff --git a/tests/mem_functions.c b/tests/mem_functions.c index 090d00cc..96d0ac20 100644 --- a/tests/mem_functions.c +++ b/tests/mem_functions.c @@ -35,10 +35,12 @@ #include #include "tests/parser.h" +#include "tests/string.h" #include "tests/replication.h" #include "tests/basic.h" #include "tests/error_conditions.h" #include "tests/print.h" +#include "tests/virtual_buckets.h" #ifdef HAVE_LIBMEMCACHEDUTIL @@ -208,6 +210,7 @@ static test_return_t memcached_server_remove_test(memcached_st *ptr) memc= memcached_create(&local_memc); servers= memcached_servers_parse(server_string); + assert(servers); rc= memcached_server_push(memc, servers); memcached_server_list_free(servers); @@ -317,7 +320,7 @@ static test_return_t clone_test(memcached_st *memc) test_true(memc_clone->flags.buffer_requests == memc->flags.buffer_requests); test_true(memc_clone->flags.use_sort_hosts == memc->flags.use_sort_hosts); test_true(memc_clone->flags.verify_key == memc->flags.verify_key); - test_true(memc_clone->flags.ketama_weighted == memc->flags.ketama_weighted); + test_true(memc_clone->ketama.weighted == memc->ketama.weighted); test_true(memc_clone->flags.binary_protocol == memc->flags.binary_protocol); test_true(memc_clone->flags.hash_with_prefix_key == memc->flags.hash_with_prefix_key); test_true(memc_clone->flags.no_reply == memc->flags.no_reply); @@ -401,10 +404,10 @@ static test_return_t error_test(memcached_st *memc) 2300930706U, 2943759320U, 674306647U, 2400528935U, 54481931U, 4186304426U, 1741088401U, 2979625118U, 4159057246U, 3425930182U, 2593724503U, 1868899624U, - 1769812374U, 2302537950U, 1110330676U }; + 1769812374U, 2302537950U, 1110330676U, 3365377466U, + 1336171666U, 3021258493U, 3365377466U }; // You have updated the memcache_error messages but not updated docs/tests. - test_true(MEMCACHED_MAXIMUM_RETURN == 43); for (rc= MEMCACHED_SUCCESS; rc < MEMCACHED_MAXIMUM_RETURN; rc++) { uint32_t hash_val; @@ -418,6 +421,7 @@ static test_return_t error_test(memcached_st *memc) } test_true(values[rc] == hash_val); } + test_true(MEMCACHED_MAXIMUM_RETURN == 46); return TEST_SUCCESS; } @@ -774,8 +778,8 @@ static memcached_return_t server_function(const memcached_st *ptr, static test_return_t memcached_server_cursor_test(memcached_st *memc) { - char context[8]; - strcpy(context, "foo bad"); + char context[10]; + strncpy(context, "foo bad", sizeof(context)); memcached_server_fn callbacks[1]; callbacks[0]= server_function; @@ -844,7 +848,7 @@ static test_return_t bad_key_test(memcached_st *memc) rc= memcached_callback_set(memc_clone, MEMCACHED_CALLBACK_PREFIX_KEY, NULL); test_true(rc == MEMCACHED_SUCCESS); - char *longkey= malloc(max_keylen + 1); + char *longkey= (char *)malloc(max_keylen + 1); if (longkey != NULL) { memset(longkey, 'a', max_keylen + 1); @@ -1996,21 +2000,15 @@ static test_return_t MEMCACHED_BEHAVIOR_CORK_test(memcached_st *memc) { memcached_return_t rc; bool set= true; - bool value; rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_CORK, set); - test_true(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_NOT_SUPPORTED); - - value= (bool)memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_CORK); + test_true(rc == MEMCACHED_DEPRECATED); - if (rc == MEMCACHED_SUCCESS) - { - test_true((bool)value == set); - } - else - { - test_false((bool)value == set); - } + // Platform dependent +#if 0 + bool value= (bool)memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_CORK); + test_false(value); +#endif return TEST_SUCCESS; } @@ -2942,7 +2940,7 @@ static test_return_t user_supplied_bug18(memcached_st *trash) /* VDEAAAAA hashes to fffcd1b5, after the last continuum point, and lets * us test the boundary wraparound. */ - test_true(memcached_generate_hash(memc, (char *)"VDEAAAAA", 8) == memc->continuum[0].index); + test_true(memcached_generate_hash(memc, (char *)"VDEAAAAA", 8) == memc->ketama.continuum[0].index); /* verify the standard ketama set. */ for (x= 0; x < 99; x++) @@ -3103,7 +3101,7 @@ static test_return_t auto_eject_hosts(memcached_st *trash) instance= memcached_server_instance_by_position(memc, 2); ((memcached_server_write_instance_st)instance)->next_retry = time(NULL) + 15; - memc->next_distribution_rebuild= time(NULL) - 1; + memc->ketama.next_distribution_rebuild= time(NULL) - 1; /* This would not work if there were only two hosts. @@ -3117,7 +3115,7 @@ static test_return_t auto_eject_hosts(memcached_st *trash) /* and re-added when it's back. */ ((memcached_server_write_instance_st)instance)->next_retry = time(NULL) - 1; - memc->next_distribution_rebuild= time(NULL) - 1; + memc->ketama.next_distribution_rebuild= time(NULL) - 1; memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_DISTRIBUTION, memc->distribution); for (size_t x= 0; x < 99; x++) @@ -3228,118 +3226,6 @@ static test_return_t result_alloc(memcached_st *memc) return TEST_SUCCESS; } -static test_return_t string_static_null(memcached_st *memc) -{ - memcached_string_st string; - memcached_string_st *string_ptr; - - string_ptr= memcached_string_create(memc, &string, 0); - test_true(string.options.is_initialized == true); - test_true(string_ptr); - - /* The following two better be the same! */ - test_true(memcached_is_allocated(string_ptr) == false); - test_true(memcached_is_allocated(&string) == false); - test_true(&string == string_ptr); - - test_true(string.options.is_initialized == true); - test_true(memcached_is_initialized(&string) == true); - memcached_string_free(&string); - test_true(memcached_is_initialized(&string) == false); - - return TEST_SUCCESS; -} - -static test_return_t string_alloc_null(memcached_st *memc) -{ - memcached_string_st *string; - - string= memcached_string_create(memc, NULL, 0); - test_true(string); - test_true(memcached_is_allocated(string) == true); - test_true(memcached_is_initialized(string) == true); - memcached_string_free(string); - - return TEST_SUCCESS; -} - -static test_return_t string_alloc_with_size(memcached_st *memc) -{ - memcached_string_st *string; - - string= memcached_string_create(memc, NULL, 1024); - test_true(string); - test_true(memcached_is_allocated(string) == true); - test_true(memcached_is_initialized(string) == true); - memcached_string_free(string); - - return TEST_SUCCESS; -} - -static test_return_t string_alloc_with_size_toobig(memcached_st *memc) -{ - memcached_string_st *string; - - string= memcached_string_create(memc, NULL, SIZE_MAX); - test_true(string == NULL); - - return TEST_SUCCESS; -} - -static test_return_t string_alloc_append(memcached_st *memc) -{ - unsigned int x; - char buffer[SMALL_STRING_LEN]; - memcached_string_st *string; - - /* Ring the bell! */ - memset(buffer, 6, SMALL_STRING_LEN); - - string= memcached_string_create(memc, NULL, 100); - test_true(string); - test_true(memcached_is_allocated(string) == true); - test_true(memcached_is_initialized(string) == true); - - for (x= 0; x < 1024; x++) - { - memcached_return_t rc; - rc= memcached_string_append(string, buffer, SMALL_STRING_LEN); - test_true(rc == MEMCACHED_SUCCESS); - } - test_true(memcached_is_allocated(string) == true); - memcached_string_free(string); - - return TEST_SUCCESS; -} - -static test_return_t string_alloc_append_toobig(memcached_st *memc) -{ - memcached_return_t rc; - unsigned int x; - char buffer[SMALL_STRING_LEN]; - memcached_string_st *string; - - /* Ring the bell! */ - memset(buffer, 6, SMALL_STRING_LEN); - - string= memcached_string_create(memc, NULL, 100); - test_true(string); - test_true(memcached_is_allocated(string) == true); - test_true(memcached_is_initialized(string) == true); - - for (x= 0; x < 1024; x++) - { - rc= memcached_string_append(string, buffer, SMALL_STRING_LEN); - test_true(rc == MEMCACHED_SUCCESS); - } - rc= memcached_string_append(string, buffer, SIZE_MAX); - test_true(rc == MEMCACHED_MEMORY_ALLOCATION_FAILURE); - test_true(memcached_is_allocated(string) == true); - memcached_string_free(string); - - return TEST_SUCCESS; -} - static test_return_t cleanup_pairs(memcached_st *memc) { (void)memc; @@ -3956,9 +3842,10 @@ static test_return_t set_prefix(memcached_st *memc) /* Test a clean set */ rc= memcached_callback_set(memc, MEMCACHED_CALLBACK_PREFIX_KEY, (void *)key); - test_true(rc == MEMCACHED_SUCCESS); + test_true_got(rc == MEMCACHED_SUCCESS, memcached_last_error_message(memc)); value= memcached_callback_get(memc, MEMCACHED_CALLBACK_PREFIX_KEY, &rc); + test_true(value); test_true(memcmp(value, key, 4) == 0); test_true(rc == MEMCACHED_SUCCESS); @@ -3967,6 +3854,7 @@ static test_return_t set_prefix(memcached_st *memc) test_true(rc == MEMCACHED_SUCCESS); value= memcached_callback_get(memc, MEMCACHED_CALLBACK_PREFIX_KEY, &rc); + test_false(value); test_true(rc == MEMCACHED_FAILURE); /* Now setup for main test */ @@ -3974,6 +3862,7 @@ static test_return_t set_prefix(memcached_st *memc) test_true(rc == MEMCACHED_SUCCESS); value= memcached_callback_get(memc, MEMCACHED_CALLBACK_PREFIX_KEY, &rc); + test_true(value); test_true(rc == MEMCACHED_SUCCESS); test_true(memcmp(value, key, 4) == 0); @@ -3986,18 +3875,19 @@ static test_return_t set_prefix(memcached_st *memc) test_true(rc == MEMCACHED_SUCCESS); value= memcached_callback_get(memc, MEMCACHED_CALLBACK_PREFIX_KEY, &rc); + test_false(value); test_true(rc == MEMCACHED_FAILURE); test_true(value == NULL); /* Test a long key for failure */ /* TODO, extend test to determine based on setting, what result should be */ - strcpy(long_key, "Thisismorethentheallottednumberofcharacters"); + strncpy(long_key, "Thisismorethentheallottednumberofcharacters", sizeof(long_key)); rc= memcached_callback_set(memc, MEMCACHED_CALLBACK_PREFIX_KEY, long_key); //test_true(rc == MEMCACHED_BAD_KEY_PROVIDED); test_true(rc == MEMCACHED_SUCCESS); /* Now test a key with spaces (which will fail from long key, since bad key is not set) */ - strcpy(long_key, "This is more then the allotted number of characters"); + strncpy(long_key, "This is more then the allotted number of characters", sizeof(long_key)); rc= memcached_callback_set(memc, MEMCACHED_CALLBACK_PREFIX_KEY, long_key); test_true(rc == MEMCACHED_BAD_KEY_PROVIDED); @@ -4005,7 +3895,7 @@ static test_return_t set_prefix(memcached_st *memc) rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_VERIFY_KEY, 1); test_true(rc == MEMCACHED_SUCCESS); - strcpy(long_key, "dog cat"); + strncpy(long_key, "dog cat", sizeof(long_key)); rc= memcached_callback_set(memc, MEMCACHED_CALLBACK_PREFIX_KEY, long_key); test_true(rc == MEMCACHED_BAD_KEY_PROVIDED); } @@ -4590,7 +4480,7 @@ static test_return_t hash_sanity_test (memcached_st *memc) static test_return_t hsieh_avaibility_test (memcached_st *memc) { - memcached_return_t expected_rc= MEMCACHED_FAILURE; + memcached_return_t expected_rc= MEMCACHED_INVALID_ARGUMENTS; #ifdef HAVE_HSIEH_HASH expected_rc= MEMCACHED_SUCCESS; #endif @@ -4603,7 +4493,7 @@ static test_return_t hsieh_avaibility_test (memcached_st *memc) static test_return_t murmur_avaibility_test (memcached_st *memc) { - memcached_return_t expected_rc= MEMCACHED_FAILURE; + memcached_return_t expected_rc= MEMCACHED_INVALID_ARGUMENTS; #ifdef HAVE_MURMUR_HASH expected_rc= MEMCACHED_SUCCESS; #endif @@ -5026,7 +4916,7 @@ static test_return_t ketama_compatibility_libmemcached(memcached_st *trash) /* VDEAAAAA hashes to fffcd1b5, after the last continuum point, and lets * us test the boundary wraparound. */ - test_true(memcached_generate_hash(memc, (char *)"VDEAAAAA", 8) == memc->continuum[0].index); + test_true(memcached_generate_hash(memc, (char *)"VDEAAAAA", 8) == memc->ketama.continuum[0].index); /* verify the standard ketama set. */ for (x= 0; x < 99; x++) @@ -5049,7 +4939,6 @@ static test_return_t ketama_compatibility_spymemcached(memcached_st *trash) { memcached_return_t rc; uint64_t value; - int x; memcached_server_st *server_pool; memcached_st *memc; @@ -5068,6 +4957,7 @@ static test_return_t ketama_compatibility_spymemcached(memcached_st *trash) test_true(memcached_behavior_get_distribution(memc) == MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA_SPY); server_pool = memcached_servers_parse("10.0.1.1:11211 600,10.0.1.2:11211 300,10.0.1.3:11211 200,10.0.1.4:11211 350,10.0.1.5:11211 1000,10.0.1.6:11211 800,10.0.1.7:11211 950,10.0.1.8:11211 100"); + assert(server_pool); memcached_server_push(memc, server_pool); /* verify that the server list was parsed okay. */ @@ -5085,10 +4975,10 @@ static test_return_t ketama_compatibility_spymemcached(memcached_st *trash) /* VDEAAAAA hashes to fffcd1b5, after the last continuum point, and lets * us test the boundary wraparound. */ - test_true(memcached_generate_hash(memc, (char *)"VDEAAAAA", 8) == memc->continuum[0].index); + test_true(memcached_generate_hash(memc, (char *)"VDEAAAAA", 8) == memc->ketama.continuum[0].index); /* verify the standard ketama set. */ - for (x= 0; x < 99; x++) + for (uint32_t x= 0; x < 99; x++) { uint32_t server_idx= memcached_generate_hash(memc, ketama_test_cases_spy[x].key, strlen(ketama_test_cases_spy[x].key)); @@ -5704,9 +5594,11 @@ static test_return_t wrong_failure_counter_two_test(memcached_st *memc) /* put failure limit to 1 */ rc= memcached_behavior_set(memc_clone, MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT, 1); assert(rc == MEMCACHED_SUCCESS); + /* Put a retry timeout to effectively activate failure_limit effect */ rc= memcached_behavior_set(memc_clone, MEMCACHED_BEHAVIOR_RETRY_TIMEOUT, 1); assert(rc == MEMCACHED_SUCCESS); + /* change behavior that triggers memcached_quit()*/ rc= memcached_behavior_set(memc_clone, MEMCACHED_BEHAVIOR_TCP_NODELAY, 1); assert(rc == MEMCACHED_SUCCESS); @@ -5719,6 +5611,7 @@ static test_return_t wrong_failure_counter_two_test(memcached_st *memc) test_true_got(rc == MEMCACHED_SUCCESS, memcached_strerror(NULL, rc)); test_true(string); free(string); + memcached_free(memc_clone); return TEST_SUCCESS; } @@ -5853,7 +5746,7 @@ static test_return_t regression_bug_583031(memcached_st *unused) (void)memcached_get(memc, "dsf", 3, &length, &flags, &rc); - test_true_got(rc == MEMCACHED_TIMEOUT, memcached_strerror(NULL, rc)); + test_true_got(rc == MEMCACHED_TIMEOUT || rc == MEMCACHED_ERRNO || rc == MEMCACHED_FAILURE, memcached_strerror(memc, rc)); memcached_free(memc); @@ -5865,6 +5758,7 @@ static test_return_t regression_bug_728286(memcached_st *unused) { (void)unused; memcached_server_st *servers = memcached_servers_parse("1.2.3.4:99"); + assert(servers); memcached_server_free(servers); return TEST_SUCCESS; @@ -6131,6 +6025,7 @@ test_st string_tests[] ={ {"string alloc with malloc failure", 0, (test_callback_fn)string_alloc_with_size_toobig }, {"string append", 0, (test_callback_fn)string_alloc_append }, {"string append failure (too big)", 0, (test_callback_fn)string_alloc_append_toobig }, + {"string_alloc_append_multiple", 0, (test_callback_fn)string_alloc_append_multiple }, {0, 0, (test_callback_fn)0} }; @@ -6314,13 +6209,23 @@ test_st error_conditions[] ={ test_st parser_tests[] ={ {"behavior", 0, (test_callback_fn)behavior_parser_test }, {"boolean_options", 0, (test_callback_fn)parser_boolean_options_test }, + {"configure_file", 0, (test_callback_fn)memcached_create_with_options_with_filename }, {"distribtions", 0, (test_callback_fn)parser_distribution_test }, {"hash", 0, (test_callback_fn)parser_hash_test }, + {"libmemcached_check_configuration", 0, (test_callback_fn)libmemcached_check_configuration_test }, + {"libmemcached_check_configuration_with_filename", 0, (test_callback_fn)libmemcached_check_configuration_with_filename_test }, + {"memcached_parse_configure_file", 0, (test_callback_fn)memcached_parse_configure_file_test }, {"number_options", 0, (test_callback_fn)parser_number_options_test }, - {"server", 0, (test_callback_fn)server_test }, - {"servers", 0, (test_callback_fn)servers_test }, + {"randomly generated options", 0, (test_callback_fn)random_statement_build_test }, {"prefix_key", 0, (test_callback_fn)parser_key_prefix_test }, - {"memcached_parse_file_options", 0, (test_callback_fn)memcached_parse_file_options_test }, + {"server", 0, (test_callback_fn)server_test }, + {"bad server strings", 0, (test_callback_fn)servers_bad_test }, + {"server with weights", 0, (test_callback_fn)server_with_weight_test }, + {0, 0, (test_callback_fn)0} +}; + +test_st virtual_bucket_tests[] ={ + {"basic", 0, (test_callback_fn)virtual_back_map }, {0, 0, (test_callback_fn)0} }; @@ -6388,6 +6293,7 @@ collection_st collection[] ={ {"regression_binary_vs_block", (test_callback_fn)key_setup, (test_callback_fn)key_teardown, regression_binary_vs_block}, {"error_conditions", 0, 0, error_conditions}, {"parser", 0, 0, parser_tests}, + {"virtual buckets", 0, 0, virtual_bucket_tests}, {0, 0, 0, 0} };