📄 testmemcache.c
字号:
char *result; apr_size_t len; rv = apr_memcache_create(pool, 1, 0, &memcache); ABTS_ASSERT(tc, "memcache create failed", rv == APR_SUCCESS); rv = apr_memcache_server_create(pool, HOST, PORT, 0, 1, 1, 60, &server); ABTS_ASSERT(tc, "server create failed", rv == APR_SUCCESS); rv = apr_memcache_add_server(memcache, server); ABTS_ASSERT(tc, "server add failed", rv == APR_SUCCESS); tdata = apr_hash_make(p); create_test_hash(pool, tdata); for (hi = apr_hash_first(p, tdata); hi; hi = apr_hash_next(hi)) { const void *k; void *v; const char *key; apr_hash_this(hi, &k, NULL, &v); key = k; /* doesn't exist yet, fail */ rv = apr_memcache_replace(memcache, key, v, strlen(v) - 1, 0, 27); ABTS_ASSERT(tc, "replace should have failed", rv != APR_SUCCESS); /* doesn't exist yet, succeed */ rv = apr_memcache_add(memcache, key, v, strlen(v), 0, 27); ABTS_ASSERT(tc, "add failed", rv == APR_SUCCESS); /* exists now, succeed */ rv = apr_memcache_replace(memcache, key, "new", sizeof("new") - 1, 0, 27); ABTS_ASSERT(tc, "replace failed", rv == APR_SUCCESS); /* make sure its different */ rv = apr_memcache_getp(memcache, pool, key, &result, &len, NULL); ABTS_ASSERT(tc, "get failed", rv == APR_SUCCESS); ABTS_STR_NEQUAL(tc, result, "new", 3); /* exists now, fail */ rv = apr_memcache_add(memcache, key, v, strlen(v), 0, 27); ABTS_ASSERT(tc, "add should have failed", rv != APR_SUCCESS); /* clean up */ rv = apr_memcache_delete(memcache, key, 0); ABTS_ASSERT(tc, "delete failed", rv == APR_SUCCESS); }}/* basic tests of the increment and decrement commands */static void test_memcache_incrdecr(abts_case * tc, void *data){ apr_pool_t *pool = p; apr_status_t rv; apr_memcache_t *memcache; apr_memcache_server_t *server; apr_uint32_t new; char *result; apr_size_t len; apr_uint32_t i; rv = apr_memcache_create(pool, 1, 0, &memcache); ABTS_ASSERT(tc, "memcache create failed", rv == APR_SUCCESS); rv = apr_memcache_server_create(pool, HOST, PORT, 0, 1, 1, 60, &server); ABTS_ASSERT(tc, "server create failed", rv == APR_SUCCESS); rv = apr_memcache_add_server(memcache, server); ABTS_ASSERT(tc, "server add failed", rv == APR_SUCCESS); rv = apr_memcache_set(memcache, prefix, "271", sizeof("271") - 1, 0, 27); ABTS_ASSERT(tc, "set failed", rv == APR_SUCCESS); for( i = 1; i <= TDATA_SIZE; i++) { apr_uint32_t expect; rv = apr_memcache_getp(memcache, pool, prefix, &result, &len, NULL); ABTS_ASSERT(tc, "get failed", rv == APR_SUCCESS); expect = i + atoi(result); rv = apr_memcache_incr(memcache, prefix, i, &new); ABTS_ASSERT(tc, "incr failed", rv == APR_SUCCESS); ABTS_INT_EQUAL(tc, expect, new); rv = apr_memcache_decr(memcache, prefix, i, &new); ABTS_ASSERT(tc, "decr failed", rv == APR_SUCCESS); ABTS_INT_EQUAL(tc, atoi(result), new); } rv = apr_memcache_getp(memcache, pool, prefix, &result, &len, NULL); ABTS_ASSERT(tc, "get failed", rv == APR_SUCCESS); ABTS_INT_EQUAL(tc, 271, atoi(result)); rv = apr_memcache_delete(memcache, prefix, 0); ABTS_ASSERT(tc, "delete failed", rv == APR_SUCCESS);}/* test the multiget functionality */static void test_memcache_multiget(abts_case * tc, void *data){ apr_pool_t *pool = p; apr_pool_t *tmppool; apr_status_t rv; apr_memcache_t *memcache; apr_memcache_server_t *server; apr_hash_t *tdata, *values; apr_hash_index_t *hi; apr_uint32_t i; rv = apr_memcache_create(pool, 1, 0, &memcache); ABTS_ASSERT(tc, "memcache create failed", rv == APR_SUCCESS); rv = apr_memcache_server_create(pool, HOST, PORT, 0, 1, 1, 60, &server); ABTS_ASSERT(tc, "server create failed", rv == APR_SUCCESS); rv = apr_memcache_add_server(memcache, server); ABTS_ASSERT(tc, "server add failed", rv == APR_SUCCESS); values = apr_hash_make(p); tdata = apr_hash_make(p); create_test_hash(pool, tdata); for (hi = apr_hash_first(p, tdata); hi; hi = apr_hash_next(hi)) { const void *k; void *v; const char *key; apr_hash_this(hi, &k, NULL, &v); key = k; rv = apr_memcache_set(memcache, key, v, strlen(v), 0, 27); ABTS_ASSERT(tc, "set failed", rv == APR_SUCCESS); } rv = apr_pool_create(&tmppool, pool); for (i = 0; i < TDATA_SET; i++) apr_memcache_add_multget_key(pool, apr_pstrcat(pool, prefix, apr_itoa(pool, i), NULL), &values); rv = apr_memcache_multgetp(memcache, tmppool, pool, values); ABTS_ASSERT(tc, "multgetp failed", rv == APR_SUCCESS); ABTS_ASSERT(tc, "multgetp returned too few results", apr_hash_count(values) == TDATA_SET); for (hi = apr_hash_first(p, tdata); hi; hi = apr_hash_next(hi)) { const void *k; const char *key; apr_hash_this(hi, &k, NULL, NULL); key = k; rv = apr_memcache_delete(memcache, key, 0); ABTS_ASSERT(tc, "delete failed", rv == APR_SUCCESS); } }/* test setting and getting */static void test_memcache_setget(abts_case * tc, void *data){ apr_pool_t *pool = p; apr_status_t rv; apr_memcache_t *memcache; apr_memcache_server_t *server; apr_hash_t *tdata, *values; apr_hash_index_t *hi; char *result; apr_size_t len; rv = apr_memcache_create(pool, 1, 0, &memcache); ABTS_ASSERT(tc, "memcache create failed", rv == APR_SUCCESS); rv = apr_memcache_server_create(pool, HOST, PORT, 0, 1, 1, 60, &server); ABTS_ASSERT(tc, "server create failed", rv == APR_SUCCESS); rv = apr_memcache_add_server(memcache, server); ABTS_ASSERT(tc, "server add failed", rv == APR_SUCCESS); tdata = apr_hash_make(pool); values = apr_hash_make(pool); create_test_hash(pool, tdata); for (hi = apr_hash_first(p, tdata); hi; hi = apr_hash_next(hi)) { const void *k; void *v; const char *key; apr_hash_this(hi, &k, NULL, &v); key = k; rv = apr_memcache_set(memcache, key, v, strlen(v), 0, 27); ABTS_ASSERT(tc, "set failed", rv == APR_SUCCESS); rv = apr_memcache_getp(memcache, pool, key, &result, &len, NULL); ABTS_ASSERT(tc, "get failed", rv == APR_SUCCESS); } rv = apr_memcache_getp(memcache, pool, "nothere3423", &result, &len, NULL); ABTS_ASSERT(tc, "get should have failed", rv != APR_SUCCESS); for (hi = apr_hash_first(p, tdata); hi; hi = apr_hash_next(hi)) { const void *k; const char *key; apr_hash_this(hi, &k, NULL, NULL); key = k; rv = apr_memcache_delete(memcache, key, 0); ABTS_ASSERT(tc, "delete failed", rv == APR_SUCCESS); }}/* use apr_socket stuff to see if there is in fact a memcached server * running on PORT. */apr_status_t check_mc(void){ apr_pool_t *pool = p; apr_status_t rv; apr_socket_t *sock = NULL; apr_sockaddr_t *sa; struct iovec vec[2]; apr_size_t written; char buf[128]; apr_size_t len; rv = apr_socket_create(&sock, APR_INET, SOCK_STREAM, 0, pool); if(rv != APR_SUCCESS) { return rv; } rv = apr_sockaddr_info_get(&sa, HOST, APR_INET, PORT, 0, pool); if(rv != APR_SUCCESS) { return rv; } rv = apr_socket_timeout_set(sock, 1 * APR_USEC_PER_SEC); if (rv != APR_SUCCESS) { return rv; } rv = apr_socket_connect(sock, sa); if (rv != APR_SUCCESS) { return rv; } rv = apr_socket_timeout_set(sock, -1); if (rv != APR_SUCCESS) { return rv; } vec[0].iov_base = "version"; vec[0].iov_len = sizeof("version") - 1; vec[1].iov_base = "\r\n"; vec[1].iov_len = sizeof("\r\n") -1; rv = apr_socket_sendv(sock, vec, 2, &written); if (rv != APR_SUCCESS) { return rv; } len = sizeof(buf); rv = apr_socket_recv(sock, buf, &len); if(rv != APR_SUCCESS) { return rv; } if(strncmp(buf, "VERSION", sizeof("VERSION")-1) != 0) { rv = APR_EGENERAL; } apr_socket_close(sock); return rv;}abts_suite *testmemcache(abts_suite * suite){ apr_status_t rv; suite = ADD_SUITE(suite); /* check for a running memcached on the typical port before * trying to run the tests. succeed silently if we don't find one. */ rv = check_mc(); if(rv == APR_SUCCESS) { abts_run_test(suite, test_memcache_create, NULL); abts_run_test(suite, test_memcache_user_funcs, NULL); abts_run_test(suite, test_memcache_meta, NULL); abts_run_test(suite, test_memcache_setget, NULL); abts_run_test(suite, test_memcache_multiget, NULL); abts_run_test(suite, test_memcache_addreplace, NULL); abts_run_test(suite, test_memcache_incrdecr, NULL); } return suite;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -