2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-09 07:44:19 +00:00
fhem-mirror/fhem/t/FHEM/98_Modbus/42_MasterRTU.t
StefanStrobel 1e65bde69d 98:HTTPMOD: Updated tests for HTTPMOD and Modbus
git-svn-id: https://svn.fhem.de/fhem/trunk@28645 2b470e98-0d58-463d-a4d8-8e2adae1ed80
2024-03-12 18:37:07 +00:00

174 lines
4.8 KiB
Perl

##############################################
# test modbus RTU Master
##############################################
package main;
use strict;
use warnings;
use Test::More;
use Time::HiRes qw( gettimeofday tv_interval); # return time as float, not just full seconds
use FHEM::HTTPMOD::Utils qw(:all);
use FHEM::Modbus::TestUtils qw(:all);
NextStep();
sub testStep1 {
fhem 'attr MS verbose 4';
fhem 'attr PWP verbose 5';
LogStep('start reread');
FhemTestUtils_resetLogs();
fhem('set PWP reread');
return;
}
sub testStep2 {
LogStep('simulate normal reception');
SimRead('MS', '05030a0137110001381100010dac7b'); # normal response
return;
}
sub testStep3 {
LogStep('check reception and start second reread');
#is(FhemTestUtils_gotEvent(qr/PWP:unnamed-h256:\s31\.1/xms), 1, "Parse unnamed");
is(FhemTestUtils_gotEvent(qr/PWP:Temp_Wasser_Ein:\s31\.1/xms), 1, "Parse TempEin");
is(FhemTestUtils_gotEvent(qr/PWP:Temp_Wasser_Aus:\s31\.2/xms), 1, "Parse TempAus");
is(FhemTestUtils_gotEvent(qr/PWP:Temp_Verdampfer:\s26\.9/xms), 1, "Parse TempVerdampfer");
FhemTestUtils_resetLogs();
FhemTestUtils_resetEvents();
fhem 'set PWP reread';
return;
}
sub testStep4 {
LogStep('simulate short response');
SimRead('MS', '05030a013711000138110091a8'); # short response
return 1.1; # next step after 1.1 seconds
}
sub testStep5 {
LogStep('verify failed short response and then allow them and reread');
is(FhemTestUtils_gotLog('got short but valid frame'), 1, "short frame");
is(FhemTestUtils_gotEvent(qr/PWP:Temp_Wasser_Ein:\s31\.1/xms), 0, "No TempEin");
FhemTestUtils_resetLogs();
FhemTestUtils_resetEvents();
fhem 'attr PWP dev-h-allowShortResponses 1';
fhem 'set PWP reread';
return;
}
sub testStep6 {
LogStep('simulate another short response');
SimRead('MS', '05030a013711000138110091a8'); # short response
return;
}
sub testStep7 {
LogStep('verify valid short response reception and send another reread');
is(FhemTestUtils_gotEvent(qr/PWP:Temp_Wasser_Ein:\s31\.1/xms), 1, "Parse TempEin");
is(FhemTestUtils_gotEvent(qr/PWP:Temp_Wasser_Aus:\s31\.2/xms), 1, "Parse TempAus");
is(FhemTestUtils_gotEvent(qr/PWP:Temp_Verdampfer:\s26\.9/xms), 0, "No Parse TempVerdampfer");
FhemTestUtils_resetLogs();
FhemTestUtils_resetEvents();
fhem('attr PWP dev-h-brokenFC3 1');
fhem 'attr MS verbose 5';
fhem('set PWP reread');
return;
}
sub testStep10 {
LogStep('simulate broken fc3 response');
SimRead('MS', '050301000137110001381100010dd04d'); # response type broken FC3
return;
}
sub testStep11 {
LogStep('verify brokenfc3 reception and send another reread');
is(FhemTestUtils_gotEvent(qr/PWP:Temp_Wasser_Ein:\s31\.1/xms), 1, "Parse TempEin");
is(FhemTestUtils_gotEvent(qr/PWP:Temp_Wasser_Aus:\s31\.2/xms), 1, "Parse TempAus");
is(FhemTestUtils_gotEvent(qr/PWP:Temp_Verdampfer:\s26\.9/xms), 1, "Parse TempVerdampfer");
FhemTestUtils_resetLogs();
FhemTestUtils_resetEvents();
fhem('attr PWP dev-h-brokenFC3 0');
return 0.1;
}
sub testStep30 {
LogStep('check polldelay');
fhem('attr PWP obj-h256-polldelay 0');
fhem('attr PWP obj-h258-polldelay 0');
fhem('attr PWP obj-h260-polldelay 0.4');
fhem('set PWP reread');
return;
}
sub testStep31 {
LogStep('check results');
is(FhemTestUtils_gotLog('Simulate sending to none: 05030100000305b3'), 1, "request for 256 and 258 without 260 seen");
SimRead('MS', '050302013709c2'); # simulate response to get rid of pending request
return 0.2;
}
sub testStep40 {
LogStep('new request for response with added 0');
FhemTestUtils_resetLogs();
FhemTestUtils_resetEvents();
fhem 'attr PWP obj-h500-reading dummy500';
fhem 'attr PWP obj-h501-reading dummy501';
fhem 'attr PWP nonPrioritizedGet 1';
fhem('get PWP dummy500');
return;
}
sub testStep41 {
LogStep('simulate reception of broken response with added 0');
fhem 'attr PWP verbose 5';
SimRead('MS', '050302013709c200');
return 0.2;
}
sub testStep42 {
LogStep('check reception of response with added 0');
is(FhemTestUtils_gotLog('called from HandleResponse with data hex 0137, type h'), 1, "correct data part extracted");
is(FhemTestUtils_gotEvent(qr/PWP:dummy500:\s311/xms), 1, "Parse h500");
fhem 'attr PWP verbose 3';
return;
}
sub testStep43 {
LogStep('next normal request');
FhemTestUtils_resetLogs();
FhemTestUtils_resetEvents();
fhem('get PWP dummy500');
return;
}
sub testStep44 {
LogStep('simulate normal reception again');
SimRead('MS', '050302013709c2');
return 0.2;
}
sub testStep45 {
LogStep('check final normal reception');
is(FhemTestUtils_gotEvent(qr/PWP:dummy500:\s311/xms), 1, "Parse h500");
return;
}
1;