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() ...@@ -79,8 +79,15 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
// "сердцебиение" // "сердцебиение"
if( idHeartBeat!=DefaultObjectId &amp;&amp; ptHeartBeat.checkTime() ) if( idHeartBeat!=DefaultObjectId &amp;&amp; ptHeartBeat.checkTime() )
{ {
ui->setValue(idHeartBeat,maxHeartBeat,UniversalIO::AI); try
ptHeartBeat.reset(); {
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() ...@@ -82,8 +82,15 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
// "сердцебиение" // "сердцебиение"
if( idHeartBeat!=DefaultObjectId &amp;&amp; ptHeartBeat.checkTime() ) if( idHeartBeat!=DefaultObjectId &amp;&amp; ptHeartBeat.checkTime() )
{ {
ui->setValue(idHeartBeat,maxHeartBeat,UniversalIO::AI); try
ptHeartBeat.reset(); {
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() ...@@ -103,7 +110,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
} }
catch( const std::exception&amp;ex ) 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 ) if( !active )
......
...@@ -78,8 +78,15 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback() ...@@ -78,8 +78,15 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
// "сердцебиение" // "сердцебиение"
if( idHeartBeat!=DefaultObjectId &amp;&amp; ptHeartBeat.checkTime() ) if( idHeartBeat!=DefaultObjectId &amp;&amp; ptHeartBeat.checkTime() )
{ {
ui->setValue(idHeartBeat,maxHeartBeat,UniversalIO::AI); try
ptHeartBeat.reset(); {
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() ...@@ -82,8 +82,15 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
// "сердцебиение" // "сердцебиение"
if( idHeartBeat!=DefaultObjectId &amp;&amp; ptHeartBeat.checkTime() ) if( idHeartBeat!=DefaultObjectId &amp;&amp; ptHeartBeat.checkTime() )
{ {
ui->setValue(idHeartBeat,maxHeartBeat,UniversalIO::AI); try
ptHeartBeat.reset(); {
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* ...@@ -355,10 +355,10 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preSysCommand( const SystemMessage*
switch( _sm->command ) switch( _sm->command )
{ {
case SystemMessage::WatchDog: 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() ) 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; break;
} }
case SystemMessage::StartUp: case SystemMessage::StartUp:
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
Name: libuniset2 Name: libuniset2
Version: 2.1 Version: 2.1
Release: alt1 Release: alt2
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
...@@ -455,6 +455,11 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -455,6 +455,11 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# .. # ..
%changelog %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 * Thu May 28 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt1
- repack header files.. - repack header files..
......
...@@ -17,6 +17,7 @@ check-local: atconfig package.m4 $(TESTSUITE) sm-tests.at ...@@ -17,6 +17,7 @@ check-local: atconfig package.m4 $(TESTSUITE) sm-tests.at
clean-local: clean-local:
rm -rf $(CLEANFILES) rm -rf $(CLEANFILES)
rm -rf $(COVERAGE_REPORT_DIR) rm -rf $(COVERAGE_REPORT_DIR)
rm -rf *_SK.*
TestObject_SK.cc TestObject.h: testobject.src.xml 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 $(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 ) ...@@ -35,3 +35,13 @@ void TestObject::sysCommand( const UniSetTypes::SystemMessage* sm )
evntIsOK = true; evntIsOK = true;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void TestObject::stopHeartbeat()
{
maxHeartBeat = 0;
}
// -----------------------------------------------------------------------------
void TestObject::runHeartbeat( int max )
{
maxHeartBeat = max;
}
// -----------------------------------------------------------------------------
...@@ -15,6 +15,12 @@ class TestObject: ...@@ -15,6 +15,12 @@ class TestObject:
void askNotifyFirstNotNull(); void askNotifyFirstNotNull();
inline bool getEvnt(){ return evntIsOK; } inline bool getEvnt(){ return evntIsOK; }
void stopHeartbeat();
void runHeartbeat( int max=3 );
inline timeout_t getHeartbeatTime(){ return ptHeartBeat.getInterval(); }
protected: protected:
TestObject(); TestObject();
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
<item node="localhost" name="ReservSharedMemory"/> <item node="localhost" name="ReservSharedMemory"/>
</ReservList> </ReservList>
</SharedMemory> </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> </settings>
<ObjectsMap idfromfile="1"> <ObjectsMap idfromfile="1">
<nodes port="2809" unet_broadcast_ip="192.168.1.255" unet_broadcast_ip2="192.168.122.255"> <nodes port="2809" unet_broadcast_ip="192.168.1.255" unet_broadcast_ip2="192.168.122.255">
...@@ -48,7 +48,8 @@ ...@@ -48,7 +48,8 @@
<item id="507" iotype="DI" name="Heartbeat_S" textname="Heartbeat"/> <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="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 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> </sensors>
<thresholds name="thresholds"> <thresholds name="thresholds">
<sensor iotype="AI" name="AI1_AS"> <sensor iotype="AI" name="AI1_AS">
......
...@@ -112,15 +112,15 @@ TEST_CASE("[SM]: askSensors", "[sm][ask]") ...@@ -112,15 +112,15 @@ TEST_CASE("[SM]: askSensors", "[sm][ask]")
CHECK( obj->in_sensor_s ); CHECK( obj->in_sensor_s );
ui->setValue(509, 0); ui->setValue(509, 0);
msleep(200); msleep(300);
CHECK_FALSE( obj->in_sensor_s ); CHECK_FALSE( obj->in_sensor_s );
obj->out_output_c = 1200; obj->out_output_c = 1200;
msleep(200); msleep(300);
REQUIRE( ui->getValue(508) == 1200 ); REQUIRE( ui->getValue(508) == 1200 );
obj->out_output_c = 100; obj->out_output_c = 100;
msleep(200); msleep(300);
REQUIRE( ui->getValue(508) == 100 ); REQUIRE( ui->getValue(508) == 100 );
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -158,3 +158,22 @@ TEST_CASE("[SM]: askDoNotNotify", "[sm][ask]") ...@@ -158,3 +158,22 @@ TEST_CASE("[SM]: askDoNotNotify", "[sm][ask]")
CHECK( obj->in_sensor_s ); // должно придти т.к. равно "1" 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 @@ ...@@ -3,7 +3,7 @@
<settings> <settings>
<set name="class-name" val="TestObject"/> <set name="class-name" val="TestObject"/>
<set name="msg-count" val="30"/> <set name="msg-count" val="30"/>
<set name="sleep-msec" val="150"/> <set name="sleep-msec" val="100"/>
</settings> </settings>
<variables> <variables>
</variables> </variables>
......
...@@ -8,5 +8,5 @@ ...@@ -8,5 +8,5 @@
./uniset2-start.sh -f ./tests $* -- --confile ./sm-configure.xml --pulsar-id Pulsar_S --pulsar-msec 1000 --e-filter evnt_test \ ./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 #--dlog-add-levels any
...@@ -167,6 +167,7 @@ extensions/SharedMemory/tests/NullSM.h ...@@ -167,6 +167,7 @@ extensions/SharedMemory/tests/NullSM.h
extensions/SharedMemory/tests/TestObject.cc extensions/SharedMemory/tests/TestObject.cc
extensions/SharedMemory/tests/TestObject.h extensions/SharedMemory/tests/TestObject.h
extensions/SharedMemory/tests/testobject.src.xml extensions/SharedMemory/tests/testobject.src.xml
extensions/SharedMemory/tests/sm-configure.xml
extensions/SharedMemoryPlus/Makefile.am extensions/SharedMemoryPlus/Makefile.am
extensions/SharedMemoryPlus/smemory-plus.cc extensions/SharedMemoryPlus/smemory-plus.cc
extensions/SharedMemoryPlus/test.xml 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