Пример #1
0
void run_can_download(DownloadFlowController *flow_controller,
                      apr_sockaddr_t *sockaddr)
{
    show_test_name("can_download");

    for (apr_size_t i = 0; i < DLD_MAX_SESSION_COUNT_PER_IP; i++) {
        flow_controller->add_session(sockaddr);
    }
    if (flow_controller->add_session(sockaddr)) {
        THROW(MESSAGE_BUG_FOUND);
    }
    flow_controller->remove_session(sockaddr);
    if (!flow_controller->add_session(sockaddr)) {
        THROW(MESSAGE_BUG_FOUND);
    }
    if (flow_controller->add_session(sockaddr)) {
        THROW(MESSAGE_BUG_FOUND);
    }
}
Пример #2
0
void run_copy(apr_pool_t *pool,
              const char *from_file_path, const char *to_file_path)
{
    volatile double start_time;
    volatile double end_time;
    apr_mmap_t *from_file_map;
    const char *from_file_data;
    apr_size_t write_size;
    apr_size_t remain_size;

    show_test_name("copy");

    File from_file(pool, from_file_path);
    from_file.open(APR_READ|APR_BINARY);
    from_file_map = from_file.mmap();

    File to_file(pool, to_file_path);
    to_file.open(APR_CREATE|APR_TRUNCATE|APR_READ|APR_WRITE|APR_BINARY);
    MmapFileWriter to_file_writer(pool, to_file.get_handle());

    remain_size = static_cast<apr_size_t>(from_file.get_size()); // 4G の壁
    from_file_data = AS_CONST_CHAR(from_file_map->mm);
    start_time = get_usage_sec();
    while (remain_size > 0) {
        write_size = (remain_size > BUFFER_SIZE) ? BUFFER_SIZE : remain_size;

        to_file_writer.write(from_file_data, write_size);

        from_file_data += write_size;
        remain_size -= write_size;
    }
    to_file_writer.close();
    end_time = get_usage_sec();

    if (diff(pool, from_file_path, to_file_path) != 0) {
        THROW(MESSAGE_FILE_DIFFER);
    }

    show_item("copy", (end_time - start_time)*1000, " msec");
}