Commit f4f1c874 authored by Pavel Vainerman's avatar Pavel Vainerman

(Modbus): работа над написанием тестов

parent d6b8264c
...@@ -135,19 +135,18 @@ ...@@ -135,19 +135,18 @@
<!-- vtypes test --> <!-- vtypes test -->
<item id="2001" mbs="1" mbreg="100" iotype="AI" vtype="I2" name="TestVtype1" textname="Тестовый регистр для проверки vtype"/> <item default="-100000" id="2001" mbs="1" mbreg="100" iotype="AI" vtype="I2" name="TestVtype1" textname="Тестовый регистр для проверки vtype"/>
<item id="2002" mbs="1" mbreg="102" iotype="AI" vtype="I2r" name="TestVtype2" textname="Тестовый регистр для проверки vtype"/> <item default="-100000" id="2002" mbs="1" mbreg="102" iotype="AI" vtype="I2r" name="TestVtype2" textname="Тестовый регистр для проверки vtype"/>
<item id="2003" mbs="1" mbreg="104" iotype="AI" vtype="U2" name="TestVtype3" textname="Тестовый регистр для проверки vtype"/> <item default="4294967295" id="2003" mbs="1" mbreg="104" iotype="AI" vtype="U2" name="TestVtype3" textname="Тестовый регистр для проверки vtype"/>
<item id="2004" mbs="1" mbreg="106" iotype="AI" vtype="U2r" name="TestVtype4" textname="Тестовый регистр для проверки vtype"/> <item default="4294967295" id="2004" mbs="1" mbreg="106" iotype="AI" vtype="U2r" name="TestVtype4" textname="Тестовый регистр для проверки vtype"/>
<item id="2005" mbs="1" mbreg="108" iotype="AI" vtype="byte" nbyte="1" name="TestVtype5" textname="Тестовый регистр для проверки vtype"/> <item default="200" id="2005" mbs="1" mbreg="108" iotype="AI" vtype="byte" nbyte="1" name="TestVtype5" textname="Тестовый регистр для проверки vtype"/>
<item id="2006" mbs="1" mbreg="108" iotype="AI" vtype="byte" nbyte="2" name="TestVtype6" textname="Тестовый регистр для проверки vtype"/> <item default="200" id="2006" mbs="1" mbreg="108" iotype="AI" vtype="byte" nbyte="2" name="TestVtype6" textname="Тестовый регистр для проверки vtype"/>
<item id="2007" mbs="1" mbreg="110" iotype="AI" vtype="F2" name="TestVtype7" textname="Тестовый регистр для проверки vtype"/> <item id="2007" mbs="1" mbreg="110" iotype="AI" vtype="F2" name="TestVtype7" textname="Тестовый регистр для проверки vtype"/>
<item id="2008" mbs="1" mbreg="112" iotype="AI" vtype="F2r" name="TestVtype8" textname="Тестовый регистр для проверки vtype"/> <item id="2008" mbs="1" mbreg="112" iotype="AI" vtype="F2r" name="TestVtype8" textname="Тестовый регистр для проверки vtype"/>
<item id="2009" mbs="1" mbreg="110" iotype="AI" vtype="F2" name="TestVtype9" textname="Тестовый регистр для проверки vtype"/> <item id="2009" mbs="1" mbreg="110" iotype="AI" vtype="F2" name="TestVtype9" textname="Тестовый регистр для проверки vtype"/>
<item id="2010" mbs="1" mbreg="114" iotype="AI" vtype="F4" name="TestVtype10" textname="Тестовый регистр для проверки vtype"/> <item id="2010" mbs="1" mbreg="114" iotype="AI" vtype="F4" name="TestVtype10" textname="Тестовый регистр для проверки vtype"/>
<item id="2011" mbs="1" mbreg="118" iotype="AI" vtype="signed" name="TestVtype11" textname="Тестовый регистр для проверки vtype"/> <item default="-100" id="2011" mbs="1" mbreg="118" iotype="AI" vtype="signed" name="TestVtype11" textname="Тестовый регистр для проверки vtype"/>
<item id="2012" mbs="1" mbreg="119" iotype="AI" vtype="unsigned" name="TestVtype12" textname="Тестовый регистр для проверки vtype"/> <item default="65534" id="2012" mbs="1" mbreg="119" iotype="AI" vtype="unsigned" name="TestVtype12" textname="Тестовый регистр для проверки vtype"/>
<item id="10000" iotype="DI" name="TestMode_S" textname="Тестовый датчик"/> <item id="10000" iotype="DI" name="TestMode_S" textname="Тестовый датчик"/>
......
...@@ -420,26 +420,67 @@ TEST_CASE("(0x10): write register outputs or memories","[modbus][mbslave][mbtcps ...@@ -420,26 +420,67 @@ TEST_CASE("(0x10): write register outputs or memories","[modbus][mbslave][mbtcps
REQUIRE( ex.err == ModbusRTU::erBadDataAddress ); REQUIRE( ex.err == ModbusRTU::erBadDataAddress );
} }
} }
SECTION("Test: limit the amount of data verification")
{
ModbusRTU::WriteOutputMessage msg(slaveaddr,tREG);
for( int i=0; i<ModbusRTU::MAXDATALEN; i++ )
msg.addData(10+i);
CHECK_FALSE( msg.isFull() );
msg.addData(1);
CHECK( msg.isFull() );
}
} }
TEST_CASE("Read(0x03,0x04): vtypes..","[modbus][mbslave][mbtcpslave]") TEST_CASE("Read(0x03,0x04): vtypes..","[modbus][mbslave][mbtcpslave]")
{ {
using namespace VTypes;
InitTest(); InitTest();
SECTION("Test: read vtype 'I2'")
{
ModbusRTU::ModbusData tREG = 100;
SECTION("Test: read03")
{
ModbusRTU::ReadOutputRetMessage ret = mb->read03(slaveaddr,tREG,2);
I2 i2(ret.data,ret.count);
REQUIRE( (int)i2 == -100000 );
}
SECTION("Test: read04")
{
ModbusRTU::ReadInputRetMessage ret = mb->read04(slaveaddr,tREG,2);
I2 i2(ret.data,ret.count);
REQUIRE( (int)i2 == -100000 );
}
}
SECTION("Test: read vtype 'I2r'")
{
ModbusRTU::ModbusData tREG = 102;
SECTION("Test: read03")
{
ModbusRTU::ReadOutputRetMessage ret = mb->read03(slaveaddr,tREG,2);
I2r i2r(ret.data,ret.count);
REQUIRE( (int)i2r == -100000 );
}
SECTION("Test: read04")
{
ModbusRTU::ReadInputRetMessage ret = mb->read04(slaveaddr,tREG,2);
I2r i2r(ret.data,ret.count);
REQUIRE( (int)i2r == -100000 );
}
}
SECTION("Test: read vtype 'U2'")
{
ModbusRTU::ModbusData tREG = 101;
SECTION("Test: read03")
{
ModbusRTU::ReadOutputRetMessage ret = mb->read03(slaveaddr,tREG,2);
U2 u2(ret.data,ret.count);
REQUIRE( (unsigned int)u2 == 4294967295 );
}
SECTION("Test: read04")
{
ModbusRTU::ReadInputRetMessage ret = mb->read04(slaveaddr,tREG,2);
U2 u2(ret.data,ret.count);
REQUIRE( (unsigned int)u2 == 4294967295 );
}
}
} }
TEST_CASE("Write(0x10): vtypes..","[modbus][mbslave][mbtcpslave]") TEST_CASE("Write(0x10): vtypes..","[modbus][mbslave][mbtcpslave]")
{ {
InitTest(); InitTest();
FAIL("Tests for '0x10 and vtypes' not yet..");
} }
#if 0 #if 0
......
...@@ -733,7 +733,7 @@ namespace ModbusRTU ...@@ -733,7 +733,7 @@ namespace ModbusRTU
void clear(); void clear();
inline bool isFull() inline bool isFull()
{ {
return ( quant*sizeof(ModbusData) >= MAXLENPACKET ); return ( quant >= MAXDATALEN );
} }
// ------- from master ------- // ------- from master -------
...@@ -1017,7 +1017,8 @@ namespace ModbusRTU ...@@ -1017,7 +1017,8 @@ namespace ModbusRTU
/*! проверка на переполнение */ /*! проверка на переполнение */
inline bool isFull() inline bool isFull()
{ {
return ( sizeof(subf)+count*sizeof(ModbusData) >= MAXLENPACKET ); // (1)subf + data count
return ( 1+count >= MAXDATALEN );
} }
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
...@@ -1213,7 +1214,7 @@ namespace ModbusRTU ...@@ -1213,7 +1214,7 @@ namespace ModbusRTU
/*! проверка на переполнение */ /*! проверка на переполнение */
inline bool isFull() inline bool isFull()
{ {
return ( count*sizeof(ModbusData) >= MAXLENPACKET ); return ( count >= MAXDATALEN );
} }
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
......
...@@ -7,7 +7,8 @@ noinst_PROGRAMS = tests tests_with_conf ...@@ -7,7 +7,8 @@ noinst_PROGRAMS = tests tests_with_conf
#umutex threadtst dlog #umutex threadtst dlog
tests_SOURCES = tests.cc passivetimer.cc hourglass.cc delaytimer.cc unixml.cc sscanf_hex.cc \ tests_SOURCES = tests.cc passivetimer.cc hourglass.cc delaytimer.cc unixml.cc sscanf_hex.cc \
callbacktimer.cc trigger.cc triggerOR.cc triggerAND.cc triggerOUT.cc pulse.cc callbacktimer.cc trigger.cc triggerOR.cc triggerAND.cc triggerOUT.cc pulse.cc \
modbustypes.cc
tests_LDADD = $(top_builddir)/lib/libUniSet2.la $(SIGC_LIBS) $(COMCPP_LIBS) tests_LDADD = $(top_builddir)/lib/libUniSet2.la $(SIGC_LIBS) $(COMCPP_LIBS)
tests_CPPFLAGS = -I$(top_builddir)/include $(SIGC_CFLAGS) $(COMCPP_CFLAGS) tests_CPPFLAGS = -I$(top_builddir)/include $(SIGC_CFLAGS) $(COMCPP_CFLAGS)
......
#include <catch.hpp> #include <catch.hpp>
#include "ModbusTypes.h" #include "modbus/ModbusTypes.h"
using namespace std; using namespace std;
TEST_CASE("Modbus Types", "[modbus][modbus types]" ) TEST_CASE("Modbus Types", "[modbus][modbus types]" )
{ {
FAIL("Tests for 'Modbus types' not yet.."); SECTION("WriteOutputMessage: limit the amount of data verification")
{
ModbusRTU::WriteOutputMessage msg(0x01,1);
for( int i=0; i<(ModbusRTU::MAXDATALEN-1); i++ )
msg.addData(10+i);
CHECK_FALSE( msg.isFull() );
msg.addData(1);
CHECK( msg.isFull() );
}
WARN("Tests for 'Modbus types' incomplete..");
} }
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