Author: ivan
Date: Tue Nov 3 15:46:37 2015
New Revision: 1712312
URL: http://svn.apache.org/viewvc?rev=1712312&view=rev
Log:
Improve diagnostic of unfreed memory in bucket allocator in bucket tests.
* test/test_serf.h
(test__create_bucket_allocator): New function declaration.
* test/test_util.c
(bucket_unfreed_memory_cb): New. Callback for serf_bucket_allocator_create()
to print unfreed memory blocks prefixed with test name.
(test__create_bucket_allocator): New. Create bucket allocator with custom
unfreed memory callback to print unfreed memory in test.
* test/test_buckets.c
(*): Use test__create_bucket_allocator() instead of
serf_bucket_allocator_create() to create bucket allocator.
Modified:
serf/trunk/test/test_buckets.c
serf/trunk/test/test_serf.h
serf/trunk/test/test_util.c
Modified: serf/trunk/test/test_buckets.c
URL:
http://svn.apache.org/viewvc/serf/trunk/test/test_buckets.c?rev=1712312&r1=1712311&r2=1712312&view=diff
==============================================================================
--- serf/trunk/test/test_buckets.c (original)
+++ serf/trunk/test/test_buckets.c Tue Nov 3 15:46:37 2015
@@ -196,8 +196,7 @@ static void test_simple_bucket_readline(
apr_size_t len;
const char *body;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
bkt = SERF_BUCKET_SIMPLE_STRING(
"line1" CRLF
@@ -282,8 +281,7 @@ static void test_response_bucket_read(Cu
test_baton_t *tb = tc->testBaton;
serf_bucket_t *bkt, *tmp;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
tmp = SERF_BUCKET_SIMPLE_STRING(
"HTTP/1.1 200 OK" CRLF
@@ -304,8 +302,7 @@ static void test_response_bucket_headers
test_baton_t *tb = tc->testBaton;
serf_bucket_t *bkt, *tmp, *hdr;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
tmp = SERF_BUCKET_SIMPLE_STRING(
"HTTP/1.1 405 Method Not Allowed" CRLF
@@ -342,8 +339,7 @@ static void test_response_bucket_chunked
test_baton_t *tb = tc->testBaton;
serf_bucket_t *bkt, *tmp, *hdrs;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
tmp = SERF_BUCKET_SIMPLE_STRING(
"HTTP/1.1 200 OK" CRLF
@@ -374,8 +370,7 @@ static void test_response_bucket_chunked
static void test_bucket_header_set(CuTest *tc)
{
test_baton_t *tb = tc->testBaton;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
serf_bucket_t *hdrs = serf_bucket_headers_create(alloc);
CuAssertTrue(tc, hdrs != NULL);
@@ -417,8 +412,7 @@ store_header_in_table(void *baton, const
static void test_bucket_header_do(CuTest *tc)
{
test_baton_t *tb = tc->testBaton;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
serf_bucket_t *hdrs = serf_bucket_headers_create(alloc);
struct kv {
const char *key;
@@ -472,8 +466,7 @@ static void test_iovec_buckets(CuTest *t
int i;
int vecs_used;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
/* Test 1: Read a single string in an iovec, store it in a iovec_bucket
and then read it back. */
@@ -658,8 +651,7 @@ static void test_iovec_buckets(CuTest *t
static void test_header_buckets(CuTest *tc)
{
test_baton_t *tb = tc->testBaton;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
const char *cur;
serf_bucket_t *hdrs = serf_bucket_headers_create(alloc);
@@ -688,8 +680,7 @@ static void test_aggregate_buckets(CuTes
apr_size_t len;
const char *data;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
const char *BODY = "12345678901234567890"\
"12345678901234567890"\
"12345678901234567890"\
@@ -800,8 +791,7 @@ static void test_aggregate_bucket_readli
test_baton_t *tb = tc->testBaton;
serf_bucket_t *bkt, *aggbkt;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
const char *BODY = "12345678901234567890" CRLF
"12345678901234567890" CRLF
"12345678901234567890" CRLF;
@@ -841,8 +831,7 @@ static void test_response_body_too_small
{
test_baton_t *tb = tc->testBaton;
serf_bucket_t *bkt, *tmp;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
/* Make a response of 60 bytes, but set the Content-Length to 100. */
#define BODY "12345678901234567890"\
@@ -889,8 +878,7 @@ static void test_response_body_too_small
{
test_baton_t *tb = tc->testBaton;
serf_bucket_t *bkt, *tmp;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
/* Make a response of 60 bytes, but set the chunk size to 60 and don't end
with chunk of length 0. */
@@ -938,8 +926,7 @@ static void test_response_body_chunked_n
{
test_baton_t *tb = tc->testBaton;
serf_bucket_t *bkt, *tmp;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
tmp = SERF_BUCKET_SIMPLE_STRING("HTTP/1.1 200 OK" CRLF
"Content-Type: text/plain" CRLF
@@ -972,8 +959,7 @@ static void test_response_body_chunked_i
{
test_baton_t *tb = tc->testBaton;
serf_bucket_t *bkt, *tmp;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
tmp = SERF_BUCKET_SIMPLE_STRING("HTTP/1.1 200 OK" CRLF
"Content-Type: text/plain" CRLF
@@ -1004,8 +990,7 @@ static void test_response_body_chunked_g
{
test_baton_t *tb = tc->testBaton;
serf_bucket_t *bkt, *tmp;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
tmp = SERF_BUCKET_SIMPLE_STRING("HTTP/1.1 200 OK" CRLF
"Content-Type: text/plain" CRLF
@@ -1037,8 +1022,7 @@ static void test_response_bucket_peek_at
test_baton_t *tb = tc->testBaton;
serf_bucket_t *resp_bkt1, *tmp, *hdrs;
serf_status_line sl;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
const char *hdr_val, *cur;
apr_status_t status;
@@ -1114,8 +1098,7 @@ static void test_copy_bucket(CuTest *tc)
const char *data;
apr_size_t len;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
const char *BODY = "12345678901234567890"\
"12345678901234567890"\
"12345678901234567890"\
@@ -1196,8 +1179,7 @@ static void test_linebuf_crlf_split(CuTe
{
test_baton_t *tb = tc->testBaton;
serf_bucket_t *mock_bkt, *bkt;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
mockbkt_action actions[]= {
{ 1, "HTTP/1.1 200 OK" CRLF, APR_SUCCESS },
@@ -1269,7 +1251,7 @@ static void test_response_no_body_expect
"blablablablabla" CRLF,
};
- alloc = serf_bucket_allocator_create(tb->pool, NULL, NULL);
+ alloc = test__create_bucket_allocator(tc, tb->pool);
/* Test 1: a response to a HEAD request. */
tmp = SERF_BUCKET_SIMPLE_STRING("HTTP/1.1 200 OK" CRLF
@@ -1307,8 +1289,7 @@ static void test_response_bucket_iis_sta
test_baton_t *tb = tc->testBaton;
serf_bucket_t *bkt, *tmp;
serf_status_line sline;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
tmp = SERF_BUCKET_SIMPLE_STRING("HTTP/1.1 401.1 Logon failed." CRLF
"Content-Type: text/plain" CRLF
@@ -1339,8 +1320,7 @@ static void test_response_bucket_no_reas
test_baton_t *tb = tc->testBaton;
serf_bucket_t *bkt, *tmp;
serf_status_line sline;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
tmp = SERF_BUCKET_SIMPLE_STRING("HTTP/1.1 401" CRLF
"Content-Type: text/plain" CRLF
@@ -1435,7 +1415,7 @@ static void test_random_eagain_in_respon
apr_pool_clear(iter_pool);
- alloc = serf_bucket_allocator_create(iter_pool, NULL, NULL);
+ alloc = test__create_bucket_allocator(tc, iter_pool);
cut = i % strlen(fullmsg);
part1 = apr_pstrndup(iter_pool, fullmsg, cut);
@@ -1484,8 +1464,7 @@ static void test_dechunk_buckets(CuTest
{
test_baton_t *tb = tc->testBaton;
serf_bucket_t *mock_bkt, *bkt;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
mockbkt_action actions[]= {
/* one chunk */
{ 1, "6" CRLF "blabla" CRLF, APR_SUCCESS },
@@ -1637,8 +1616,7 @@ static void deflate_buckets(CuTest *tc,
const char *msg = "12345678901234567890123456789012345678901234567890";
test_baton_t *tb = tc->testBaton;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
z_stream zdestr;
int i;
const char gzip_header[10] =
@@ -1766,8 +1744,7 @@ create_gzip_deflate_bucket(serf_bucket_t
static void test_deflate_4GBplus_buckets(CuTest *tc)
{
test_baton_t *tb = tc->testBaton;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
int i;
unsigned char gzip_trailer[8];
z_stream zdestr;
@@ -1809,7 +1786,7 @@ static void test_deflate_4GBplus_buckets
apr_status_t status;
apr_pool_clear(iter_pool);
- iter_alloc = serf_bucket_allocator_create(iter_pool, NULL, NULL);
+ iter_alloc = test__create_bucket_allocator(tc, iter_pool);
if (i % 1000 == 0)
@@ -1887,8 +1864,7 @@ static void test_linebuf_fetch_crlf(CuTe
serf_bucket_t *bkt;
serf_linebuf_t linebuf;
- serf_bucket_alloc_t *alloc = serf_bucket_allocator_create(tb->pool, NULL,
- NULL);
+ serf_bucket_alloc_t *alloc = test__create_bucket_allocator(tc, tb->pool);
bkt = serf_bucket_mock_create(actions, sizeof(actions)/sizeof(actions[0]),
alloc);
@@ -1958,7 +1934,7 @@ static void test_prefix_buckets(CuTest *
const char *data;
apr_size_t len;
- alloc = serf_bucket_allocator_create(tb->pool, NULL, NULL);
+ alloc = test__create_bucket_allocator(tc, tb->pool);
pb.allocator = alloc;
agg = serf_bucket_aggregate_create(alloc);
@@ -2035,7 +2011,7 @@ static void test_http2_unframe_buckets(C
apr_status_t status;
apr_size_t read_len;
- alloc = serf_bucket_allocator_create(tb->pool, NULL, NULL);
+ alloc = test__create_bucket_allocator(tc, tb->pool);
raw = serf_bucket_simple_create(raw_frame1, sizeof(raw_frame1),
NULL, NULL, alloc);
@@ -2126,7 +2102,7 @@ static void test_http2_unpad_buckets(CuT
apr_status_t status;
apr_size_t read_len;
- alloc = serf_bucket_allocator_create(tb->pool, NULL, NULL);
+ alloc = test__create_bucket_allocator(tc, tb->pool);
raw = serf_bucket_simple_create(raw_frame, sizeof(raw_frame)-1,
NULL, NULL, alloc);
@@ -2391,7 +2367,7 @@ static void test_hpack_header_encode(CuT
char resultbuffer[1024];
apr_size_t sz;
- alloc = serf_bucket_allocator_create(tb->pool, NULL, NULL);
+ alloc = test__create_bucket_allocator(tc, tb->pool);
hpack = serf__bucket_hpack_create(NULL, alloc);
@@ -2421,7 +2397,7 @@ static void test_http2_frame_bucket_basi
serf_bucket_t *frame_out;
apr_int32_t exp_streamid = 0x01020304;
- alloc = serf_bucket_allocator_create(tb->pool, NULL, NULL);
+ alloc = test__create_bucket_allocator(tc, tb->pool);
body_in = SERF_BUCKET_SIMPLE_STRING("This is no config!", alloc);
frame_in = serf__bucket_http2_frame_create(body_in, 99, 7, &exp_streamid,
Modified: serf/trunk/test/test_serf.h
URL:
http://svn.apache.org/viewvc/serf/trunk/test/test_serf.h?rev=1712312&r1=1712311&r2=1712312&view=diff
==============================================================================
--- serf/trunk/test/test_serf.h (original)
+++ serf/trunk/test/test_serf.h Tue Nov 3 15:46:37 2015
@@ -300,6 +300,11 @@ void test__log_skt(int verbose_flag, con
log lines in parts. */
void test__log_nopref(int verbose_flag, const char *fmt, ...);
+/* Create serf_bucket_allocator() with configured unfreed callback
+ * to report unfreed memory during test execution. */
+serf_bucket_alloc_t *
+test__create_bucket_allocator(CuTest *tc, apr_pool_t *pool);
+
/* Helper to get a file relative to our source directory by looking at
* 'srcdir' env variable. */
const char * get_srcdir_file(apr_pool_t *pool, const char * file);
Modified: serf/trunk/test/test_util.c
URL:
http://svn.apache.org/viewvc/serf/trunk/test/test_util.c?rev=1712312&r1=1712311&r2=1712312&view=diff
==============================================================================
--- serf/trunk/test/test_util.c (original)
+++ serf/trunk/test/test_util.c Tue Nov 3 15:46:37 2015
@@ -728,3 +728,17 @@ void test__log_skt(int verbose_flag, con
va_end(argp);
}
}
+
+/* Implements serf_unfreed_func_t: prints unfreed memory blocks to stderr
+ * prefixed with test name. */
+static void bucket_unfreed_memory_cb(void *baton, void *block)
+{
+ CuTest *tc = baton;
+ fprintf(stderr, "%s: Unfreed block %p\n", tc->name, block);
+}
+
+serf_bucket_alloc_t *
+test__create_bucket_allocator(CuTest *tc, apr_pool_t *pool)
+{
+ return serf_bucket_allocator_create(pool, bucket_unfreed_memory_cb, tc);
+}