Commit f4f1c874 authored by Pavel Vainerman's avatar Pavel Vainerman

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

parent d6b8264c
......@@ -135,19 +135,18 @@
<!-- vtypes test -->
<item 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 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 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="-100000" id="2001" mbs="1" mbreg="100" iotype="AI" vtype="I2" name="TestVtype1" textname="Тестовый регистр для проверки vtype"/>
<item default="-100000" id="2002" mbs="1" mbreg="102" iotype="AI" vtype="I2r" name="TestVtype2" textname="Тестовый регистр для проверки vtype"/>
<item default="4294967295" id="2003" mbs="1" mbreg="104" iotype="AI" vtype="U2" name="TestVtype3" textname="Тестовый регистр для проверки vtype"/>
<item default="4294967295" id="2004" mbs="1" mbreg="106" iotype="AI" vtype="U2r" name="TestVtype4" textname="Тестовый регистр для проверки vtype"/>
<item default="200" id="2005" mbs="1" mbreg="108" iotype="AI" vtype="byte" nbyte="1" name="TestVtype5" 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="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="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 id="2012" mbs="1" mbreg="119" iotype="AI" vtype="unsigned" name="TestVtype12" textname="Тестовый регистр для проверки vtype"/>
<item default="-100" id="2011" mbs="1" mbreg="118" iotype="AI" vtype="signed" name="TestVtype11" 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="Тестовый датчик"/>
......
......@@ -420,26 +420,67 @@ TEST_CASE("(0x10): write register outputs or memories","[modbus][mbslave][mbtcps
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]")
{
using namespace VTypes;
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]")
{
InitTest();
FAIL("Tests for '0x10 and vtypes' not yet..");
}
#if 0
......
......@@ -733,7 +733,7 @@ namespace ModbusRTU
void clear();
inline bool isFull()
{
return ( quant*sizeof(ModbusData) >= MAXLENPACKET );
return ( quant >= MAXDATALEN );
}
// ------- from master -------
......@@ -1017,7 +1017,8 @@ namespace ModbusRTU
/*! проверка на переполнение */
inline bool isFull()
{
return ( sizeof(subf)+count*sizeof(ModbusData) >= MAXLENPACKET );
// (1)subf + data count
return ( 1+count >= MAXDATALEN );
}
/*! размер данных(после заголовка) у данного типа сообщения */
......@@ -1213,7 +1214,7 @@ namespace ModbusRTU
/*! проверка на переполнение */
inline bool isFull()
{
return ( count*sizeof(ModbusData) >= MAXLENPACKET );
return ( count >= MAXDATALEN );
}
/*! размер данных(после заголовка) у данного типа сообщения */
......
......@@ -7,7 +7,8 @@ noinst_PROGRAMS = tests tests_with_conf
#umutex threadtst dlog
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_CPPFLAGS = -I$(top_builddir)/include $(SIGC_CFLAGS) $(COMCPP_CFLAGS)
......
#include <catch.hpp>
#include "ModbusTypes.h"
#include "modbus/ModbusTypes.h"
using namespace std;
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