make create_random_files() take a span instead of pointer, length parameters
This commit is contained in:
parent
b26467c04e
commit
0e49051f17
|
@ -109,11 +109,10 @@ TORRENT_TEST(no_truncate_checking)
|
||||||
std::shared_ptr<lt::torrent_info> create_multifile_torrent()
|
std::shared_ptr<lt::torrent_info> create_multifile_torrent()
|
||||||
{
|
{
|
||||||
// the two first files are exactly the size of a piece
|
// the two first files are exactly the size of a piece
|
||||||
static const int file_sizes[] = { 0x40000, 0x40000, 4300, 0, 400, 4300, 6, 4};
|
static std::array<const int, 8> const file_sizes{{ 0x40000, 0x40000, 4300, 0, 400, 4300, 6, 4}};
|
||||||
const int num_files = sizeof(file_sizes)/sizeof(file_sizes[0]);
|
|
||||||
|
|
||||||
lt::file_storage fs;
|
lt::file_storage fs;
|
||||||
create_random_files("test_torrent_dir", file_sizes, num_files, &fs);
|
create_random_files("test_torrent_dir", file_sizes, &fs);
|
||||||
lt::create_torrent t(fs, 0x40000, -1, {});
|
lt::create_torrent t(fs, 0x40000, -1, {});
|
||||||
|
|
||||||
// calculate the hash for all pieces
|
// calculate the hash for all pieces
|
||||||
|
|
|
@ -595,18 +595,18 @@ std::vector<char> generate_piece(piece_index_t const idx, int const piece_size)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
lt::file_storage make_file_storage(const int file_sizes[], int num_files
|
lt::file_storage make_file_storage(span<const int> const file_sizes
|
||||||
, int const piece_size, std::string base_name)
|
, int const piece_size, std::string base_name)
|
||||||
{
|
{
|
||||||
using namespace lt;
|
using namespace lt;
|
||||||
file_storage fs;
|
file_storage fs;
|
||||||
for (int i = 0; i != num_files; ++i)
|
for (std::size_t i = 0; i != file_sizes.size(); ++i)
|
||||||
{
|
{
|
||||||
char filename[200];
|
char filename[200];
|
||||||
std::snprintf(filename, sizeof(filename), "test%d", i);
|
std::snprintf(filename, sizeof(filename), "test%d", int(i));
|
||||||
char dirname[200];
|
char dirname[200];
|
||||||
std::snprintf(dirname, sizeof(dirname), "%s%d", base_name.c_str()
|
std::snprintf(dirname, sizeof(dirname), "%s%d", base_name.c_str()
|
||||||
, i / 5);
|
, int(i) / 5);
|
||||||
std::string full_path = combine_path(dirname, filename);
|
std::string full_path = combine_path(dirname, filename);
|
||||||
|
|
||||||
fs.add_file(full_path, file_sizes[i]);
|
fs.add_file(full_path, file_sizes[i]);
|
||||||
|
@ -618,11 +618,11 @@ lt::file_storage make_file_storage(const int file_sizes[], int num_files
|
||||||
return fs;
|
return fs;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<lt::torrent_info> make_torrent(const int file_sizes[]
|
std::shared_ptr<lt::torrent_info> make_torrent(span<const int> const file_sizes
|
||||||
, int const num_files, int const piece_size)
|
, int const piece_size)
|
||||||
{
|
{
|
||||||
using namespace lt;
|
using namespace lt;
|
||||||
file_storage fs = make_file_storage(file_sizes, num_files, piece_size);
|
file_storage fs = make_file_storage(file_sizes, piece_size);
|
||||||
|
|
||||||
lt::create_torrent ct(fs, piece_size, 0x4000
|
lt::create_torrent ct(fs, piece_size, 0x4000
|
||||||
, lt::create_torrent::optimize_alignment);
|
, lt::create_torrent::optimize_alignment);
|
||||||
|
@ -638,18 +638,18 @@ std::shared_ptr<lt::torrent_info> make_torrent(const int file_sizes[]
|
||||||
return std::make_shared<torrent_info>(buf, from_span);
|
return std::make_shared<torrent_info>(buf, from_span);
|
||||||
}
|
}
|
||||||
|
|
||||||
void create_random_files(std::string const& path, const int file_sizes[], int num_files
|
void create_random_files(std::string const& path, span<const int> file_sizes
|
||||||
, file_storage* fs)
|
, file_storage* fs)
|
||||||
{
|
{
|
||||||
error_code ec;
|
error_code ec;
|
||||||
aux::vector<char> random_data(300000);
|
aux::vector<char> random_data(300000);
|
||||||
for (int i = 0; i != num_files; ++i)
|
for (std::size_t i = 0; i != file_sizes.size(); ++i)
|
||||||
{
|
{
|
||||||
std::generate(random_data.begin(), random_data.end(), random_byte);
|
std::generate(random_data.begin(), random_data.end(), random_byte);
|
||||||
char filename[200];
|
char filename[200];
|
||||||
std::snprintf(filename, sizeof(filename), "test%d", i);
|
std::snprintf(filename, sizeof(filename), "test%d", int(i));
|
||||||
char dirname[200];
|
char dirname[200];
|
||||||
std::snprintf(dirname, sizeof(dirname), "test_dir%d", i / 5);
|
std::snprintf(dirname, sizeof(dirname), "test_dir%d", int(i) / 5);
|
||||||
|
|
||||||
std::string full_path = combine_path(path, dirname);
|
std::string full_path = combine_path(path, dirname);
|
||||||
lt::create_directories(full_path, ec);
|
lt::create_directories(full_path, ec);
|
||||||
|
@ -668,7 +668,7 @@ void create_random_files(std::string const& path, const int file_sizes[], int nu
|
||||||
while (to_write > 0)
|
while (to_write > 0)
|
||||||
{
|
{
|
||||||
int const s = std::min(to_write, static_cast<int>(random_data.size()));
|
int const s = std::min(to_write, static_cast<int>(random_data.size()));
|
||||||
iovec_t b = { random_data.data(), size_t(s)};
|
iovec_t const b = { random_data.data(), size_t(s)};
|
||||||
f.writev(offset, b, ec);
|
f.writev(offset, b, ec);
|
||||||
if (ec) std::printf("failed to write file \"%s\": (%d) %s\n"
|
if (ec) std::printf("failed to write file \"%s\": (%d) %s\n"
|
||||||
, full_path.c_str(), ec.value(), ec.message().c_str());
|
, full_path.c_str(), ec.value(), ec.message().c_str());
|
||||||
|
|
|
@ -83,12 +83,12 @@ EXPORT void wait_for_listen(lt::session& ses, char const* name);
|
||||||
EXPORT void wait_for_downloading(lt::session& ses, char const* name);
|
EXPORT void wait_for_downloading(lt::session& ses, char const* name);
|
||||||
|
|
||||||
EXPORT std::vector<char> generate_piece(lt::piece_index_t idx, int piece_size = 0x4000);
|
EXPORT std::vector<char> generate_piece(lt::piece_index_t idx, int piece_size = 0x4000);
|
||||||
EXPORT lt::file_storage make_file_storage(const int file_sizes[], int num_files
|
EXPORT lt::file_storage make_file_storage(lt::span<const int> file_sizes
|
||||||
, int const piece_size, std::string base_name = "test_dir-");
|
, int const piece_size, std::string base_name = "test_dir-");
|
||||||
EXPORT std::shared_ptr<lt::torrent_info> make_torrent(const int file_sizes[]
|
EXPORT std::shared_ptr<lt::torrent_info> make_torrent(lt::span<const int> file_sizes
|
||||||
, int num_files, int piece_size);
|
, int piece_size);
|
||||||
EXPORT void create_random_files(std::string const& path, const int file_sizes[]
|
EXPORT void create_random_files(std::string const& path, lt::span<const int> file_sizes
|
||||||
, int num_files, libtorrent::file_storage* fs = nullptr);
|
, libtorrent::file_storage* fs = nullptr);
|
||||||
|
|
||||||
EXPORT std::shared_ptr<lt::torrent_info> create_torrent(std::ostream* file = nullptr
|
EXPORT std::shared_ptr<lt::torrent_info> create_torrent(std::ostream* file = nullptr
|
||||||
, char const* name = "temporary", int piece_size = 16 * 1024, int num_pieces = 13
|
, char const* name = "temporary", int piece_size = 16 * 1024, int num_pieces = 13
|
||||||
|
|
|
@ -95,12 +95,11 @@ void test_checking(int flags)
|
||||||
std::srand(10);
|
std::srand(10);
|
||||||
int piece_size = 0x4000;
|
int piece_size = 0x4000;
|
||||||
|
|
||||||
const int file_sizes[] =
|
static std::array<const int, 46> const file_sizes
|
||||||
{ 0, 5, 16 - 5, 16000, 17, 10, 8000, 8000, 1,1,1,1,1,100,1,1,1,1,100,1,1,1,1,1,1
|
{{ 0, 5, 16 - 5, 16000, 17, 10, 8000, 8000, 1,1,1,1,1,100,1,1,1,1,100,1,1,1,1,1,1
|
||||||
,1,1,1,1,1,1,13,65000,34,75,2,30,400,500,23000,900,43000,400,4300,6, 4 };
|
,1,1,1,1,1,1,13,65000,34,75,2,30,400,500,23000,900,43000,400,4300,6, 4 }};
|
||||||
const int num_files = sizeof(file_sizes) / sizeof(file_sizes[0]);
|
|
||||||
|
|
||||||
create_random_files("test_torrent_dir", file_sizes, num_files, &fs);
|
create_random_files("test_torrent_dir", file_sizes, &fs);
|
||||||
|
|
||||||
lt::create_torrent t(fs, piece_size, 0x4000
|
lt::create_torrent t(fs, piece_size, 0x4000
|
||||||
, lt::create_torrent::optimize_alignment);
|
, lt::create_torrent::optimize_alignment);
|
||||||
|
@ -120,12 +119,12 @@ void test_checking(int flags)
|
||||||
// truncate every file in half
|
// truncate every file in half
|
||||||
if (flags & incomplete_files)
|
if (flags & incomplete_files)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < num_files; ++i)
|
for (std::size_t i = 0; i < file_sizes.size(); ++i)
|
||||||
{
|
{
|
||||||
char name[1024];
|
char name[1024];
|
||||||
std::snprintf(name, sizeof(name), "test%d", i);
|
std::snprintf(name, sizeof(name), "test%d", int(i));
|
||||||
char dirname[200];
|
char dirname[200];
|
||||||
std::snprintf(dirname, sizeof(dirname), "test_dir%d", i / 5);
|
std::snprintf(dirname, sizeof(dirname), "test_dir%d", int(i) / 5);
|
||||||
std::string path = combine_path("test_torrent_dir", dirname);
|
std::string path = combine_path("test_torrent_dir", dirname);
|
||||||
path = combine_path(path, name);
|
path = combine_path(path, name);
|
||||||
|
|
||||||
|
@ -144,22 +143,22 @@ void test_checking(int flags)
|
||||||
std::printf("corrupt file test. overwriting files\n");
|
std::printf("corrupt file test. overwriting files\n");
|
||||||
// increase the size of some files. When they're read only that forces
|
// increase the size of some files. When they're read only that forces
|
||||||
// the checker to open them in write-mode to truncate them
|
// the checker to open them in write-mode to truncate them
|
||||||
static const int file_sizes2[] =
|
static std::array<const int, 46> const file_sizes2
|
||||||
{ 0, 5, 16 - 5, 16001, 30, 10, 8000, 8000, 1,1,1,1,1,100,1,1,1,1,100,1,1,1,1,1,1
|
{{ 0, 5, 16 - 5, 16001, 30, 10, 8000, 8000, 1,1,1,1,1,100,1,1,1,1,100,1,1,1,1,1,1
|
||||||
,1,1,1,1,1,1,13,65000,34,75,2,30,400,500,23000,900,43000,400,4300,6, 4};
|
,1,1,1,1,1,1,13,65000,34,75,2,30,400,500,23000,900,43000,400,4300,6, 4}};
|
||||||
create_random_files("test_torrent_dir", file_sizes2, num_files);
|
create_random_files("test_torrent_dir", file_sizes2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// make the files read only
|
// make the files read only
|
||||||
if (flags & read_only_files)
|
if (flags & read_only_files)
|
||||||
{
|
{
|
||||||
std::printf("making files read-only\n");
|
std::printf("making files read-only\n");
|
||||||
for (int i = 0; i < num_files; ++i)
|
for (std::size_t i = 0; i < file_sizes.size(); ++i)
|
||||||
{
|
{
|
||||||
char name[1024];
|
char name[1024];
|
||||||
std::snprintf(name, sizeof(name), "test%d", i);
|
std::snprintf(name, sizeof(name), "test%d", int(i));
|
||||||
char dirname[200];
|
char dirname[200];
|
||||||
std::snprintf(dirname, sizeof(dirname), "test_dir%d", i / 5);
|
std::snprintf(dirname, sizeof(dirname), "test_dir%d", int(i) / 5);
|
||||||
|
|
||||||
std::string path = combine_path("test_torrent_dir", dirname);
|
std::string path = combine_path("test_torrent_dir", dirname);
|
||||||
path = combine_path(path, name);
|
path = combine_path(path, name);
|
||||||
|
@ -251,12 +250,12 @@ void test_checking(int flags)
|
||||||
// make the files writable again
|
// make the files writable again
|
||||||
if (flags & read_only_files)
|
if (flags & read_only_files)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < num_files; ++i)
|
for (std::size_t i = 0; i < file_sizes.size(); ++i)
|
||||||
{
|
{
|
||||||
char name[1024];
|
char name[1024];
|
||||||
std::snprintf(name, sizeof(name), "test%d", i);
|
std::snprintf(name, sizeof(name), "test%d", int(i));
|
||||||
char dirname[200];
|
char dirname[200];
|
||||||
std::snprintf(dirname, sizeof(dirname), "test_dir%d", i / 5);
|
std::snprintf(dirname, sizeof(dirname), "test_dir%d", int(i) / 5);
|
||||||
|
|
||||||
std::string path = combine_path("test_torrent_dir", dirname);
|
std::string path = combine_path("test_torrent_dir", dirname);
|
||||||
path = combine_path(path, name);
|
path = combine_path(path, name);
|
||||||
|
@ -315,11 +314,10 @@ TORRENT_TEST(discrete_checking)
|
||||||
|
|
||||||
int const megabyte = 0x100000;
|
int const megabyte = 0x100000;
|
||||||
int const piece_size = 2 * megabyte;
|
int const piece_size = 2 * megabyte;
|
||||||
int const file_sizes[] = { 9 * megabyte, 3 * megabyte };
|
static std::array<int const, 2> const file_sizes{{ 9 * megabyte, 3 * megabyte }};
|
||||||
int const num_files = sizeof(file_sizes) / sizeof(file_sizes[0]);
|
|
||||||
|
|
||||||
file_storage fs;
|
file_storage fs;
|
||||||
create_random_files("test_torrent_dir", file_sizes, num_files, &fs);
|
create_random_files("test_torrent_dir", file_sizes, &fs);
|
||||||
TEST_EQUAL(fs.num_files(), 2);
|
TEST_EQUAL(fs.num_files(), 2);
|
||||||
|
|
||||||
lt::create_torrent t(fs, piece_size, 1, lt::create_torrent::optimize_alignment);
|
lt::create_torrent t(fs, piece_size, 1, lt::create_torrent::optimize_alignment);
|
||||||
|
|
|
@ -71,10 +71,9 @@ void test_read_piece(int flags)
|
||||||
std::srand(10);
|
std::srand(10);
|
||||||
int piece_size = 0x4000;
|
int piece_size = 0x4000;
|
||||||
|
|
||||||
static const int file_sizes[] = { 100000, 10000 };
|
static std::array<const int, 2> const file_sizes{{ 100000, 10000 }};
|
||||||
|
|
||||||
create_random_files(combine_path("tmp1_read_piece", "test_torrent")
|
create_random_files(combine_path("tmp1_read_piece", "test_torrent"), file_sizes);
|
||||||
, file_sizes, 2);
|
|
||||||
|
|
||||||
add_files(fs, combine_path("tmp1_read_piece", "test_torrent"));
|
add_files(fs, combine_path("tmp1_read_piece", "test_torrent"));
|
||||||
lt::create_torrent t(fs, piece_size, 0x4000);
|
lt::create_torrent t(fs, piece_size, 0x4000);
|
||||||
|
|
|
@ -63,16 +63,14 @@ void test_remap_files(storage_mode_t storage_mode = storage_mode_sparse)
|
||||||
|
|
||||||
// create a torrent with 2 files, remap them into 3 files and make sure
|
// create a torrent with 2 files, remap them into 3 files and make sure
|
||||||
// the file priorities don't break things
|
// the file priorities don't break things
|
||||||
static const int file_sizes[] = {100000, 100000};
|
static std::array<const int, 2> const file_sizes{{100000, 100000}};
|
||||||
const int num_files = 2;
|
int const piece_size = 0x8000;
|
||||||
const int piece_size = 0x8000;
|
auto t = make_torrent(file_sizes, piece_size);
|
||||||
auto t = make_torrent(file_sizes, num_files, piece_size);
|
|
||||||
|
|
||||||
static const int remap_file_sizes[] = {10000, 10000, int(t->total_size() - 20000)};
|
static std::array<const int, 3> const remap_file_sizes
|
||||||
int const num_new_files = 3;
|
{{10000, 10000, int(t->total_size() - 20000)}};
|
||||||
|
|
||||||
file_storage fs = make_file_storage(remap_file_sizes, num_new_files
|
file_storage fs = make_file_storage(remap_file_sizes, piece_size, "multifile-");
|
||||||
, piece_size, "multifile-");
|
|
||||||
|
|
||||||
t->remap_files(fs);
|
t->remap_files(fs);
|
||||||
|
|
||||||
|
@ -162,7 +160,7 @@ void test_remap_files(storage_mode_t storage_mode = storage_mode_sparse)
|
||||||
// just because we can read them back throught libtorrent, doesn't mean the
|
// just because we can read them back throught libtorrent, doesn't mean the
|
||||||
// files have hit disk yet (because of the cache). Retry a few times to try
|
// files have hit disk yet (because of the cache). Retry a few times to try
|
||||||
// to pick up the files
|
// to pick up the files
|
||||||
for (file_index_t i(0); i < file_index_t(num_new_files); ++i)
|
for (file_index_t i(0); i < file_index_t(int(remap_file_sizes.size())); ++i)
|
||||||
{
|
{
|
||||||
std::string name = fs.file_path(i);
|
std::string name = fs.file_path(i);
|
||||||
for (int j = 0; j < 10 && !exists(name); ++j)
|
for (int j = 0; j < 10 && !exists(name); ++j)
|
||||||
|
|
Loading…
Reference in New Issue