mirror of
https://github.com/LibreOffice/online.git
synced 2025-08-16 17:42:05 +00:00

If we are logging a message, we want to see the first line of it in its entirety if possible. Especially now with more parameters being added to tile messages, 120 was not enough to see the added interesting ones. Bin the silly test that used knowledge of what the limit is. We should not test a coindidental arbitrary number that is not a documented part of an API. If we want to test the default abbreviation functionality, we need to at least make that default limit (now 500) public in Protocol.hpp. Change-Id: Iea59ba46e8331e2a839c792146f123fed9df2b82
365 lines
12 KiB
C++
365 lines
12 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include <cppunit/extensions/HelperMacros.h>
|
|
|
|
#include <ChildSession.hpp>
|
|
#include <Common.hpp>
|
|
#include <Kit.hpp>
|
|
#include <MessageQueue.hpp>
|
|
#include <Protocol.hpp>
|
|
#include <Util.hpp>
|
|
|
|
/// WhiteBox unit-tests.
|
|
class WhiteBoxTests : public CPPUNIT_NS::TestFixture
|
|
{
|
|
CPPUNIT_TEST_SUITE(WhiteBoxTests);
|
|
|
|
CPPUNIT_TEST(testLOOLProtocolFunctions);
|
|
CPPUNIT_TEST(testMessageAbbreviation);
|
|
CPPUNIT_TEST(testTokenizer);
|
|
CPPUNIT_TEST(testRegexListMatcher);
|
|
CPPUNIT_TEST(testRegexListMatcher_Init);
|
|
CPPUNIT_TEST(testEmptyCellCursor);
|
|
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
void testLOOLProtocolFunctions();
|
|
void testMessageAbbreviation();
|
|
void testTokenizer();
|
|
void testRegexListMatcher();
|
|
void testRegexListMatcher_Init();
|
|
void testEmptyCellCursor();
|
|
};
|
|
|
|
void WhiteBoxTests::testLOOLProtocolFunctions()
|
|
{
|
|
int foo;
|
|
CPPUNIT_ASSERT(LOOLProtocol::getTokenInteger("foo=42", "foo", foo));
|
|
CPPUNIT_ASSERT_EQUAL(42, foo);
|
|
|
|
std::string bar;
|
|
CPPUNIT_ASSERT(LOOLProtocol::getTokenString("bar=hello-sailor", "bar", bar));
|
|
CPPUNIT_ASSERT_EQUAL(std::string("hello-sailor"), bar);
|
|
|
|
int mumble;
|
|
std::map<std::string, int> map { { "hello", 1 }, { "goodbye", 2 }, { "adieu", 3 } };
|
|
|
|
CPPUNIT_ASSERT(LOOLProtocol::getTokenKeyword("mumble=goodbye", "mumble", map, mumble));
|
|
CPPUNIT_ASSERT_EQUAL(2, mumble);
|
|
|
|
std::string message("hello x=1 y=2 foo=42 bar=hello-sailor mumble=goodbye zip zap");
|
|
Poco::StringTokenizer tokens(message, " ", Poco::StringTokenizer::TOK_IGNORE_EMPTY | Poco::StringTokenizer::TOK_TRIM);
|
|
|
|
CPPUNIT_ASSERT(LOOLProtocol::getTokenInteger(tokens, "foo", foo));
|
|
CPPUNIT_ASSERT_EQUAL(42, foo);
|
|
|
|
CPPUNIT_ASSERT(LOOLProtocol::getTokenString(tokens, "bar", bar));
|
|
CPPUNIT_ASSERT_EQUAL(std::string("hello-sailor"), bar);
|
|
|
|
CPPUNIT_ASSERT(LOOLProtocol::getTokenKeyword(tokens, "mumble", map, mumble));
|
|
CPPUNIT_ASSERT_EQUAL(2, mumble);
|
|
|
|
CPPUNIT_ASSERT(LOOLProtocol::getTokenIntegerFromMessage(message, "foo", foo));
|
|
CPPUNIT_ASSERT_EQUAL(42, foo);
|
|
|
|
CPPUNIT_ASSERT(LOOLProtocol::getTokenStringFromMessage(message, "bar", bar));
|
|
CPPUNIT_ASSERT_EQUAL(std::string("hello-sailor"), bar);
|
|
|
|
CPPUNIT_ASSERT(LOOLProtocol::getTokenKeywordFromMessage(message, "mumble", map, mumble));
|
|
CPPUNIT_ASSERT_EQUAL(2, mumble);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1UL, Util::trimmed("A").size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("A"), Util::trimmed("A"));
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1UL, Util::trimmed(" X").size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("X"), Util::trimmed(" X"));
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1UL, Util::trimmed("Y ").size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("Y"), Util::trimmed("Y "));
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1UL, Util::trimmed(" Z ").size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("Z"), Util::trimmed(" Z "));
|
|
|
|
CPPUNIT_ASSERT_EQUAL(0UL, Util::trimmed(" ").size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string(""), Util::trimmed(" "));
|
|
|
|
CPPUNIT_ASSERT_EQUAL(0UL, Util::trimmed(" ").size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string(""), Util::trimmed(" "));
|
|
|
|
std::string s;
|
|
|
|
s = "A";
|
|
CPPUNIT_ASSERT_EQUAL(1UL, Util::trim(s).size());
|
|
s = "A";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("A"), Util::trim(s));
|
|
|
|
s = " X";
|
|
CPPUNIT_ASSERT_EQUAL(1UL, Util::trim(s).size());
|
|
s = " X";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("X"), Util::trim(s));
|
|
|
|
s = "Y ";
|
|
CPPUNIT_ASSERT_EQUAL(1UL, Util::trim(s).size());
|
|
s = "Y ";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("Y"), Util::trim(s));
|
|
|
|
s = " Z ";
|
|
CPPUNIT_ASSERT_EQUAL(1UL, Util::trim(s).size());
|
|
s = " Z ";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("Z"), Util::trim(s));
|
|
|
|
s = " ";
|
|
CPPUNIT_ASSERT_EQUAL(0UL, Util::trim(s).size());
|
|
s = " ";
|
|
CPPUNIT_ASSERT_EQUAL(std::string(""), Util::trim(s));
|
|
|
|
s = " ";
|
|
CPPUNIT_ASSERT_EQUAL(0UL, Util::trim(s).size());
|
|
s = " ";
|
|
CPPUNIT_ASSERT_EQUAL(std::string(""), Util::trim(s));
|
|
}
|
|
|
|
void WhiteBoxTests::testMessageAbbreviation()
|
|
{
|
|
CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getDelimitedInitialSubstring(nullptr, 5, '\n'));
|
|
CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getDelimitedInitialSubstring(nullptr, -1, '\n'));
|
|
CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getDelimitedInitialSubstring("abc", 0, '\n'));
|
|
CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getDelimitedInitialSubstring("abc", -1, '\n'));
|
|
CPPUNIT_ASSERT_EQUAL(std::string("ab"), LOOLProtocol::getDelimitedInitialSubstring("abc", 2, '\n'));
|
|
|
|
CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getAbbreviatedMessage(nullptr, 5));
|
|
CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getAbbreviatedMessage(nullptr, -1));
|
|
CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getAbbreviatedMessage("abc", 0));
|
|
CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getAbbreviatedMessage("abc", -1));
|
|
CPPUNIT_ASSERT_EQUAL(std::string("ab"), LOOLProtocol::getAbbreviatedMessage("abc", 2));
|
|
|
|
std::string s;
|
|
std::string abbr;
|
|
|
|
s = "abcdefg";
|
|
CPPUNIT_ASSERT_EQUAL(s, LOOLProtocol::getAbbreviatedMessage(s));
|
|
|
|
s = "1234567890123\n45678901234567890123456789012345678901234567890123";
|
|
abbr = "1234567890123...";
|
|
CPPUNIT_ASSERT_EQUAL(abbr, LOOLProtocol::getAbbreviatedMessage(s.data(), s.size()));
|
|
CPPUNIT_ASSERT_EQUAL(abbr, LOOLProtocol::getAbbreviatedMessage(s));
|
|
}
|
|
|
|
void WhiteBoxTests::testTokenizer()
|
|
{
|
|
std::vector<std::string> tokens;
|
|
|
|
tokens = LOOLProtocol::tokenize("");
|
|
CPPUNIT_ASSERT_EQUAL(0UL, tokens.size());
|
|
|
|
tokens = LOOLProtocol::tokenize(" ");
|
|
CPPUNIT_ASSERT_EQUAL(0UL, tokens.size());
|
|
|
|
tokens = LOOLProtocol::tokenize("A");
|
|
CPPUNIT_ASSERT_EQUAL(1UL, tokens.size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("A"), tokens[0]);
|
|
|
|
tokens = LOOLProtocol::tokenize(" A");
|
|
CPPUNIT_ASSERT_EQUAL(1UL, tokens.size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("A"), tokens[0]);
|
|
|
|
tokens = LOOLProtocol::tokenize("A ");
|
|
CPPUNIT_ASSERT_EQUAL(1UL, tokens.size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("A"), tokens[0]);
|
|
|
|
tokens = LOOLProtocol::tokenize(" A ");
|
|
CPPUNIT_ASSERT_EQUAL(1UL, tokens.size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("A"), tokens[0]);
|
|
|
|
tokens = LOOLProtocol::tokenize(" A Z ");
|
|
CPPUNIT_ASSERT_EQUAL(2UL, tokens.size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("A"), tokens[0]);
|
|
CPPUNIT_ASSERT_EQUAL(std::string("Z"), tokens[1]);
|
|
|
|
tokens = LOOLProtocol::tokenize("\n");
|
|
CPPUNIT_ASSERT_EQUAL(0UL, tokens.size());
|
|
|
|
tokens = LOOLProtocol::tokenize(" A \nZ ");
|
|
CPPUNIT_ASSERT_EQUAL(1UL, tokens.size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("A"), tokens[0]);
|
|
|
|
tokens = LOOLProtocol::tokenize(" A Z\n ");
|
|
CPPUNIT_ASSERT_EQUAL(2UL, tokens.size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("A"), tokens[0]);
|
|
CPPUNIT_ASSERT_EQUAL(std::string("Z"), tokens[1]);
|
|
|
|
tokens = LOOLProtocol::tokenize(" A Z \n ");
|
|
CPPUNIT_ASSERT_EQUAL(2UL, tokens.size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("A"), tokens[0]);
|
|
CPPUNIT_ASSERT_EQUAL(std::string("Z"), tokens[1]);
|
|
|
|
tokens = LOOLProtocol::tokenize("tile part=0 width=256 height=256 tileposx=0 tileposy=0 tilewidth=3840 tileheight=3840 ver=-1");
|
|
CPPUNIT_ASSERT_EQUAL(9UL, tokens.size());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("tile"), tokens[0]);
|
|
CPPUNIT_ASSERT_EQUAL(std::string("part=0"), tokens[1]);
|
|
CPPUNIT_ASSERT_EQUAL(std::string("width=256"), tokens[2]);
|
|
CPPUNIT_ASSERT_EQUAL(std::string("height=256"), tokens[3]);
|
|
CPPUNIT_ASSERT_EQUAL(std::string("tileposx=0"), tokens[4]);
|
|
CPPUNIT_ASSERT_EQUAL(std::string("tileposy=0"), tokens[5]);
|
|
CPPUNIT_ASSERT_EQUAL(std::string("tilewidth=3840"), tokens[6]);
|
|
CPPUNIT_ASSERT_EQUAL(std::string("tileheight=3840"), tokens[7]);
|
|
CPPUNIT_ASSERT_EQUAL(std::string("ver=-1"), tokens[8]);
|
|
}
|
|
|
|
void WhiteBoxTests::testRegexListMatcher()
|
|
{
|
|
Util::RegexListMatcher matcher;
|
|
|
|
matcher.allow("localhost");
|
|
CPPUNIT_ASSERT(matcher.match("localhost"));
|
|
CPPUNIT_ASSERT(!matcher.match(""));
|
|
CPPUNIT_ASSERT(!matcher.match("localhost2"));
|
|
CPPUNIT_ASSERT(!matcher.match("xlocalhost"));
|
|
CPPUNIT_ASSERT(!matcher.match("192.168.1.1"));
|
|
|
|
matcher.deny("localhost");
|
|
CPPUNIT_ASSERT(!matcher.match("localhost"));
|
|
|
|
matcher.allow("www[0-9].*");
|
|
CPPUNIT_ASSERT(matcher.match("www1example"));
|
|
|
|
matcher.allow("192\\.168\\..*\\..*");
|
|
CPPUNIT_ASSERT(matcher.match("192.168.1.1"));
|
|
CPPUNIT_ASSERT(matcher.match("192.168.159.1"));
|
|
CPPUNIT_ASSERT(matcher.match("192.168.1.134"));
|
|
CPPUNIT_ASSERT(!matcher.match("192.169.1.1"));
|
|
CPPUNIT_ASSERT(matcher.match("192.168.."));
|
|
|
|
matcher.deny("192\\.168\\.1\\..*");
|
|
CPPUNIT_ASSERT(!matcher.match("192.168.1.1"));
|
|
|
|
matcher.allow("staging\\.collaboracloudsuite\\.com.*");
|
|
matcher.deny(".*collaboracloudsuite.*");
|
|
CPPUNIT_ASSERT(!matcher.match("staging.collaboracloudsuite"));
|
|
CPPUNIT_ASSERT(!matcher.match("web.collaboracloudsuite"));
|
|
CPPUNIT_ASSERT(!matcher.match("staging.collaboracloudsuite.com"));
|
|
|
|
matcher.allow("10\\.10\\.[0-9]{1,3}\\.[0-9]{1,3}");
|
|
matcher.deny("10\\.10\\.10\\.10");
|
|
CPPUNIT_ASSERT(matcher.match("10.10.001.001"));
|
|
CPPUNIT_ASSERT(!matcher.match("10.10.10.10"));
|
|
CPPUNIT_ASSERT(matcher.match("10.10.250.254"));
|
|
}
|
|
|
|
void WhiteBoxTests::testRegexListMatcher_Init()
|
|
{
|
|
Util::RegexListMatcher matcher({"localhost", "192\\..*"}, {"192\\.168\\..*"});
|
|
|
|
CPPUNIT_ASSERT(matcher.match("localhost"));
|
|
CPPUNIT_ASSERT(!matcher.match(""));
|
|
CPPUNIT_ASSERT(!matcher.match("localhost2"));
|
|
CPPUNIT_ASSERT(!matcher.match("xlocalhost"));
|
|
CPPUNIT_ASSERT(!matcher.match("192.168.1.1"));
|
|
CPPUNIT_ASSERT(matcher.match("192.172.10.122"));
|
|
|
|
matcher.deny("localhost");
|
|
CPPUNIT_ASSERT(!matcher.match("localhost"));
|
|
|
|
matcher.allow("www[0-9].*");
|
|
CPPUNIT_ASSERT(matcher.match("www1example"));
|
|
|
|
matcher.allow("192\\.168\\..*\\..*");
|
|
CPPUNIT_ASSERT(!matcher.match("192.168.1.1"));
|
|
CPPUNIT_ASSERT(!matcher.match("192.168.159.1"));
|
|
CPPUNIT_ASSERT(!matcher.match("192.168.1.134"));
|
|
CPPUNIT_ASSERT(matcher.match("192.169.1.1"));
|
|
CPPUNIT_ASSERT(!matcher.match("192.168.."));
|
|
|
|
matcher.clear();
|
|
|
|
matcher.allow("192\\.168\\..*\\..*");
|
|
CPPUNIT_ASSERT(matcher.match("192.168.1.1"));
|
|
CPPUNIT_ASSERT(matcher.match("192.168.159.1"));
|
|
CPPUNIT_ASSERT(matcher.match("192.168.1.134"));
|
|
CPPUNIT_ASSERT(!matcher.match("192.169.1.1"));
|
|
CPPUNIT_ASSERT(matcher.match("192.168.."));
|
|
}
|
|
|
|
/// A stub IDocumentManager implementation for unit test purposes.
|
|
class DummyDocument : public IDocumentManager
|
|
{
|
|
std::shared_ptr<TileQueue> _tileQueue;
|
|
std::mutex _mutex;
|
|
std::mutex _documentMutex;
|
|
public:
|
|
DummyDocument()
|
|
: _tileQueue(new TileQueue()),
|
|
_mutex(),
|
|
_documentMutex()
|
|
{
|
|
}
|
|
bool onLoad(const std::string& /*sessionId*/,
|
|
const std::string& /*jailedFilePath*/,
|
|
const std::string& /*userName*/,
|
|
const std::string& /*docPassword*/,
|
|
const std::string& /*renderOpts*/,
|
|
const bool /*haveDocPassword*/) override
|
|
{
|
|
return false;
|
|
}
|
|
|
|
void onUnload(const ChildSession& /*session*/) override
|
|
{
|
|
}
|
|
|
|
std::shared_ptr<lok::Document> getLOKitDocument() override
|
|
{
|
|
return nullptr;
|
|
}
|
|
|
|
void notifyViewInfo(const std::vector<int>& /*viewIds*/) override
|
|
{
|
|
}
|
|
|
|
std::map<int, UserInfo> getViewInfo() override
|
|
{
|
|
return {};
|
|
}
|
|
|
|
std::mutex& getMutex() override
|
|
{
|
|
return _mutex;
|
|
}
|
|
|
|
std::mutex& getDocumentMutex() override
|
|
{
|
|
return _mutex;
|
|
}
|
|
|
|
std::shared_ptr<TileQueue>& getTileQueue() override
|
|
{
|
|
return _tileQueue;
|
|
}
|
|
|
|
bool sendTextFrame(const std::string& /*message*/) override
|
|
{
|
|
return true;
|
|
}
|
|
};
|
|
|
|
void WhiteBoxTests::testEmptyCellCursor()
|
|
{
|
|
DummyDocument document;
|
|
CallbackDescriptor callbackDescriptor{&document, 0};
|
|
// This failed as stoi raised an std::invalid_argument exception.
|
|
documentViewCallback(LOK_CALLBACK_CELL_CURSOR, "EMPTY", &callbackDescriptor);
|
|
}
|
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION(WhiteBoxTests);
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|