Commit 9e2d72de authored by Pavel Vainerman's avatar Pavel Vainerman

(SharedMemory): добавлен второй тест heartbeat

(uniset-codegen): добавлено вылавливание исключения при работе с heartbeat, мелкие правки
parent 301b2370
......@@ -79,8 +79,15 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
// "сердцебиение"
if( idHeartBeat!=DefaultObjectId &amp;&amp; ptHeartBeat.checkTime() )
{
ui->setValue(idHeartBeat,maxHeartBeat,UniversalIO::AI);
ptHeartBeat.reset();
try
{
ui->setValue(idHeartBeat,maxHeartBeat);
ptHeartBeat.reset();
}
catch( Exception&amp; ex )
{
ucrit &lt;&lt; myname &lt;&lt; "(execute): " &lt;&lt; ex &lt;&lt; endl;
}
}
// обновление выходов
......
......@@ -82,8 +82,15 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
// "сердцебиение"
if( idHeartBeat!=DefaultObjectId &amp;&amp; ptHeartBeat.checkTime() )
{
ui->setValue(idHeartBeat,maxHeartBeat,UniversalIO::AI);
ptHeartBeat.reset();
try
{
ui->setValue(idHeartBeat,maxHeartBeat);
ptHeartBeat.reset();
}
catch( const Exception&amp; ex )
{
ucrit &lt;&lt; myname &lt;&lt; "(execute): " &lt;&lt; ex &lt;&lt; endl;
}
}
// обновление выходов
......@@ -103,7 +110,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
}
catch( const std::exception&amp;ex )
{
ucrit &lt;&lt; myname &lt;&lt; "(execute): catch " &lt;&lt; ex.what() &lt;&lt; endl;
ucrit &lt;&lt; myname &lt;&lt; "(execute): catch " &lt;&lt; ex.what() &lt;&lt; endl;
}
if( !active )
......
......@@ -78,8 +78,15 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
// "сердцебиение"
if( idHeartBeat!=DefaultObjectId &amp;&amp; ptHeartBeat.checkTime() )
{
ui->setValue(idHeartBeat,maxHeartBeat,UniversalIO::AI);
ptHeartBeat.reset();
try
{
ui->setValue(idHeartBeat,maxHeartBeat);
ptHeartBeat.reset();
}
catch( Exception&amp; ex )
{
ucrit &lt;&lt; myname &lt;&lt; "(execute): " &lt;&lt; ex &lt;&lt; endl;
}
}
// обновление выходов
......
......@@ -82,8 +82,15 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
// "сердцебиение"
if( idHeartBeat!=DefaultObjectId &amp;&amp; ptHeartBeat.checkTime() )
{
ui->setValue(idHeartBeat,maxHeartBeat,UniversalIO::AI);
ptHeartBeat.reset();
try
{
ui->setValue(idHeartBeat,maxHeartBeat);
ptHeartBeat.reset();
}
catch( Exception&amp; ex )
{
ucrit &lt;&lt; myname &lt;&lt; "(execute): " &lt;&lt; ex &lt;&lt; endl;
}
}
// Формирование выходов
......
......@@ -355,10 +355,10 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preSysCommand( const SystemMessage*
switch( _sm->command )
{
case SystemMessage::WatchDog:
ulogany &lt;&lt; myname &lt;&lt; "(preSysCommand): WatchDog" &lt;&lt; endl;
uinfo &lt;&lt; myname &lt;&lt; "(preSysCommand): WatchDog" &lt;&lt; endl;
if( !active || !ptStartUpTimeout.checkTime() )
{
uwarn &lt;&lt; myname &lt;&lt; "(preSysCommand): игнорируем WatchDog, потому-что только-что стартанули" &lt;&lt; endl;
uwarn &lt;&lt; myname &lt;&lt; "(preSysCommand): игнорируем WatchDog, потому-что только-что стартанули" &lt;&lt; endl;
break;
}
case SystemMessage::StartUp:
......
......@@ -13,7 +13,7 @@
Name: libuniset2
Version: 2.1
Release: alt1
Release: alt2
Summary: UniSet - library for building distributed industrial control systems
......@@ -455,6 +455,11 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# ..
%changelog
* Sat May 30 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt2
- (optimization): TransportMessage change format
- (uniset-codegen): minor fixes
- (SharedMemory): add new tests
* Thu May 28 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt1
- repack header files..
......
......@@ -17,6 +17,7 @@ check-local: atconfig package.m4 $(TESTSUITE) sm-tests.at
clean-local:
rm -rf $(CLEANFILES)
rm -rf $(COVERAGE_REPORT_DIR)
rm -rf *_SK.*
TestObject_SK.cc TestObject.h: testobject.src.xml
$(UNISET_CODEGEN) -l $(top_builddir)/Utilities/codegen -n TestObject --topdir $(top_builddir)/ --ask --no-main testobject.src.xml
......
......@@ -35,3 +35,13 @@ void TestObject::sysCommand( const UniSetTypes::SystemMessage* sm )
evntIsOK = true;
}
// -----------------------------------------------------------------------------
void TestObject::stopHeartbeat()
{
maxHeartBeat = 0;
}
// -----------------------------------------------------------------------------
void TestObject::runHeartbeat( int max )
{
maxHeartBeat = max;
}
// -----------------------------------------------------------------------------
......@@ -15,6 +15,12 @@ class TestObject:
void askNotifyFirstNotNull();
inline bool getEvnt(){ return evntIsOK; }
void stopHeartbeat();
void runHeartbeat( int max=3 );
inline timeout_t getHeartbeatTime(){ return ptHeartBeat.getInterval(); }
protected:
TestObject();
......
......@@ -30,7 +30,7 @@
<item node="localhost" name="ReservSharedMemory"/>
</ReservList>
</SharedMemory>
<TestObject name="TestObject" sensor_s="DI2_S" output_c="AO2_C"/>
<TestObject name="TestObject" sensor_s="DI2_S" output_c="AO2_C" heartbeat_id="TO_Heartbeat_Counter" heartbeatTime="500" heartbeat_max="5"/>
</settings>
<ObjectsMap idfromfile="1">
<nodes port="2809" unet_broadcast_ip="192.168.1.255" unet_broadcast_ip2="192.168.122.255">
......@@ -48,7 +48,8 @@
<item id="507" iotype="DI" name="Heartbeat_S" textname="Heartbeat"/>
<item id="508" iotype="AI" name="AO2_C" priority="Medium" textname="TestObject test"/>
<item id="509" iotype="DI" name="DI2_S" priority="Medium" textname="TestObject test"/>
<item heartbeat="1" heartbeat_ds_name="TO_Heartbeat_DS" heartbeat_node="localhost" id="510" iotype="AI" name="TO_Heartbeat_Counter" textname="TestObject: heartbeat counter"/>
<item id="511" iotype="DI" name="TO_Heartbeat_DS" textname="TestObject: heartbeat"/>
</sensors>
<thresholds name="thresholds">
<sensor iotype="AI" name="AI1_AS">
......
......@@ -112,15 +112,15 @@ TEST_CASE("[SM]: askSensors", "[sm][ask]")
CHECK( obj->in_sensor_s );
ui->setValue(509, 0);
msleep(200);
msleep(300);
CHECK_FALSE( obj->in_sensor_s );
obj->out_output_c = 1200;
msleep(200);
msleep(300);
REQUIRE( ui->getValue(508) == 1200 );
obj->out_output_c = 100;
msleep(200);
msleep(300);
REQUIRE( ui->getValue(508) == 100 );
}
// -----------------------------------------------------------------------------
......@@ -158,3 +158,22 @@ TEST_CASE("[SM]: askDoNotNotify", "[sm][ask]")
CHECK( obj->in_sensor_s ); // должно придти т.к. равно "1"
}
// -----------------------------------------------------------------------------
TEST_CASE("[SM]: heartbeat test N2", "[sm][heartbeat]")
{
InitTest();
obj->runHeartbeat(5);
msleep(obj->getHeartbeatTime() + 100);
CHECK( ui->getValue(511) );
obj->runHeartbeat(2);
obj->stopHeartbeat();
msleep(3000);
CHECK_FALSE( ui->getValue(511) );
obj->runHeartbeat(5);
msleep(obj->getHeartbeatTime() + 100);
msleep(1500);
CHECK( ui->getValue(511) );
}
// -----------------------------------------------------------------------------
......@@ -3,7 +3,7 @@
<settings>
<set name="class-name" val="TestObject"/>
<set name="msg-count" val="30"/>
<set name="sleep-msec" val="150"/>
<set name="sleep-msec" val="100"/>
</settings>
<variables>
</variables>
......
......@@ -8,5 +8,5 @@
./uniset2-start.sh -f ./tests $* -- --confile ./sm-configure.xml --pulsar-id Pulsar_S --pulsar-msec 1000 --e-filter evnt_test \
--heartbeat-node localhost --heartbeat-check-time 1000
--heartbeat-node localhost --heartbeat-check-time 1000
#--dlog-add-levels any
......@@ -167,6 +167,7 @@ extensions/SharedMemory/tests/NullSM.h
extensions/SharedMemory/tests/TestObject.cc
extensions/SharedMemory/tests/TestObject.h
extensions/SharedMemory/tests/testobject.src.xml
extensions/SharedMemory/tests/sm-configure.xml
extensions/SharedMemoryPlus/Makefile.am
extensions/SharedMemoryPlus/smemory-plus.cc
extensions/SharedMemoryPlus/test.xml
......
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