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); } }
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"); }