ServerSearchTest.searchInMultilanguageBookSetIsDenied

This commit is contained in:
Veloman Yunkan 2022-10-21 19:55:38 +04:00
parent cb02dbd92a
commit d1b85192c0
1 changed files with 74 additions and 13 deletions

View File

@ -7,16 +7,6 @@
#include "server_testing_tools.h" #include "server_testing_tools.h"
class ServerSearchTest : public ServerTest
{
void SetUp() override {
zfs1_.reset(new ZimFileServer(SERVER_PORT,
ZimFileServer::DEFAULT_OPTIONS,
"./test/lib_for_server_search_test.xml")
);
}
};
std::string makeSearchResultsHtml(const std::string& pattern, std::string makeSearchResultsHtml(const std::string& pattern,
const std::string& header, const std::string& header,
const std::string& results, const std::string& results,
@ -927,7 +917,7 @@ struct TestData
} }
}; };
TEST_F(ServerSearchTest, searchResults) TEST(ServerSearchTest, searchResults)
{ {
const TestData testData[] = { const TestData testData[] = {
{ {
@ -1468,15 +1458,86 @@ TEST_F(ServerSearchTest, searchResults)
}, },
}; };
ZimFileServer zfs(SERVER_PORT, ZimFileServer::DEFAULT_OPTIONS,
"./test/lib_for_server_search_test.xml");
for ( const auto& t : testData ) { for ( const auto& t : testData ) {
const std::string htmlSearchUrl = t.url(); const std::string htmlSearchUrl = t.url();
const auto htmlRes = zfs1_->GET(htmlSearchUrl.c_str()); const auto htmlRes = zfs.GET(htmlSearchUrl.c_str());
EXPECT_EQ(htmlRes->status, 200); EXPECT_EQ(htmlRes->status, 200);
t.checkHtml(htmlRes->body); t.checkHtml(htmlRes->body);
const std::string xmlSearchUrl = t.xmlSearchUrl(); const std::string xmlSearchUrl = t.xmlSearchUrl();
const auto xmlRes = zfs1_->GET(xmlSearchUrl.c_str()); const auto xmlRes = zfs.GET(xmlSearchUrl.c_str());
EXPECT_EQ(xmlRes->status, 200); EXPECT_EQ(xmlRes->status, 200);
t.checkXml(xmlRes->body); t.checkXml(xmlRes->body);
} }
} }
std::string expectedConfusionOfTonguesErrorHtml(std::string url)
{
return R"(<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html;charset=UTF-8" http-equiv="content-type" />
<title>Invalid request</title>
</head>
<body>
<h1>Invalid request</h1>
<p>
The requested URL ")" + url + R"(" is not a valid request.
</p>
<p>
Two or more books in different languages would participate in search, which may lead to confusing results.
</p>
</body>
</html>
)";
}
std::string expectedConfusionOfTonguesErrorXml(std::string url)
{
return R"(<?xml version="1.0" encoding="UTF-8">
<error>Invalid request</error>
<detail>The requested URL ")" + url + R"(" is not a valid request.</detail>
<detail>Two or more books in different languages would participate in search, which may lead to confusing results.</detail>
)";
}
TEST(ServerSearchTest, searchInMultilanguageBookSetIsDenied)
{
const std::string testQueries[] = {
"pattern=towerofbabel",
"pattern=babylon&books.filter.maxsize=1000000",
"pattern=baby&books.id=" RAYCHARLESZIMID "&books.id=" EXAMPLEZIMID,
};
// The default limit on the number of books in a multi-zim search is 3
const ZimFileServer::FilePathCollection ZIMFILES{
"./test/zimfile.zim", // eng
"./test/example.zim", // en
"./test/corner_cases.zim" // =en
};
ZimFileServer zfs(SERVER_PORT, ZimFileServer::DEFAULT_OPTIONS, ZIMFILES);
for ( const auto& q : testQueries ) {
{
// HTML mode
const std::string url = "/ROOT/search?" + q;
const auto r = zfs.GET(url.c_str());
const TestContext ctx{ {"url", url} };
EXPECT_EQ(r->status, 400) << ctx;
EXPECT_EQ(r->body, expectedConfusionOfTonguesErrorHtml(url)) << ctx;
}
{
// XML mode
const std::string url = "/ROOT/search?" + q + "&format=xml";
const auto r = zfs.GET(url.c_str());
const TestContext ctx{ {"url", url} };
EXPECT_EQ(r->status, 400) << ctx;
EXPECT_EQ(r->body, expectedConfusionOfTonguesErrorXml(url)) << ctx;
}
}
}