⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testbuckets.c

📁 Apache官方在今天放出产品系列2.2的最新版本2.2.11的源码包 最流行的HTTP服务器软件之一
💻 C
📖 第 1 页 / 共 2 页
字号:
                                                   ba));    ABTS_ASSERT(tc, "four buckets inserted", count_buckets(bb) == 4);        /* now split each of the buckets after byte 5 */    for (n = 0, e = APR_BRIGADE_FIRST(bb); n < 4; n++) {        ABTS_ASSERT(tc, "reached end of brigade",                     e != APR_BRIGADE_SENTINEL(bb));        ABTS_ASSERT(tc, "split bucket OK",                    apr_bucket_split(e, 5) == APR_SUCCESS);        e = APR_BUCKET_NEXT(e);        ABTS_ASSERT(tc, "split OK", e != APR_BRIGADE_SENTINEL(bb));        e = APR_BUCKET_NEXT(e);    }        ABTS_ASSERT(tc, "four buckets split into eight",                 count_buckets(bb) == 8);    for (n = 0, e = APR_BRIGADE_FIRST(bb); n < 4; n++) {        const char *data;        apr_size_t len;                apr_assert_success(tc, "read alpha from bucket",                           apr_bucket_read(e, &data, &len, APR_BLOCK_READ));        ABTS_ASSERT(tc, "read 5 bytes", len == 5);        ABTS_STR_NEQUAL(tc, "alpha", data, 5);        e = APR_BUCKET_NEXT(e);        apr_assert_success(tc, "read beta from bucket",                           apr_bucket_read(e, &data, &len, APR_BLOCK_READ));        ABTS_ASSERT(tc, "read 4 bytes", len == 4);        ABTS_STR_NEQUAL(tc, "beta", data, 5);        e = APR_BUCKET_NEXT(e);    }    /* now delete the "alpha" buckets */    for (n = 0, e = APR_BRIGADE_FIRST(bb); n < 4; n++) {        apr_bucket *f;        ABTS_ASSERT(tc, "reached end of brigade",                    e != APR_BRIGADE_SENTINEL(bb));        f = APR_BUCKET_NEXT(e);        apr_bucket_delete(e);        e = APR_BUCKET_NEXT(f);    }            ABTS_ASSERT(tc, "eight buckets reduced to four",                 count_buckets(bb) == 4);    flatten_match(tc, "flatten beta brigade", bb,                  "beta" "beta" "beta" "beta");    apr_brigade_destroy(bb);    apr_bucket_alloc_destroy(ba);}#define TIF_FNAME "testfile.txt"static void test_insertfile(abts_case *tc, void *ctx){    apr_bucket_alloc_t *ba = apr_bucket_alloc_create(p);    apr_bucket_brigade *bb;    const apr_off_t bignum = (APR_INT64_C(2) << 32) + 424242;    apr_off_t count;    apr_file_t *f;    apr_bucket *e;    ABTS_ASSERT(tc, "open test file",                apr_file_open(&f, TIF_FNAME,                              APR_FOPEN_WRITE | APR_FOPEN_TRUNCATE                            | APR_FOPEN_CREATE | APR_FOPEN_SPARSE,                              APR_OS_DEFAULT, p) == APR_SUCCESS);    if (apr_file_trunc(f, bignum)) {        apr_file_close(f);        apr_file_remove(TIF_FNAME, p);        ABTS_NOT_IMPL(tc, "Skipped: could not create large file");        return;    }        bb = apr_brigade_create(p, ba);    e = apr_brigade_insert_file(bb, f, 0, bignum, p);        ABTS_ASSERT(tc, "inserted file was not at end of brigade",                e == APR_BRIGADE_LAST(bb));    /* check that the total size of inserted buckets is equal to the     * total size of the file. */    count = 0;    for (e = APR_BRIGADE_FIRST(bb);         e != APR_BRIGADE_SENTINEL(bb);         e = APR_BUCKET_NEXT(e)) {        ABTS_ASSERT(tc, "bucket size sane", e->length != (apr_size_t)-1);        count += e->length;    }    ABTS_ASSERT(tc, "total size of buckets incorrect", count == bignum);    apr_brigade_destroy(bb);    /* Truncate the file to zero size before close() so that we don't     * actually write out the large file if we are on a non-sparse file     * system - like Mac OS X's HFS.  Otherwise, pity the poor user who     * has to wait for the 8GB file to be written to disk.     */    apr_file_trunc(f, 0);    apr_file_close(f);    apr_bucket_alloc_destroy(ba);    apr_file_remove(TIF_FNAME, p);}/* Make a test file named FNAME, and write CONTENTS to it. */static apr_file_t *make_test_file(abts_case *tc, const char *fname,                                  const char *contents){    apr_file_t *f;    ABTS_ASSERT(tc, "create test file",                apr_file_open(&f, fname,                              APR_READ|APR_WRITE|APR_TRUNCATE|APR_CREATE,                              APR_OS_DEFAULT, p) == APR_SUCCESS);        ABTS_ASSERT(tc, "write test file contents",                apr_file_puts(contents, f) == APR_SUCCESS);    return f;}static void test_manyfile(abts_case *tc, void *data){    apr_bucket_alloc_t *ba = apr_bucket_alloc_create(p);    apr_bucket_brigade *bb = apr_brigade_create(p, ba);    apr_file_t *f;    f = make_test_file(tc, "manyfile.bin",                       "world" "hello" "brave" " ,\n");    apr_brigade_insert_file(bb, f, 5, 5, p);    apr_brigade_insert_file(bb, f, 16, 1, p);    apr_brigade_insert_file(bb, f, 15, 1, p);    apr_brigade_insert_file(bb, f, 10, 5, p);    apr_brigade_insert_file(bb, f, 15, 1, p);    apr_brigade_insert_file(bb, f, 0, 5, p);    apr_brigade_insert_file(bb, f, 17, 1, p);    /* can you tell what it is yet? */    flatten_match(tc, "file seek test", bb,                  "hello, brave world\n");    apr_file_close(f);    apr_brigade_destroy(bb);    apr_bucket_alloc_destroy(ba);}/* Regression test for PR 34708, where a file bucket will keep * duplicating itself on being read() when EOF is reached * prematurely. */static void test_truncfile(abts_case *tc, void *data){    apr_bucket_alloc_t *ba = apr_bucket_alloc_create(p);    apr_bucket_brigade *bb = apr_brigade_create(p, ba);    apr_file_t *f = make_test_file(tc, "testfile.txt", "hello");    apr_bucket *e;    const char *buf;    apr_size_t len;    apr_brigade_insert_file(bb, f, 0, 5, p);    apr_file_trunc(f, 0);    e = APR_BRIGADE_FIRST(bb);    ABTS_ASSERT(tc, "single bucket in brigade",                APR_BUCKET_NEXT(e) == APR_BRIGADE_SENTINEL(bb));    apr_bucket_file_enable_mmap(e, 0);    ABTS_ASSERT(tc, "read gave APR_EOF",                apr_bucket_read(e, &buf, &len, APR_BLOCK_READ) == APR_EOF);    ABTS_ASSERT(tc, "read length 0", len == 0);        ABTS_ASSERT(tc, "still a single bucket in brigade",                APR_BUCKET_NEXT(e) == APR_BRIGADE_SENTINEL(bb));    apr_file_close(f);    apr_brigade_destroy(bb);    apr_bucket_alloc_destroy(ba);}static const char hello[] = "hello, world";static void test_partition(abts_case *tc, void *data){    apr_bucket_alloc_t *ba = apr_bucket_alloc_create(p);    apr_bucket_brigade *bb = apr_brigade_create(p, ba);    apr_bucket *e;    e = apr_bucket_immortal_create(hello, strlen(hello), ba);    APR_BRIGADE_INSERT_HEAD(bb, e);    apr_assert_success(tc, "partition brigade",                       apr_brigade_partition(bb, 5, &e));    test_bucket_content(tc, APR_BRIGADE_FIRST(bb),                        "hello", 5);    test_bucket_content(tc, APR_BRIGADE_LAST(bb),                        ", world", 7);    ABTS_ASSERT(tc, "partition returns APR_INCOMPLETE",                apr_brigade_partition(bb, 8192, &e));    ABTS_ASSERT(tc, "APR_INCOMPLETE partition returned sentinel",                e == APR_BRIGADE_SENTINEL(bb));    apr_brigade_destroy(bb);    apr_bucket_alloc_destroy(ba);}abts_suite *testbuckets(abts_suite *suite){    suite = ADD_SUITE(suite);    abts_run_test(suite, test_create, NULL);    abts_run_test(suite, test_simple, NULL);    abts_run_test(suite, test_flatten, NULL);    abts_run_test(suite, test_split, NULL);    abts_run_test(suite, test_bwrite, NULL);    abts_run_test(suite, test_splitline, NULL);    abts_run_test(suite, test_splits, NULL);    abts_run_test(suite, test_insertfile, NULL);    abts_run_test(suite, test_manyfile, NULL);    abts_run_test(suite, test_truncfile, NULL);    abts_run_test(suite, test_partition, NULL);    return suite;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -