-scanner_variable_t test_boolean_options[]= {
- { ARRAY, make_scanner_string("--BINARY-PROTOCOL"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--BUFFER-REQUESTS"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--HASH-WITH-NAMESPACE"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--NOREPLY"), scanner_string_null, __check_NOREPLY },
- { ARRAY, make_scanner_string("--RANDOMIZE-REPLICA-READ"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--SORT-HOSTS"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--SUPPORT-CAS"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--TCP-NODELAY"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--TCP-KEEPALIVE"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--TCP-KEEPIDLE"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--USE-UDP"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--VERIFY-KEY"), scanner_string_null, __check_VERIFY_KEY },
- { NIL, scanner_string_null, scanner_string_null, NULL}
-};
-
-scanner_variable_t prefix_key_strings[]= {
- { ARRAY, make_scanner_string("--NAMESPACE=foo"), make_scanner_string("foo"), __check_prefix_key },
- { ARRAY, make_scanner_string("--NAMESPACE=\"foo\""), make_scanner_string("foo"), __check_prefix_key },
- { ARRAY, make_scanner_string("--NAMESPACE=\"This_is_a_very_long_key\""), make_scanner_string("This_is_a_very_long_key"), __check_prefix_key },
- { NIL, scanner_string_null, scanner_string_null, NULL}
-};
-
-scanner_variable_t distribution_strings[]= {
- { ARRAY, make_scanner_string("--DISTRIBUTION=consistent"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--DISTRIBUTION=consistent,CRC"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--DISTRIBUTION=consistent,MD5"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--DISTRIBUTION=random"), scanner_string_null, __check_distribution_RANDOM },
- { ARRAY, make_scanner_string("--DISTRIBUTION=modula"), scanner_string_null, NULL },
- { NIL, scanner_string_null, scanner_string_null, NULL}
-};
-
-scanner_variable_t hash_strings[]= {
- { ARRAY, make_scanner_string("--HASH=CRC"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--HASH=FNV1A_32"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--HASH=FNV1A_64"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--HASH=FNV1_32"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--HASH=FNV1_64"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--HASH=JENKINS"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--HASH=MD5"), scanner_string_null, NULL },
- { ARRAY, make_scanner_string("--HASH=MURMUR"), scanner_string_null, NULL },
- { NIL, scanner_string_null, scanner_string_null, NULL}
-};
-
-
-static test_return_t _test_option(scanner_variable_t *scanner, bool test_true= true)
-{
- (void)test_true;
-
- for (scanner_variable_t *ptr= scanner; ptr->type != NIL; ptr++)
- {
- memcached_st *memc;
- memc= memcached(ptr->option.c_str, ptr->option.size);
- if (test_true)
- {
- if (not memc)
- {
- char buffer[2048];
- memcached_return_t rc= libmemcached_check_configuration(ptr->option.c_str, ptr->option.size, buffer, sizeof(buffer));
- std::cerr << "About error for " << memcached_strerror(NULL, rc) << " : " << buffer << std::endl;
- }
-
- test_true(memc);
-
- if (ptr->check_func)
- {
- test_return_t test_rc= (*ptr->check_func)(memc, ptr->result);
- if (test_rc != TEST_SUCCESS)
- {
- memcached_free(memc);
- return test_rc;
- }
- }
-
- memcached_free(memc);
- }
- else
- {
- test_false_with(memc, ptr->option.c_str);
- }
- }
-
- return TEST_SUCCESS;
-}
-
-test_return_t server_test(memcached_st *)
-{
- return _test_option(test_server_strings);
-}
-
-test_return_t server_with_weight_test(memcached_st *)
-{
- return _test_option(test_server_strings_with_weights);
-}
-
-test_return_t servers_bad_test(memcached_st *)
-{
- test_return_t rc;
- if ((rc= _test_option(bad_test_strings, false)) != TEST_SUCCESS)
- {
- return rc;
- }
-
- return TEST_SUCCESS;
-}
-
-test_return_t parser_number_options_test(memcached_st*)
-{
- return _test_option(test_number_options);
-}
-
-test_return_t parser_boolean_options_test(memcached_st*)
-{
- return _test_option(test_boolean_options);
-}
-
-test_return_t behavior_parser_test(memcached_st*)
-{
- return TEST_SUCCESS;
-}
-
-test_return_t parser_hash_test(memcached_st*)
-{
- return _test_option(hash_strings);
-}
-
-test_return_t parser_distribution_test(memcached_st*)
-{
- return _test_option(distribution_strings);
-}
-
-test_return_t parser_key_prefix_test(memcached_st*)
-{
- return _test_option(distribution_strings);
-}
-
-#define SUPPORT_EXAMPLE_CNF "support/example.cnf"
-
-test_return_t memcached_create_with_options_with_filename(memcached_st*)
-{
- if (access(SUPPORT_EXAMPLE_CNF, R_OK))
- return TEST_SKIPPED;
-
- memcached_st *memc_ptr;
- memc_ptr= memcached(STRING_WITH_LEN("--CONFIGURE-FILE=\"support/example.cnf\""));
- test_true_got(memc_ptr, "memcached() failed");
- test_strcmp(SUPPORT_EXAMPLE_CNF, memcached_array_string(memc_ptr->configure.filename));
- memcached_free(memc_ptr);
-
- return TEST_SUCCESS;
-}
-
-test_return_t libmemcached_check_configuration_with_filename_test(memcached_st*)
-{
- if (access(SUPPORT_EXAMPLE_CNF, R_OK))
- return TEST_SKIPPED;
-
- memcached_return_t rc;
- char buffer[BUFSIZ];
-
- rc= libmemcached_check_configuration(STRING_WITH_LEN("--CONFIGURE-FILE=\"support/example.cnf\""), buffer, sizeof(buffer));
- test_true_got(rc == MEMCACHED_SUCCESS, (rc == MEMCACHED_ERRNO) ? strerror(errno) : memcached_strerror(NULL, rc));
-
- rc= libmemcached_check_configuration(STRING_WITH_LEN("--CONFIGURE-FILE=support/example.cnf"), buffer, sizeof(buffer));
- test_false_with(rc == MEMCACHED_SUCCESS, memcached_strerror(NULL, rc));
-
- rc= libmemcached_check_configuration(STRING_WITH_LEN("--CONFIGURE-FILE=\"bad-path/example.cnf\""), buffer, sizeof(buffer));
- test_true_got(rc == MEMCACHED_ERRNO, memcached_strerror(NULL, rc));
-
- return TEST_SUCCESS;
-}
-
-test_return_t libmemcached_check_configuration_test(memcached_st*)
-{
- memcached_return_t rc;
- char buffer[BUFSIZ];
-
- rc= libmemcached_check_configuration(STRING_WITH_LEN("--server=localhost"), buffer, sizeof(buffer));
- test_true_got(rc == MEMCACHED_SUCCESS, buffer);
-
- rc= libmemcached_check_configuration(STRING_WITH_LEN("--dude=localhost"), buffer, sizeof(buffer));
- test_false_with(rc == MEMCACHED_SUCCESS, buffer);
- test_true(rc == MEMCACHED_PARSE_ERROR);
-
- return TEST_SUCCESS;
-}
-
-test_return_t memcached_create_with_options_test(memcached_st*)
-{
- memcached_st *memc_ptr;
- memc_ptr= memcached(STRING_WITH_LEN("--server=localhost"));
- test_true_got(memc_ptr, memcached_last_error_message(memc_ptr));
- memcached_free(memc_ptr);
-
- memc_ptr= memcached(STRING_WITH_LEN("--dude=localhost"));
- test_false_with(memc_ptr, memcached_last_error_message(memc_ptr));
-
- return TEST_SUCCESS;
-}
-
-test_return_t test_include_keyword(memcached_st*)
-{
- if (access(SUPPORT_EXAMPLE_CNF, R_OK))
- return TEST_SKIPPED;
-
- char buffer[BUFSIZ];
- memcached_return_t rc;
- rc= libmemcached_check_configuration(STRING_WITH_LEN("INCLUDE \"support/example.cnf\""), buffer, sizeof(buffer));
- test_true_got(rc == MEMCACHED_SUCCESS, buffer);
-
- return TEST_SUCCESS;
-}
-
-test_return_t test_end_keyword(memcached_st*)
-{
- char buffer[BUFSIZ];
- memcached_return_t rc;
- rc= libmemcached_check_configuration(STRING_WITH_LEN("--server=localhost END bad keywords"), buffer, sizeof(buffer));
- test_true_got(rc == MEMCACHED_SUCCESS, buffer);
-
- return TEST_SUCCESS;
-}
-
-test_return_t test_reset_keyword(memcached_st*)
-{
- char buffer[BUFSIZ];
- memcached_return_t rc;
- rc= libmemcached_check_configuration(STRING_WITH_LEN("--server=localhost reset --server=bad.com"), buffer, sizeof(buffer));
- test_true_got(rc == MEMCACHED_SUCCESS, buffer);
-
- return TEST_SUCCESS;
-}