void assertPutFileRequest(const Poco::Net::HTTPRequest& request) override { if (_savingPhase == SavingPhase::Unmodified) { // the document is not modified CPPUNIT_ASSERT_EQUAL(std::string("false"), request.get("X-LOOL-WOPI-IsModifiedByUser")); // but the save action is an explicit user's request CPPUNIT_ASSERT_EQUAL(std::string("false"), request.get("X-LOOL-WOPI-IsAutosave")); _finishedSaveUnmodified = true; } else if (_savingPhase == SavingPhase::Modified) { // the document is modified CPPUNIT_ASSERT_EQUAL(std::string("true"), request.get("X-LOOL-WOPI-IsModifiedByUser")); // and this test fakes that it's an autosave CPPUNIT_ASSERT_EQUAL(std::string("true"), request.get("X-LOOL-WOPI-IsAutosave")); _finishedSaveModified = true; } if (_finishedSaveUnmodified && _finishedSaveModified) exitTest(TestResult::Ok); }
virtual void newChild(const std::shared_ptr<Poco::Net::WebSocket> &socket) override { _childSockets.push_back(socket); if (_childSockets.size() > NumToPrefork) { Poco::Timestamp::TimeDiff elapsed = _startTime.elapsed(); auto totalTime = (1000. * elapsed)/Poco::Timestamp::resolution(); Log::info() << "Launched " << _childSockets.size() << " in " << totalTime << Log::end; size_t totalPSSKb = 0; size_t totalDirtyKb = 0; // Skip the last one as it's not completely initialized yet. for (size_t i = 0; i < _childSockets.size() - 1; ++i) { Log::info() << "Getting memory of child #" << i + 1 << " of " << _childSockets.size() << Log::end; if (!getMemory(_childSockets[i], totalPSSKb, totalDirtyKb)) { exitTest(TestResult::TEST_FAILED); return; } } Log::info() << "Memory use total " << totalPSSKb << "k shared " << totalDirtyKb << "k dirty" << Log::end; totalPSSKb /= _childSockets.size(); totalDirtyKb /= _childSockets.size(); Log::info() << "Memory use average " << totalPSSKb << "k shared " << totalDirtyKb << "k dirty" << Log::end; Log::info() << "Launch time total " << totalTime << " ms" << Log::end; totalTime /= _childSockets.size(); Log::info() << "Launch time average " << totalTime << " ms" << Log::end; if (!_failure.empty()) { Log::error("UnitPrefork failed due to: " + _failure); exitTest(TestResult::TEST_FAILED); } else { Log::error("UnitPrefork success."); exitTest(TestResult::TEST_OK); } } }
void check() { if (!_fontsKit.length() || !_fontsBroker.length()) return; // defer till we have all the data. if (_fontsKit != _fontsBroker) { std::cerr << "Error - font list mismatch" << std::endl; std::cerr << "Kit : '" << _fontsKit << "' vs. Broker : '" << _fontsBroker << "'" << std::endl; exitTest(TestResult::TEST_FAILED); } else { Poco::StringTokenizer tokens(_fontsKit, "\n"); if (tokens.count() > 0) std::cerr << " " << tokens[0] << std::endl; exitTest(TestResult::TEST_OK); } }
virtual void newChild(WebSocketHandler &) override { _childSockets++; LOG_INF("Unit-prefork: got new child, have " << _childSockets << " of " << NumToPrefork); if (_childSockets >= NumToPrefork) { Poco::Timestamp::TimeDiff elapsed = _startTime.elapsed(); const double totalTime = (1000. * elapsed)/Poco::Timestamp::resolution(); LOG_INF("Launched " << _childSockets << " in " << totalTime); std::cerr << "Launch time total " << totalTime << " ms" << std::endl; std::cerr << "Launch time average " << (totalTime / _childSockets) << " ms" << std::endl; exitTest(TestResult::Ok); } }
void invokeTest() override { constexpr char testName[] = "UnitWOPIVersionRestore"; switch (_phase) { case Phase::Load: { initWebsocket("/wopi/files/0?access_token=anything"); helpers::sendTextFrame(*getWs()->getLOOLWebSocket(), "load url=" + getWopiSrc(), testName); _phase = Phase::Modify; break; } case Phase::Modify: { helpers::sendTextFrame(*getWs()->getLOOLWebSocket(), "key type=input char=97 key=0", testName); helpers::sendTextFrame(*getWs()->getLOOLWebSocket(), "key type=up char=0 key=512", testName); _phase = Phase::VersionRestoreRequest; SocketPoll::wakeupWorld(); break; } case Phase::VersionRestoreRequest: { // tell wsd that we are about to restore helpers::sendTextFrame(*getWs()->getLOOLWebSocket(), "versionrestore prerestore", testName); _phase = Phase::Polling; break; } case Phase::VersionRestoreAck: { if (_isDocumentSaved) exitTest(TestResult::Ok); break; } case Phase::Polling: { // just wait for the results break; } } }