mirror of
https://github.com/transmission/transmission.git
synced 2025-12-20 02:18:42 +00:00
test: add tr_torrent_metainfo.infoDictSize() tests (#2535)
This commit is contained in:
@@ -24,7 +24,7 @@ size_t tr_announce_list::set(char const* const* announce_urls, tr_tracker_tier_t
|
|||||||
|
|
||||||
for (size_t i = 0; i < n; ++i)
|
for (size_t i = 0; i < n; ++i)
|
||||||
{
|
{
|
||||||
add(tiers[i], announce_urls[i]);
|
add(announce_urls[i], tiers[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return size();
|
return size();
|
||||||
@@ -70,10 +70,10 @@ bool tr_announce_list::replace(tr_tracker_id_t id, std::string_view announce_url
|
|||||||
|
|
||||||
auto const tier = it->tier;
|
auto const tier = it->tier;
|
||||||
trackers_.erase(it);
|
trackers_.erase(it);
|
||||||
return add(tier, announce_url_sv);
|
return add(announce_url_sv, tier);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tr_announce_list::add(tr_tracker_tier_t tier, std::string_view announce_url_sv)
|
bool tr_announce_list::add(std::string_view announce_url_sv, tr_tracker_tier_t tier)
|
||||||
{
|
{
|
||||||
auto const announce = tr_urlParseTracker(announce_url_sv);
|
auto const announce = tr_urlParseTracker(announce_url_sv);
|
||||||
if (!announce || !canAdd(*announce))
|
if (!announce || !canAdd(*announce))
|
||||||
|
|||||||
@@ -92,7 +92,12 @@ public:
|
|||||||
std::set<tr_tracker_tier_t> tiers() const;
|
std::set<tr_tracker_tier_t> tiers() const;
|
||||||
tr_tracker_tier_t nextTier() const;
|
tr_tracker_tier_t nextTier() const;
|
||||||
|
|
||||||
bool add(tr_tracker_tier_t tier, std::string_view announce_url_sv);
|
bool add(std::string_view announce_url_sv)
|
||||||
|
{
|
||||||
|
return add(announce_url_sv, this->nextTier());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool add(std::string_view announce_url_sv, tr_tracker_tier_t tier);
|
||||||
bool remove(std::string_view announce_url);
|
bool remove(std::string_view announce_url);
|
||||||
bool remove(tr_tracker_id_t id);
|
bool remove(tr_tracker_id_t id);
|
||||||
bool replace(tr_tracker_id_t id, std::string_view announce_url_sv);
|
bool replace(tr_tracker_id_t id, std::string_view announce_url_sv);
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ bool tr_magnet_metainfo::parseMagnet(std::string_view magnet_link, tr_error** er
|
|||||||
else if (key == "tr"sv || tr_strvStartsWith(key, "tr."sv))
|
else if (key == "tr"sv || tr_strvStartsWith(key, "tr."sv))
|
||||||
{
|
{
|
||||||
// "tr." explanation @ https://trac.transmissionbt.com/ticket/3341
|
// "tr." explanation @ https://trac.transmissionbt.com/ticket/3341
|
||||||
this->announce_list_.add(this->announce_list_.nextTier(), tr_urlPercentDecode(value));
|
this->announce_list_.add(tr_urlPercentDecode(value));
|
||||||
}
|
}
|
||||||
else if (key == "ws"sv)
|
else if (key == "ws"sv)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1053,7 +1053,7 @@ static char const* addTrackerUrls(tr_torrent* tor, tr_variant* urls)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
tor->announceList().add(tor->announceList().nextTier(), announce);
|
tor->announceList().add(announce);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tor->trackerCount() == old_size)
|
if (tor->trackerCount() == old_size)
|
||||||
|
|||||||
@@ -380,7 +380,7 @@ std::string_view tr_torrent_metainfo::parseAnnounce(tr_torrent_metainfo& setme,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
setme.announce_list_.add(i, url);
|
setme.announce_list_.add(url, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -388,7 +388,7 @@ std::string_view tr_torrent_metainfo::parseAnnounce(tr_torrent_metainfo& setme,
|
|||||||
// single 'announce' url
|
// single 'announce' url
|
||||||
if (std::empty(setme.announce_list_) && tr_variantDictFindStrView(meta, TR_KEY_announce, &url))
|
if (std::empty(setme.announce_list_) && tr_variantDictFindStrView(meta, TR_KEY_announce, &url))
|
||||||
{
|
{
|
||||||
setme.announce_list_.add(0, url);
|
setme.announce_list_.add(url, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
|
|||||||
@@ -142,6 +142,11 @@ public:
|
|||||||
return info_dict_offset_;
|
return info_dict_offset_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] auto piecesOffset() const
|
||||||
|
{
|
||||||
|
return pieces_offset_;
|
||||||
|
}
|
||||||
|
|
||||||
std::string torrentFile(std::string_view torrent_dir) const
|
std::string torrentFile(std::string_view torrent_dir) const
|
||||||
{
|
{
|
||||||
return makeFilename(torrent_dir, name(), infoHashString(), BasenameFormat::Hash, ".torrent");
|
return makeFilename(torrent_dir, name(), infoHashString(), BasenameFormat::Hash, ".torrent");
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ TEST_F(AnnounceListTest, canAdd)
|
|||||||
auto constexpr Announce = "https://example.org/announce"sv;
|
auto constexpr Announce = "https://example.org/announce"sv;
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
EXPECT_EQ(1, announce_list.add(Tier, Announce));
|
EXPECT_EQ(1, announce_list.add(Announce, Tier));
|
||||||
auto const tracker = announce_list.at(0);
|
auto const tracker = announce_list.at(0);
|
||||||
EXPECT_EQ(Announce, tracker.announce.full);
|
EXPECT_EQ(Announce, tracker.announce.full);
|
||||||
EXPECT_EQ("https://example.org/scrape"sv, tracker.scrape.full);
|
EXPECT_EQ("https://example.org/scrape"sv, tracker.scrape.full);
|
||||||
@@ -46,9 +46,9 @@ TEST_F(AnnounceListTest, groupsSiblingsIntoSameTier)
|
|||||||
auto constexpr Announce3 = "udp://example.org:999/announce"sv;
|
auto constexpr Announce3 = "udp://example.org:999/announce"sv;
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
EXPECT_TRUE(announce_list.add(Tier1, Announce1));
|
EXPECT_TRUE(announce_list.add(Announce1, Tier1));
|
||||||
EXPECT_TRUE(announce_list.add(Tier2, Announce2));
|
EXPECT_TRUE(announce_list.add(Announce2, Tier2));
|
||||||
EXPECT_TRUE(announce_list.add(Tier3, Announce3));
|
EXPECT_TRUE(announce_list.add(Announce3, Tier3));
|
||||||
|
|
||||||
EXPECT_EQ(3, std::size(announce_list));
|
EXPECT_EQ(3, std::size(announce_list));
|
||||||
EXPECT_EQ(Tier1, announce_list.at(0).tier);
|
EXPECT_EQ(Tier1, announce_list.at(0).tier);
|
||||||
@@ -68,7 +68,7 @@ TEST_F(AnnounceListTest, canAddWithoutScrape)
|
|||||||
auto constexpr Announce = "https://example.org/foo"sv;
|
auto constexpr Announce = "https://example.org/foo"sv;
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
EXPECT_TRUE(announce_list.add(Tier, Announce));
|
EXPECT_TRUE(announce_list.add(Announce, Tier));
|
||||||
auto const tracker = announce_list.at(0);
|
auto const tracker = announce_list.at(0);
|
||||||
EXPECT_EQ(Announce, tracker.announce.full);
|
EXPECT_EQ(Announce, tracker.announce.full);
|
||||||
EXPECT_TRUE(std::empty(tracker.scrape_str));
|
EXPECT_TRUE(std::empty(tracker.scrape_str));
|
||||||
@@ -81,7 +81,7 @@ TEST_F(AnnounceListTest, canAddUdp)
|
|||||||
auto constexpr Announce = "udp://example.org/"sv;
|
auto constexpr Announce = "udp://example.org/"sv;
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
EXPECT_TRUE(announce_list.add(Tier, Announce));
|
EXPECT_TRUE(announce_list.add(Announce, Tier));
|
||||||
auto const tracker = announce_list.at(0);
|
auto const tracker = announce_list.at(0);
|
||||||
EXPECT_EQ(Announce, tracker.announce.full);
|
EXPECT_EQ(Announce, tracker.announce.full);
|
||||||
EXPECT_EQ("udp://example.org/"sv, tracker.scrape.full);
|
EXPECT_EQ("udp://example.org/"sv, tracker.scrape.full);
|
||||||
@@ -94,13 +94,13 @@ TEST_F(AnnounceListTest, canNotAddDuplicateAnnounce)
|
|||||||
auto constexpr Announce = "https://example.org/announce"sv;
|
auto constexpr Announce = "https://example.org/announce"sv;
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
EXPECT_TRUE(announce_list.add(Tier, Announce));
|
EXPECT_TRUE(announce_list.add(Announce, Tier));
|
||||||
EXPECT_EQ(1, announce_list.size());
|
EXPECT_EQ(1, announce_list.size());
|
||||||
EXPECT_FALSE(announce_list.add(Tier, Announce));
|
EXPECT_FALSE(announce_list.add(Announce, Tier));
|
||||||
EXPECT_EQ(1, announce_list.size());
|
EXPECT_EQ(1, announce_list.size());
|
||||||
|
|
||||||
auto constexpr Announce2 = "https://example.org:443/announce"sv;
|
auto constexpr Announce2 = "https://example.org:443/announce"sv;
|
||||||
EXPECT_FALSE(announce_list.add(Tier, Announce2));
|
EXPECT_FALSE(announce_list.add(Announce2, Tier));
|
||||||
EXPECT_EQ(1, announce_list.size());
|
EXPECT_EQ(1, announce_list.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ TEST_F(AnnounceListTest, canNotAddInvalidUrl)
|
|||||||
auto constexpr Announce = "telnet://example.org/announce"sv;
|
auto constexpr Announce = "telnet://example.org/announce"sv;
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
EXPECT_FALSE(announce_list.add(Tier, Announce));
|
EXPECT_FALSE(announce_list.add(Announce, Tier));
|
||||||
EXPECT_EQ(0, announce_list.size());
|
EXPECT_EQ(0, announce_list.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,7 +212,7 @@ TEST_F(AnnounceListTest, canRemoveById)
|
|||||||
auto constexpr Tier = tr_tracker_tier_t{ 1 };
|
auto constexpr Tier = tr_tracker_tier_t{ 1 };
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
announce_list.add(Tier, Announce);
|
announce_list.add(Announce, Tier);
|
||||||
EXPECT_EQ(1, std::size(announce_list));
|
EXPECT_EQ(1, std::size(announce_list));
|
||||||
auto const id = announce_list.at(0).id;
|
auto const id = announce_list.at(0).id;
|
||||||
|
|
||||||
@@ -226,7 +226,7 @@ TEST_F(AnnounceListTest, canNotRemoveByInvalidId)
|
|||||||
auto constexpr Tier = tr_tracker_tier_t{ 1 };
|
auto constexpr Tier = tr_tracker_tier_t{ 1 };
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
announce_list.add(Tier, Announce);
|
announce_list.add(Announce, Tier);
|
||||||
EXPECT_EQ(1, std::size(announce_list));
|
EXPECT_EQ(1, std::size(announce_list));
|
||||||
auto const id = announce_list.at(0).id;
|
auto const id = announce_list.at(0).id;
|
||||||
|
|
||||||
@@ -241,7 +241,7 @@ TEST_F(AnnounceListTest, canRemoveByAnnounce)
|
|||||||
auto constexpr Tier = tr_tracker_tier_t{ 1 };
|
auto constexpr Tier = tr_tracker_tier_t{ 1 };
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
announce_list.add(Tier, Announce);
|
announce_list.add(Announce, Tier);
|
||||||
EXPECT_EQ(1, std::size(announce_list));
|
EXPECT_EQ(1, std::size(announce_list));
|
||||||
|
|
||||||
EXPECT_TRUE(announce_list.remove(Announce));
|
EXPECT_TRUE(announce_list.remove(Announce));
|
||||||
@@ -254,7 +254,7 @@ TEST_F(AnnounceListTest, canNotRemoveByInvalidAnnounce)
|
|||||||
auto constexpr Tier = tr_tracker_tier_t{ 1 };
|
auto constexpr Tier = tr_tracker_tier_t{ 1 };
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
announce_list.add(Tier, Announce);
|
announce_list.add(Announce, Tier);
|
||||||
EXPECT_EQ(1, std::size(announce_list));
|
EXPECT_EQ(1, std::size(announce_list));
|
||||||
|
|
||||||
EXPECT_FALSE(announce_list.remove("https://www.not-example.com/announce"sv));
|
EXPECT_FALSE(announce_list.remove("https://www.not-example.com/announce"sv));
|
||||||
@@ -268,7 +268,7 @@ TEST_F(AnnounceListTest, canReplace)
|
|||||||
auto constexpr Announce2 = "https://www.example.com/2/announce"sv;
|
auto constexpr Announce2 = "https://www.example.com/2/announce"sv;
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
EXPECT_TRUE(announce_list.add(Tier, Announce1));
|
EXPECT_TRUE(announce_list.add(Announce1, Tier));
|
||||||
EXPECT_TRUE(announce_list.replace(announce_list.at(0).id, Announce2));
|
EXPECT_TRUE(announce_list.replace(announce_list.at(0).id, Announce2));
|
||||||
EXPECT_EQ(Announce2, announce_list.at(0).announce.full);
|
EXPECT_EQ(Announce2, announce_list.at(0).announce.full);
|
||||||
}
|
}
|
||||||
@@ -280,7 +280,7 @@ TEST_F(AnnounceListTest, canNotReplaceInvalidId)
|
|||||||
auto constexpr Announce2 = "https://www.example.com/2/announce"sv;
|
auto constexpr Announce2 = "https://www.example.com/2/announce"sv;
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
EXPECT_TRUE(announce_list.add(Tier, Announce1));
|
EXPECT_TRUE(announce_list.add(Announce1, Tier));
|
||||||
EXPECT_FALSE(announce_list.replace(announce_list.at(0).id + 1, Announce2));
|
EXPECT_FALSE(announce_list.replace(announce_list.at(0).id + 1, Announce2));
|
||||||
EXPECT_EQ(Announce1, announce_list.at(0).announce.full);
|
EXPECT_EQ(Announce1, announce_list.at(0).announce.full);
|
||||||
}
|
}
|
||||||
@@ -292,7 +292,7 @@ TEST_F(AnnounceListTest, canNotReplaceWithInvalidAnnounce)
|
|||||||
auto constexpr Announce2 = "telnet://www.example.com/2/announce"sv;
|
auto constexpr Announce2 = "telnet://www.example.com/2/announce"sv;
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
EXPECT_TRUE(announce_list.add(Tier, Announce1));
|
EXPECT_TRUE(announce_list.add(Announce1, Tier));
|
||||||
EXPECT_FALSE(announce_list.replace(announce_list.at(0).id, Announce2));
|
EXPECT_FALSE(announce_list.replace(announce_list.at(0).id, Announce2));
|
||||||
EXPECT_EQ(Announce1, announce_list.at(0).announce.full);
|
EXPECT_EQ(Announce1, announce_list.at(0).announce.full);
|
||||||
}
|
}
|
||||||
@@ -303,7 +303,7 @@ TEST_F(AnnounceListTest, canNotReplaceWithDuplicate)
|
|||||||
auto constexpr Announce = "https://www.example.com/announce"sv;
|
auto constexpr Announce = "https://www.example.com/announce"sv;
|
||||||
|
|
||||||
auto announce_list = tr_announce_list{};
|
auto announce_list = tr_announce_list{};
|
||||||
EXPECT_TRUE(announce_list.add(Tier, Announce));
|
EXPECT_TRUE(announce_list.add(Announce, Tier));
|
||||||
EXPECT_FALSE(announce_list.replace(announce_list.at(0).id, Announce));
|
EXPECT_FALSE(announce_list.replace(announce_list.at(0).id, Announce));
|
||||||
EXPECT_EQ(Announce, announce_list.at(0).announce.full);
|
EXPECT_EQ(Announce, announce_list.at(0).announce.full);
|
||||||
}
|
}
|
||||||
@@ -350,9 +350,9 @@ TEST_F(AnnounceListTest, save)
|
|||||||
|
|
||||||
// make an announce_list for it
|
// make an announce_list for it
|
||||||
auto announce_list = tr_announce_list();
|
auto announce_list = tr_announce_list();
|
||||||
EXPECT_TRUE(announce_list.add(Tiers[0], Urls[0]));
|
EXPECT_TRUE(announce_list.add(Urls[0], Tiers[0]));
|
||||||
EXPECT_TRUE(announce_list.add(Tiers[1], Urls[1]));
|
EXPECT_TRUE(announce_list.add(Urls[1], Tiers[1]));
|
||||||
EXPECT_TRUE(announce_list.add(Tiers[2], Urls[2]));
|
EXPECT_TRUE(announce_list.add(Urls[2], Tiers[2]));
|
||||||
|
|
||||||
// try saving to a nonexistent .torrent file
|
// try saving to a nonexistent .torrent file
|
||||||
EXPECT_FALSE(announce_list.save("/this/path/does/not/exist", &error));
|
EXPECT_FALSE(announce_list.save("/this/path/does/not/exist", &error));
|
||||||
|
|||||||
@@ -76,9 +76,11 @@ protected:
|
|||||||
EXPECT_EQ(payloadSize, metainfo.totalSize());
|
EXPECT_EQ(payloadSize, metainfo.totalSize());
|
||||||
EXPECT_EQ(makeString(tr_sys_path_basename(input_file.data(), nullptr)), metainfo.name());
|
EXPECT_EQ(makeString(tr_sys_path_basename(input_file.data(), nullptr)), metainfo.name());
|
||||||
EXPECT_EQ(comment, metainfo.comment());
|
EXPECT_EQ(comment, metainfo.comment());
|
||||||
EXPECT_EQ(tr_file_index_t{ 1 }, metainfo.fileCount());
|
|
||||||
EXPECT_EQ(isPrivate, metainfo.isPrivate());
|
EXPECT_EQ(isPrivate, metainfo.isPrivate());
|
||||||
EXPECT_EQ(size_t(trackerCount), std::size(metainfo.announceList()));
|
EXPECT_EQ(size_t(trackerCount), std::size(metainfo.announceList()));
|
||||||
|
EXPECT_EQ(tr_file_index_t{ 1 }, metainfo.fileCount());
|
||||||
|
EXPECT_EQ(makeString(tr_sys_path_basename(input_file.data(), nullptr)), metainfo.fileSubpath(0));
|
||||||
|
EXPECT_EQ(payloadSize, metainfo.fileSize(0));
|
||||||
|
|
||||||
// cleanup
|
// cleanup
|
||||||
tr_metaInfoBuilderFree(builder);
|
tr_metaInfoBuilderFree(builder);
|
||||||
|
|||||||
@@ -149,6 +149,11 @@ TEST_F(TorrentMetainfoTest, AndroidTorrent)
|
|||||||
tr_error* error = nullptr;
|
tr_error* error = nullptr;
|
||||||
EXPECT_TRUE(tr_ctorSetMetainfoFromFile(ctor, filename.c_str(), &error));
|
EXPECT_TRUE(tr_ctorSetMetainfoFromFile(ctor, filename.c_str(), &error));
|
||||||
EXPECT_EQ(nullptr, error);
|
EXPECT_EQ(nullptr, error);
|
||||||
|
auto const* const metainfo = tr_ctorGetMetainfo(ctor);
|
||||||
|
EXPECT_NE(nullptr, metainfo);
|
||||||
|
EXPECT_EQ(336, metainfo->infoDictOffset());
|
||||||
|
EXPECT_EQ(26583, metainfo->infoDictSize());
|
||||||
|
EXPECT_EQ(592, metainfo->piecesOffset());
|
||||||
tr_ctorFree(ctor);
|
tr_ctorFree(ctor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user