Commit 43a8ce2f authored by Pavel Vainerman's avatar Pavel Vainerman

[http-resolver]: tests

parent a4eddd50
......@@ -51,7 +51,7 @@ if test $checklibev = true; then
EV_CFLAGS=
AC_SUBST(EV_LIBS)
AC_SUBST(EV_CFLAGS)
AC_MSG_RESULT([ok])
AC_MSG_RESULT([ok])
fi
#check rest api support
......@@ -65,12 +65,12 @@ REST_API_CLIBS=
DISABLE_REST_API=
if test ${buildapi} = true; then
AC_MSG_RESULT([enabled])
AC_MSG_RESULT([enabled])
REST_API_CLIBS="-lPocoJSON"
else
AC_MSG_RESULT([disabled])
AC_MSG_RESULT([disabled])
REST_API_CFLAGS="-DDISABLE_REST_API"
DISABLE_REST_API=1
DISABLE_REST_API=1
fi
AM_CONDITIONAL(DISABLE_REST_API, test ${buildapi} = false)
......@@ -592,6 +592,7 @@ AC_CONFIG_FILES([Makefile
extensions/LogDB/Makefile
extensions/LogDB/tests/Makefile
extensions/HttpResolver/Makefile
extensions/HttpResolver/tests/Makefile
testsuite/Makefile
wrappers/Makefile
wrappers/python/lib/Makefile
......
......@@ -50,12 +50,11 @@ HttpResolver::HttpResolver( const string& name, int argc, const char* const* arg
if( config.empty() )
throw SystemError("Unknown config file");
std::shared_ptr<UniXML> xml;
cout << myname << "(init): init from " << config << endl;
xml = make_shared<UniXML>();
std::shared_ptr<UniXML> xml = make_shared<UniXML>();
try
{
cout << myname << "(init): init from " << config << endl;
xml->open(config);
}
catch( std::exception& ex )
......@@ -89,9 +88,9 @@ HttpResolver::HttpResolver( const string& name, int argc, const char* const* arg
iorfile = make_shared<IORFile>(dirIt.getProp("name"));
rinfo << myname << "(init): iot directory: " << dirIt.getProp("name") << endl;
httpHost = uniset::getArgParam("--" + prefix + "httpserver-host", argc, argv, "localhost");
httpPort = uniset::getArgInt("--" + prefix + "httpserver-port", argc, argv, "8008");
httpCORS_allow = uniset::getArgParam("--" + prefix + "httpserver-cors-allow", argc, argv, httpCORS_allow);
httpHost = uniset::getArgParam("--" + prefix + "http-host", argc, argv, it.getProp2("host", "localhost"));
httpPort = uniset::getArgInt("--" + prefix + "http-port", argc, argv, it.getProp2("port", "8008"));
httpCORS_allow = uniset::getArgParam("--" + prefix + "httpresolver-cors-allow", argc, argv, it.getProp2("cors", httpCORS_allow));
rinfo << myname << "(init): http server parameters " << httpHost << ":" << httpPort << endl;
Poco::Net::SocketAddress sa(httpHost, httpPort);
......@@ -100,8 +99,8 @@ HttpResolver::HttpResolver( const string& name, int argc, const char* const* arg
{
Poco::Net::HTTPServerParams* httpParams = new Poco::Net::HTTPServerParams;
int maxQ = uniset::getArgPInt("--" + prefix + "httpserver-max-queued", argc, argv, it.getProp("httpMaxQueued"), 100);
int maxT = uniset::getArgPInt("--" + prefix + "httpserver-max-threads", argc, argv, it.getProp("httpMaxThreads"), 3);
int maxQ = uniset::getArgPInt("--" + prefix + "http-max-queued", argc, argv, it.getProp("httpMaxQueued"), 100);
int maxT = uniset::getArgPInt("--" + prefix + "http-max-threads", argc, argv, it.getProp("httpMaxThreads"), 3);
httpParams->setMaxQueued(maxQ);
httpParams->setMaxThreads(maxT);
......@@ -140,11 +139,11 @@ void HttpResolver::help_print()
cout << "--prefix-single-confile conf.xml - Отдельный конфигурационный файл (не требующий структуры uniset)" << endl;
cout << "--prefix-name name - Имя. Для поиска настроечной секции в configure.xml" << endl;
cout << "http: " << endl;
cout << "--prefix-httpserver-host ip - IP на котором слушает http сервер. По умолчанию: localhost" << endl;
cout << "--prefix-httpserver-port num - Порт на котором принимать запросы. По умолчанию: 8080" << endl;
cout << "--prefix-httpserver-max-queued num - Размер очереди запросов к http серверу. По умолчанию: 100" << endl;
cout << "--prefix-httpserver-max-threads num - Разрешённое количество потоков для http-сервера. По умолчанию: 3" << endl;
cout << "--prefix-httpserver-cors-allow addr - (CORS): Access-Control-Allow-Origin. Default: *" << endl;
cout << "--prefix-http-host ip - IP на котором слушает http сервер. По умолчанию: localhost" << endl;
cout << "--prefix-http-port num - Порт на котором принимать запросы. По умолчанию: 8008" << endl;
cout << "--prefix-http-max-queued num - Размер очереди запросов к http серверу. По умолчанию: 100" << endl;
cout << "--prefix-http-max-threads num - Разрешённое количество потоков для http-сервера. По умолчанию: 3" << endl;
cout << "--prefix-http-cors-allow addr - (CORS): Access-Control-Allow-Origin. Default: *" << endl;
}
// -----------------------------------------------------------------------------
void HttpResolver::run()
......
......@@ -75,7 +75,7 @@ namespace uniset
std::shared_ptr<Poco::Net::HTTPServer> httpserv;
std::string httpHost = { "" };
int httpPort = { 0 };
int httpPort = { 8008 };
std::string httpCORS_allow = { "*" };
std::string httpReplyAddr = { "" };
......
if ENABLE_REST_API
if HAVE_TESTS
noinst_PROGRAMS = run_test_uresolver
run_test_uresolver_SOURCES = run_test_uresolver.cc test_uresolver.cc TestObject.cc
run_test_uresolver_LDADD = $(top_builddir)/lib/libUniSet2.la $(top_builddir)/extensions/lib/libUniSet2Extensions.la $(SIGC_LIBS) $(POCO_LIBS)
run_test_uresolver_CPPFLAGS = -I$(top_builddir)/include -I$(top_builddir)/extensions/include $(SIGC_CFLAGS) $(POCO_CFLAGS)
include $(top_builddir)/testsuite/testsuite-common.mk
check-local: atconfig package.m4 $(TESTSUITE) uresolver-tests.at
$(SHELL) $(TESTSUITE) $(TESTSUITEFLAGS)
clean-local:
rm -rf $(CLEANFILES)
rm -rf $(COVERAGE_REPORT_DIR)
include $(top_builddir)/include.mk
endif
endif
// -----------------------------------------------------------------------------
#include "TestObject.h"
// -----------------------------------------------------------------------------
using namespace std;
using namespace uniset;
// -----------------------------------------------------------------------------
TestObject::TestObject( uniset::ObjectId objId, xmlNode* cnode ):
UObject_SK(objId, cnode)
{
}
// -----------------------------------------------------------------------------
TestObject::~TestObject()
{
}
// -----------------------------------------------------------------------------
#ifndef _TestObject_H_
#define _TestObject_H_
// -----------------------------------------------------------------------------
#include "UObject_SK.h"
// -----------------------------------------------------------------------------
class TestObject:
public UObject_SK
{
public:
TestObject( uniset::ObjectId objId, xmlNode* cnode );
virtual ~TestObject();
protected:
TestObject();
};
// -----------------------------------------------------------------------------
#endif // _TestObject_H_
// -----------------------------------------------------------------------------
#define CATCH_CONFIG_RUNNER
#include <catch.hpp>
#include <string>
#include "Debug.h"
#include "UniSetActivator.h"
#include "UHelpers.h"
#include "TestObject.h"
// --------------------------------------------------------------------------
using namespace std;
using namespace uniset;
// --------------------------------------------------------------------------
int main( int argc, const char* argv[] )
{
try
{
Catch::Session session;
if( argc > 1 && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) )
{
session.showHelp("tests_httpresolver");
return 0;
}
int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore );
if( returnCode != 0 ) // Indicates a command line error
return returnCode;
auto conf = uniset_init(argc, argv);
auto to = make_object<TestObject>("TestProc", "TestProc");
if( !to )
return 1;
auto act = UniSetActivator::Instance();
act->add(to);
SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() );
act->run(true);
return session.run();
}
catch( const uniset::Exception& ex )
{
cerr << "(tests_httpresolver): " << ex << endl;
}
catch( const std::exception& e )
{
cerr << "(tests_httpresolver): " << e.what() << endl;
}
catch(...)
{
cerr << "(tests_httpresolver): catch(...)" << endl;
}
return 1;
}
#!/bin/sh
HTTP_RESOLVER_PID=
function atexit()
{
trap - EXIT
[ -n "$HTTP_RESOLVER_PID" ] && kill $HTTP_RESOLVER_PID 2>/dev/null
sleep 3
[ -n "$HTTP_RESOLVER_PID" ] && kill -9 $HTTP_RESOLVER_PID 2>/dev/null
exit $RET
}
trap atexit EXIT
# '--' - нужен для отделения аргументов catch, от наших..
cd ../../../Utilities/Admin/
./uniset2-start.sh -f ./create_links.sh
./uniset2-start.sh -f ./create
./uniset2-start.sh -f ./exist | grep -q UNISET_PLC/Controllers || exit 1
cd -
../uniset2-httpresolver --confile uresolver-test-configure.xml &
HTTP_RESOLVER_PID=$!
sleep 5
./uniset2-start.sh -f ./run_test_uresolver $* -- --confile uresolver-test-configure.xml && RET=0 || RET=1
exit $RET
#include <catch.hpp>
// -----------------------------------------------------------------------------
#include "UniSetTypes.h"
#include "Exceptions.h"
#include "UInterface.h"
#include "UHttpClient.h"
// -----------------------------------------------------------------------------
using namespace std;
using namespace uniset;
// -----------------------------------------------------------------------------
static shared_ptr<UInterface> ui;
static const ObjectId TestProc = 6000;
static const ObjectId Node1 = 3001;
// -----------------------------------------------------------------------------
static void InitTest()
{
auto conf = uniset_conf();
CHECK( conf != nullptr );
if( !ui )
{
ui = make_shared<UInterface>();
// UI понадобиться для проверки записанных в SM значений.
CHECK( ui->getObjectIndex() != nullptr );
CHECK( ui->getConf() == conf );
}
REQUIRE( conf->getHttpResovlerPort() == 8008 );
REQUIRE( conf->isLocalIOR() );
REQUIRE_NOTHROW( ui->resolve(TestProc) );
REQUIRE( ui->isExist(TestProc) );
}
// -----------------------------------------------------------------------------
TEST_CASE("HttpResolver: cli resolve", "[httpresolver][cli]")
{
InitTest();
UHttp::UHttpClient cli;
auto ret = cli.get("localhost", 8008, "api/v01/resolve/text?" + std::to_string(TestProc));
REQUIRE_FALSE( ret.empty() );
}
// -----------------------------------------------------------------------------
TEST_CASE("HttpResolver: resolve", "[httpresolver][ui]")
{
InitTest();
REQUIRE_NOTHROW( ui->resolve(TestProc, Node1) );
REQUIRE_THROWS_AS( ui->resolve(DefaultObjectId, Node1), uniset::ResolveNameError );
REQUIRE( ui->isExist(TestProc, Node1) );
}
// -----------------------------------------------------------------------------
m4_include(package.m4)
AT_COLOR_TESTS
AT_INIT([HttpResolver tests])
m4_include(uresolver-tests.at)
../../../Utilities/scripts/uniset2-functions.sh
\ No newline at end of file
../../../Utilities/scripts/uniset2-start.sh
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<UNISETPLC xmlns:xi="http://www.w3.org/2001/XInclude">
<UserData/>
<!-- Общие(стартовые) параметры по UniSet -->
<UniSet>
<NameService host="localhost" port="2809"/>
<LocalNode name="localhost"/>
<RootSection name="UNISET_PLC"/>
<CountOfNet name="1"/>
<RepeatCount name="3"/>
<RepeatTimeoutMS name="50"/>
<WatchDogTime name="0"/>
<PingNodeTime name="0"/>
<AutoStartUpTime name="1"/>
<DumpStateTime name="10"/>
<SleepTickMS name="500"/>
<UniSetDebug levels="" name="ulog"/>
<ConfDir name="./"/>
<DataDir name="./"/>
<BinDir name="./"/>
<LogDir name="./"/>
<DocDir name="./"/>
<LockDir name="./"/>
<Services></Services>
<LocalIOR name="1"/>
<HttpResolver name="HttpResolver" port="8008"/>
</UniSet>
<dlog name="dlog"/>
<settings>
<TestProc name="TestProc"/>
</settings>
<ObjectsMap idfromfile="1">
<nodes port="2809">
<item id="3000" ip="127.0.0.1" name="localhost" textname="Локальный узел"/>
<item id="3001" ip="127.0.0.1" name="node1" textname="второй узел"/>
</nodes>
<sensors name="Sensors">
</sensors>
<thresholds/>
<controllers name="Controllers">
</controllers>
<services name="Services">
</services>
<objects name="UniObjects">
<item id="6000" name="TestProc"/>
</objects>
</ObjectsMap>
</UNISETPLC>
AT_SETUP([HttpResolver tests])
AT_SKIP_IF([$abs_top_builddir/config.status --config | grep disable-io])
AT_CHECK([$abs_top_builddir/testsuite/at-test-launch.sh $abs_top_builddir/extensions/HttpResolver/tests run_test_uresolver.sh],[0],[ignore],[ignore])
AT_CLEANUP
......@@ -7,7 +7,7 @@ SUBDIRS = lib include SharedMemory SharedMemory/tests IOControl IOControl/tests
ModbusMaster ModbusSlave SMViewer UniNetwork UNetUDP UNetUDP/tests \
DBServer-MySQL DBServer-SQLite DBServer-PostgreSQL MQTTPublisher \
RRDServer tests ModbusMaster/tests ModbusSlave/tests LogDB LogDB/tests \
Backend-OpenTSDB HttpResolver
Backend-OpenTSDB HttpResolver HttpResolver/tests
pkgconfigdir = $(libdir)/pkgconfig
......
......@@ -167,16 +167,14 @@ namespace uniset
// throw(uniset::ORepFailed)
void unregister(const uniset::ObjectId id);
/*! получение ссылки на объект */
/*! получение ссылки на объект (по полному имени) */
inline uniset::ObjectPtr resolve( const std::string& name ) const
{
return rep.resolve(name);
}
inline uniset::ObjectPtr resolve( const uniset::ObjectId id ) const
{
return rep.resolve( oind->getNameById(id) );
}
// с поддержкой localIOR
uniset::ObjectPtr resolve( const uniset::ObjectId id ) const;
// throw(uniset::ResolveNameError, uniset::TimeOut);
uniset::ObjectPtr resolve(const uniset::ObjectId id, const uniset::ObjectId nodeName) const;
......
......@@ -557,6 +557,8 @@ namespace uniset
throw uniset::SystemError("Configuration: INIT PARAM`s FAILED!!!!");
}
httpResolverPort = 8008;
for( ; it.getCurrent(); it.goNext() )
{
string name( it.getName() );
......@@ -600,13 +602,13 @@ namespace uniset
{
imagesDir = dataDir + it.getProp("name") + "/"; // ????????
}
else if( name == "HttpResolver" )
{
httpResolverPort = it.getPIntProp("port", httpResolverPort);
}
else if( name == "LocalIOR" )
{
localIOR = it.getIntProp("name");
httpResolverPort = it.getIntProp("httpResolverPort");
if( httpResolverPort <= 0 )
httpResolverPort = 8008;
}
else if( name == "TransientIOR" )
{
......
......@@ -1512,6 +1512,21 @@ namespace uniset
throw uniset::TimeOut(set_err("UI(apiRequest): Timeout", id, node));
}
// ------------------------------------------------------------------------------------------------------------
uniset::ObjectPtr UInterface::resolve( const uniset::ObjectId id ) const
{
if( uconf->isLocalIOR() )
{
if( CORBA::is_nil(orb) )
orb = uconf->getORB();
string sior( uconf->iorfile->getIOR(id) );
if( !sior.empty() )
return orb->string_to_object(sior.c_str());
}
return rep.resolve( oind->getNameById(id) );
}
uniset::ObjectPtr UInterface::CacheOfResolve::resolve( const uniset::ObjectId id, const uniset::ObjectId node ) const
{
try
......
......@@ -13,3 +13,5 @@ m4_include(../extensions/ModbusMaster/tests/mbmaster-tests.at)
m4_include(../extensions/LogicProcessor/tests/lproc-tests.at)
m4_include(../extensions/IOControl/tests/iocontrol-tests.at)
m4_include(../extensions/LogDB/tests/logdb-tests.at)
m4_include(../extensions/HttpResolver/tests/uresolver-tests.at)
m4_include(../extensions/LogicProcessor/tests/lproc-tests.at)
......@@ -29,6 +29,11 @@
./extensions/HttpResolver/HttpResolverSugar.h
./extensions/HttpResolver/main.cc
./extensions/HttpResolver/Makefile.am
./extensions/HttpResolver/tests/Makefile.am
./extensions/HttpResolver/tests/run_test_uresolver.cc
./extensions/HttpResolver/tests/TestObject.cc
./extensions/HttpResolver/tests/TestObject.h
./extensions/HttpResolver/tests/test_uresolver.cc
./extensions/include/Calibration.h
./extensions/include/ComediInterface.h
./extensions/include/DigitalFilter.h
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment