linguistic: add REST API protocol unit test
Signed-off-by: Henry Castro <hcastro@collabora.com> Change-Id: I4768f8bb5bfa572d222fa5610f95c99169e6e390 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143249 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145600 Tested-by: Jenkins
This commit is contained in:
parent
8a25eb9fd8
commit
60bc7d7acd
3 changed files with 227 additions and 0 deletions
39
linguistic/CppunitTest_linguistic_restprotocol.mk
Normal file
39
linguistic/CppunitTest_linguistic_restprotocol.mk
Normal file
|
@ -0,0 +1,39 @@
|
|||
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
|
||||
#
|
||||
# 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/.
|
||||
#
|
||||
|
||||
$(eval $(call gb_CppunitTest_CppunitTest,linguistic_restprotocol))
|
||||
|
||||
$(eval $(call gb_CppunitTest_add_exception_objects,linguistic_restprotocol, \
|
||||
linguistic/qa/restprotocol \
|
||||
))
|
||||
|
||||
$(eval $(call gb_CppunitTest_use_libraries,linguistic_restprotocol, \
|
||||
comphelper \
|
||||
cppu \
|
||||
cppuhelper \
|
||||
sal \
|
||||
svt \
|
||||
utl \
|
||||
test \
|
||||
unotest \
|
||||
))
|
||||
|
||||
$(eval $(call gb_CppunitTest_use_api,linguistic_restprotocol,\
|
||||
udkapi \
|
||||
offapi \
|
||||
oovbaapi \
|
||||
))
|
||||
|
||||
$(eval $(call gb_CppunitTest_use_configuration,linguistic_restprotocol))
|
||||
|
||||
$(eval $(call gb_CppunitTest_use_ure,linguistic_restprotocol))
|
||||
|
||||
$(eval $(call gb_CppunitTest_use_rdb,linguistic_restprotocol,services))
|
||||
|
||||
# vim: set noet sw=4 ts=4:
|
|
@ -16,9 +16,16 @@ $(eval $(call gb_Module_add_targets,linguistic,\
|
|||
#$(eval $(call gb_Module_add_check_targets,linguistic,\
|
||||
#))
|
||||
|
||||
ifeq ($(OS),LINUX)
|
||||
$(eval $(call gb_Module_add_subsequentcheck_targets,linguistic,\
|
||||
JunitTest_linguistic_unoapi \
|
||||
CppunitTest_linguistic_restprotocol \
|
||||
))
|
||||
else
|
||||
$(eval $(call gb_Module_add_subsequentcheck_targets,linguistic,\
|
||||
JunitTest_linguistic_unoapi \
|
||||
))
|
||||
endif
|
||||
|
||||
# was disabled in old build system
|
||||
# JunitTest_linguistic_complex \
|
||||
|
|
181
linguistic/qa/restprotocol.cxx
Normal file
181
linguistic/qa/restprotocol.cxx
Normal file
|
@ -0,0 +1,181 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/*
|
||||
* 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 <sal/config.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
|
||||
#include <sal/log.hxx>
|
||||
#include <rtl/ustrbuf.hxx>
|
||||
#include <rtl/strbuf.hxx>
|
||||
#include <osl/socket.hxx>
|
||||
#include <osl/thread.hxx>
|
||||
#include <svtools/languagetoolcfg.hxx>
|
||||
#include <unotest/bootstrapfixturebase.hxx>
|
||||
|
||||
#include <com/sun/star/beans/PropertyValue.hpp>
|
||||
#include <com/sun/star/connection/XAcceptor.hpp>
|
||||
#include <com/sun/star/connection/XConnector.hpp>
|
||||
#include <com/sun/star/linguistic2/XProofreader.hpp>
|
||||
#include <com/sun/star/linguistic2/ProofreadingResult.hpp>
|
||||
|
||||
using namespace ::com::sun::star::uno;
|
||||
|
||||
namespace
|
||||
{
|
||||
class MockServerThread : public ::osl::Thread
|
||||
{
|
||||
public:
|
||||
MockServerThread()
|
||||
: m_aSocketAddr("localhost", 2022)
|
||||
{
|
||||
}
|
||||
|
||||
virtual void SAL_CALL run()
|
||||
{
|
||||
if (m_aAcceptorSocket.acceptConnection(m_aStreamSocket) != osl_Socket_Ok)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
sal_Int32 nReadBytes;
|
||||
Sequence<sal_Int8> aBuffer(512);
|
||||
sal_Int32 nTcpNoDelay = sal_Int32(true);
|
||||
m_aStreamSocket.setOption(osl_Socket_OptionTcpNoDelay, &nTcpNoDelay, sizeof(nTcpNoDelay),
|
||||
osl_Socket_LevelTcp);
|
||||
|
||||
nReadBytes = m_aStreamSocket.recv(aBuffer.getArray(), aBuffer.getLength());
|
||||
if (nReadBytes)
|
||||
{
|
||||
std::string aText(reinterpret_cast<const char*>(aBuffer.getConstArray()), nReadBytes);
|
||||
|
||||
if (aText.find("POST /api/check") == std::string::npos)
|
||||
{
|
||||
NotFound();
|
||||
}
|
||||
else if (aText.find("Content-Type: application/json") == std::string::npos)
|
||||
{
|
||||
NotFound();
|
||||
}
|
||||
else
|
||||
{
|
||||
ResponseOK();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ResponseOK()
|
||||
{
|
||||
OString aResponse(
|
||||
"HTTP/1.1 200 OK\r\n"
|
||||
"Server: MockServer\r\n"
|
||||
"Cache-Control: no-cache\r\n"
|
||||
"Content-Type: application/json\r\n"
|
||||
"\r\n"
|
||||
"{\"check-positions\":[{\"offset\":15,\"length\":6,\"errorcode\":4711,\"type\":"
|
||||
"\"orth\","
|
||||
"\"severity\":1,\"proposals\":[\"Entwurf\",\"Entw\u00fcrfe\"]},"
|
||||
"{\"offset\":22,\"length\":3,\"errorcode\":8221,\"type\":\"orth\",\"severity\":1}]}");
|
||||
|
||||
m_aStreamSocket.write(aResponse.getStr(), aResponse.getLength());
|
||||
m_aStreamSocket.close();
|
||||
}
|
||||
|
||||
void NotFound()
|
||||
{
|
||||
OString aResponse("HTTP/1.1 404 Not Found\r\n"
|
||||
"Connection: Closed\r\n"
|
||||
"\r\n");
|
||||
|
||||
m_aStreamSocket.write(aResponse.getStr(), aResponse.getLength());
|
||||
m_aStreamSocket.close();
|
||||
}
|
||||
|
||||
void stop()
|
||||
{
|
||||
m_aAcceptorSocket.close();
|
||||
join();
|
||||
}
|
||||
|
||||
void init()
|
||||
{
|
||||
m_aAcceptorSocket.setOption(osl_Socket_OptionReuseAddr, 1);
|
||||
CPPUNIT_ASSERT(m_aAcceptorSocket.bind(m_aSocketAddr));
|
||||
CPPUNIT_ASSERT(m_aAcceptorSocket.listen());
|
||||
}
|
||||
|
||||
private:
|
||||
::osl::SocketAddr m_aSocketAddr;
|
||||
::osl::AcceptorSocket m_aAcceptorSocket;
|
||||
::osl::StreamSocket m_aStreamSocket;
|
||||
};
|
||||
}
|
||||
|
||||
MockServerThread aMockServer;
|
||||
|
||||
class TestRestProtocol : public test::BootstrapFixtureBase
|
||||
{
|
||||
public:
|
||||
virtual void setUp() override;
|
||||
virtual void tearDown() override;
|
||||
|
||||
private:
|
||||
CPPUNIT_TEST_SUITE(TestRestProtocol);
|
||||
CPPUNIT_TEST(testProofreading);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
void testProofreading();
|
||||
};
|
||||
|
||||
void TestRestProtocol::testProofreading()
|
||||
{
|
||||
css::lang::Locale aLocale("en", "US", "");
|
||||
Sequence<::com::sun::star::beans::PropertyValue> aProperties;
|
||||
SvxLanguageToolOptions& rLanguageOpts = SvxLanguageToolOptions::Get();
|
||||
rLanguageOpts.setBaseURL("http://127.0.0.1:2022/api");
|
||||
rLanguageOpts.setUsername("hcastro");
|
||||
rLanguageOpts.setApiKey("hcvhcvhcv");
|
||||
rLanguageOpts.setEnabled(true);
|
||||
rLanguageOpts.setSSLVerification(false);
|
||||
rLanguageOpts.setRestProtocol("duden");
|
||||
CPPUNIT_ASSERT_EQUAL(OUString("duden"), rLanguageOpts.getRestProtocol());
|
||||
|
||||
Reference<::com::sun::star::linguistic2::XProofreader> xProofreader(
|
||||
m_xSFactory->createInstance("com.sun.star.linguistic2.Proofreader"), UNO_QUERY);
|
||||
CPPUNIT_ASSERT(xProofreader.is());
|
||||
|
||||
com::sun::star::linguistic2::ProofreadingResult aResult
|
||||
= xProofreader->doProofreading("id", "ths is a tst", aLocale, 0, 0, aProperties);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(2, aResult.aErrors.getLength());
|
||||
}
|
||||
|
||||
void TestRestProtocol::setUp()
|
||||
{
|
||||
test::BootstrapFixtureBase::setUp();
|
||||
|
||||
aMockServer.init();
|
||||
aMockServer.create();
|
||||
osl::Thread::wait(std::chrono::seconds(1));
|
||||
}
|
||||
|
||||
void TestRestProtocol::tearDown()
|
||||
{
|
||||
aMockServer.stop();
|
||||
|
||||
test::BootstrapFixtureBase::tearDown();
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestRestProtocol);
|
||||
|
||||
CPPUNIT_PLUGIN_IMPLEMENT();
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
Loading…
Reference in a new issue