loolwsd/test/Makefile.am | 14 ++++- loolwsd/test/TileCacheTests.cpp | 107 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+), 2 deletions(-)
New commits: commit 516bad1942e007aed15e81544e57d1600e6a2996 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Sun May 1 12:35:42 2016 -0400 loolwsd: TileCache whitebox tests New unittests to verify TileCache logic on the unit level. Change-Id: Ia36181e850b349abb88ba5f04f1e5244771bacc6 Reviewed-on: https://gerrit.libreoffice.org/24574 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/test/Makefile.am b/loolwsd/test/Makefile.am index d46d336..2587cec 100644 --- a/loolwsd/test/Makefile.am +++ b/loolwsd/test/Makefile.am @@ -14,8 +14,18 @@ MAGIC_TO_FORCE_SHLIB_CREATION = -rpath /dummy AM_LDFLAGS = -pthread -module $(MAGIC_TO_FORCE_SHLIB_CREATION) AM_CPPFLAGS = -pthread -I$(top_srcdir) -test_CPPFLAGS = -DTDOC=\"$(top_srcdir)/test/data\" -test_SOURCES = WhiteBoxTests.cpp integration-http-server.cpp httpwstest.cpp httpcrashtest.cpp test.cpp ../LOOLProtocol.cpp +wsd_sources = \ + ../IoUtil.cpp \ + ../Log.cpp \ + ../LOOLProtocol.cpp \ + ../TileCache.cpp \ + ../MessageQueue.cpp \ + ../Unit.cpp \ + ../Util.cpp + +test_CPPFLAGS = -DTDOC=\"$(top_srcdir)/test/data\" -I$(top_srcdir) +test_SOURCES = TileCacheTests.cpp WhiteBoxTests.cpp integration-http-server.cpp \ + httpwstest.cpp httpcrashtest.cpp test.cpp $(wsd_sources) test_LDADD = $(CPPUNIT_LIBS) # unit test modules: diff --git a/loolwsd/test/TileCacheTests.cpp b/loolwsd/test/TileCacheTests.cpp new file mode 100644 index 0000000..8667efb --- /dev/null +++ b/loolwsd/test/TileCacheTests.cpp @@ -0,0 +1,107 @@ +/* -*- 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 <TileCache.hpp> +#include "Unit.hpp" +#include "Util.hpp" + +/// TileCache unit-tests. +class TileCacheTests : public CPPUNIT_NS::TestFixture +{ + CPPUNIT_TEST_SUITE(TileCacheTests); + + CPPUNIT_TEST(test); + + CPPUNIT_TEST_SUITE_END(); + + void test(); + + static + std::vector<char> genRandomData(const size_t size) + { + std::vector<char> v(size); + v.resize(size); + auto data = v.data(); + for (size_t i = 0; i < size; ++i) + { + data[i] = static_cast<char>(Util::rng::getNext()); + } + + return v; + } + + static + std::vector<char> readDataFromFile(std::unique_ptr<std::fstream>& file) + { + file->seekg(0, std::ios_base::end); + const std::streamsize size = file->tellg(); + + std::vector<char> v; + v.resize(size); + + file->seekg(0, std::ios_base::beg); + file->read(v.data(), size); + + return v; + } + +public: + TileCacheTests() + { + if (!UnitWSD::init(UnitWSD::UnitType::TYPE_WSD, "")) + { + throw std::runtime_error("Failed to load wsd unit test library."); + } + } +}; + +void TileCacheTests::test() +{ + // Create TileCache and pretend the file was modified as recently as + // now, so it discards the cached data. + TileCache tc("doc.ods", Poco::Timestamp(), "/tmp/tile_cache_tests"); + + int part = 0; + int width = 256; + int height = 256; + int tilePosX = 0; + int tilePosY = 0; + int tileWidth = 3840; + int tileHeight = 3840; + + // No Cache + auto file = tc.lookupTile(part, width, height, tilePosX, tilePosY, tileWidth, tileHeight); + CPPUNIT_ASSERT_MESSAGE("found tile when none was expected", !file); + + // Cache Tile + const auto size = 1024; + const auto data = genRandomData(size); + tc.saveTile(part, width, height, tilePosX, tilePosY, tileWidth, tileHeight, data.data(), size); + + // Find Tile + file = tc.lookupTile(part, width, height, tilePosX, tilePosY, tileWidth, tileHeight); + CPPUNIT_ASSERT_MESSAGE("tile not found when expected", file && file->is_open()); + const auto tileData = readDataFromFile(file); + CPPUNIT_ASSERT_MESSAGE("cached tile corrupted", data == tileData); + + // Invalidate Tiles + tc.invalidateTiles("invalidatetiles: EMPTY"); + + // No Cache + file = tc.lookupTile(part, width, height, tilePosX, tilePosY, tileWidth, tileHeight); + CPPUNIT_ASSERT_MESSAGE("found tile when none was expected", !file); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(TileCacheTests); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits