kopia lustrzana https://github.com/weetmuts/wmbusmeters
Better error messages when trying to load a driver file with errors.
rodzic
22d6880385
commit
a385737984
|
@ -38,13 +38,17 @@ bool DriverDynamic::load(DriverInfo *di, const string &file)
|
|||
}
|
||||
|
||||
const char *name = xmqGetString(doc, NULL, "/driver/name");
|
||||
if (!name) error("(dynamic) Error in %s cannot find driver/name\n"
|
||||
" A driver file looks like: driver { name = abc123 ... }\n", file.c_str());
|
||||
|
||||
if (!is_lowercase_alnum_text(name)) error("(dynamic) Error in %s invalid driver name \"%s\"\n"
|
||||
" The driver name must consist of lower case ascii a-z and digits 0-9.\n",
|
||||
file.c_str(), name);
|
||||
|
||||
const char *default_fields = xmqGetString(doc, NULL, "/driver/default_fields");
|
||||
|
||||
const char *meter_type_s = xmqGetString(doc, NULL, "/driver/meter_type");
|
||||
if (!meter_type_s) error("(dynamic) Error in %s cannot find driver/meter_type\n"
|
||||
" Remember to add: meter_type = ...\n", file.c_str());
|
||||
|
||||
MeterType meter_type = toMeterType(meter_type_s);
|
||||
|
||||
if (meter_type == MeterType::UnknownMeter) error("(dynamic) Error in %s unknown meter type %s\n"
|
||||
|
@ -52,6 +56,12 @@ bool DriverDynamic::load(DriverInfo *di, const string &file)
|
|||
,
|
||||
file.c_str(), meter_type_s, availableMeterTypes());
|
||||
|
||||
const char *default_fields = xmqGetString(doc, NULL, "/driver/default_fields");
|
||||
if (!default_fields) error("(dynamic) Error in %s cannot find driver/default_fields\n"
|
||||
" Remember to add: default_fields = name,id,total_m3,timestamp\n"
|
||||
" Where you change total_m3 to your meters most important field.\n", file.c_str());
|
||||
|
||||
|
||||
verbose("(dynamic) loading %s %s\n", meter_type_s, name);
|
||||
|
||||
di->setName(name);
|
||||
|
@ -61,6 +71,11 @@ bool DriverDynamic::load(DriverInfo *di, const string &file)
|
|||
|
||||
xmqForeach(doc, NULL, "/driver/detect/mvt", add_detect, di);
|
||||
|
||||
if (di->detect().size() == 0) error("(dynamic) Error in %s cannot find any driver/detect/mvt triplets\n"
|
||||
" Remember to add: detect { mvt = AAA,05,07 mvt = AAA,06,07 ... }\n"
|
||||
" The triplets contain MANUFACTURER,VERSION,TYPE\n"
|
||||
" and you can see these values when listening to all meters.\n", file.c_str());
|
||||
|
||||
di->setConstructor([](MeterInfo& mi, DriverInfo& di){ return shared_ptr<Meter>(new DriverDynamic(mi, di)); });
|
||||
|
||||
return true;
|
||||
|
@ -85,7 +100,10 @@ XMQProceed DriverDynamic::add_detect(XMQDoc *doc, XMQNode *detect, void *dd)
|
|||
string mvt = xmqGetString(doc, detect, ".");
|
||||
|
||||
auto fields = splitString(mvt, ',');
|
||||
if (fields.size() != 3) error("Cannot load driver %s, wrong number of fields in mvt triple.\n", di->name().str().c_str());
|
||||
if (fields.size() != 3) error("(dynamic) Error in %s, wrong number of fields in mvt triple: mvt = %s\n"
|
||||
" There should be three fields, for example: mvt = AAA,07,05\n",
|
||||
di->getDynamicFileName().c_str(),
|
||||
mvt.c_str());
|
||||
|
||||
string mfct = fields[0];
|
||||
int mfct_code = 0;
|
||||
|
|
3
test.sh
3
test.sh
|
@ -178,6 +178,9 @@ if [ "$?" != "0" ]; then RC="1"; fi
|
|||
./tests/test_loadable_drivers.sh $PROG
|
||||
if [ "$?" != "0" ]; then RC="1"; fi
|
||||
|
||||
./tests/test_bad_driver.sh $PROG
|
||||
if [ "$?" != "0" ]; then RC="1"; fi
|
||||
|
||||
if [ -x ../additional_tests.sh ]
|
||||
then
|
||||
(cd ..; ./additional_tests.sh $PROG)
|
||||
|
|
|
@ -0,0 +1,152 @@
|
|||
#!/bin/sh
|
||||
|
||||
PROG="$1"
|
||||
TEST=testoutput
|
||||
mkdir -p $TEST
|
||||
|
||||
performCheck() {
|
||||
if [ "$?" = "0" ]
|
||||
then
|
||||
cat $TEST/test_output.txt | sed 's/"timestamp":"....-..-..T..:..:..Z"/"timestamp":"1111-11-11T11:11:11Z"/' > $TEST/test_response.txt
|
||||
diff $TEST/test_expected.txt $TEST/test_response.txt
|
||||
if [ "$?" = "0" ]
|
||||
then
|
||||
echo "OK: $TESTNAME"
|
||||
TESTRESULT="OK"
|
||||
else
|
||||
if [ "$USE_MELD" = "true" ]
|
||||
then
|
||||
meld $TEST/test_expected.txt $TEST/test_response.txt
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "ERROR: $TESTNAME $0"
|
||||
echo "wmbusmeters returned error code: $?"
|
||||
cat $TEST/test_output.txt
|
||||
fi
|
||||
}
|
||||
|
||||
########################################################################################################################
|
||||
########################################################################################################################
|
||||
########################################################################################################################
|
||||
|
||||
TESTNAME="Test no driver root"
|
||||
TESTRESULT="ERROR"
|
||||
cat > $TEST/driver.xmq <<EOF
|
||||
ddriver { name = Iffo }
|
||||
EOF
|
||||
|
||||
cat > $TEST/test_expected.txt <<EOF
|
||||
(dynamic) Error in testoutput/driver.xmq cannot find driver/name
|
||||
A driver file looks like: driver { name = abc123 ... }
|
||||
EOF
|
||||
|
||||
$PROG 1844AE4C4455223399077A55000000_041389E20100023B0000 Hej $TEST/driver.xmq 33225544 NO_KEY > $TEST/test_output.txt 2>&1 || true
|
||||
|
||||
performCheck
|
||||
|
||||
TESTNAME="Test bad driver name"
|
||||
TESTRESULT="ERROR"
|
||||
cat > $TEST/driver.xmq <<EOF
|
||||
driver { name = Iffo }
|
||||
EOF
|
||||
|
||||
cat > $TEST/test_expected.txt <<EOF
|
||||
(dynamic) Error in testoutput/driver.xmq invalid driver name "Iffo"
|
||||
The driver name must consist of lower case ascii a-z and digits 0-9.
|
||||
EOF
|
||||
|
||||
$PROG 1844AE4C4455223399077A55000000_041389E20100023B0000 Hej $TEST/driver.xmq 33225544 NO_KEY > $TEST/test_output.txt 2>&1 || true
|
||||
|
||||
performCheck
|
||||
|
||||
TESTNAME="Test no meter_type"
|
||||
TESTRESULT="ERROR"
|
||||
cat > $TEST/driver.xmq <<EOF
|
||||
driver { name = iffo }
|
||||
EOF
|
||||
|
||||
cat > $TEST/test_expected.txt <<EOF
|
||||
(dynamic) Error in testoutput/driver.xmq cannot find driver/meter_type
|
||||
Remember to add: meter_type = ...
|
||||
EOF
|
||||
|
||||
$PROG 1844AE4C4455223399077A55000000_041389E20100023B0000 Hej $TEST/driver.xmq 33225544 NO_KEY > $TEST/test_output.txt 2>&1 || true
|
||||
|
||||
performCheck
|
||||
|
||||
TESTNAME="Test bad meter_type"
|
||||
TESTRESULT="ERROR"
|
||||
cat > $TEST/driver.xmq <<EOF
|
||||
driver { name = iffo meter_type = gurka }
|
||||
EOF
|
||||
|
||||
cat > $TEST/test_expected.txt <<EOF
|
||||
(dynamic) Error in testoutput/driver.xmq unknown meter type gurka
|
||||
Available meter types are:
|
||||
DoorWindowDetector
|
||||
ElectricityMeter
|
||||
GasMeter
|
||||
HeatCostAllocationMeter
|
||||
HeatMeter
|
||||
HeatCoolingMeter
|
||||
PulseCounter
|
||||
SmokeDetector
|
||||
TempHygroMeter
|
||||
WaterMeter
|
||||
PressureSensor
|
||||
EOF
|
||||
|
||||
$PROG 1844AE4C4455223399077A55000000_041389E20100023B0000 Hej $TEST/driver.xmq 33225544 NO_KEY > $TEST/test_output.txt 2>&1 || true
|
||||
|
||||
performCheck
|
||||
|
||||
TESTNAME="Test no default_fields"
|
||||
TESTRESULT="ERROR"
|
||||
cat > $TEST/driver.xmq <<EOF
|
||||
driver { name = iffo meter_type = WaterMeter }
|
||||
EOF
|
||||
|
||||
cat > $TEST/test_expected.txt <<EOF
|
||||
(dynamic) Error in testoutput/driver.xmq cannot find driver/default_fields
|
||||
Remember to add: default_fields = name,id,total_m3,timestamp
|
||||
Where you change total_m3 to your meters most important field.
|
||||
EOF
|
||||
|
||||
$PROG 1844AE4C4455223399077A55000000_041389E20100023B0000 Hej $TEST/driver.xmq 33225544 NO_KEY > $TEST/test_output.txt 2>&1 || true
|
||||
|
||||
performCheck
|
||||
|
||||
TESTNAME="Test no detect mvt:s"
|
||||
TESTRESULT="ERROR"
|
||||
cat > $TEST/driver.xmq <<EOF
|
||||
driver { name = iffo meter_type = WaterMeter default_fields = name,id,total_m3,timestamp }
|
||||
EOF
|
||||
|
||||
cat > $TEST/test_expected.txt <<EOF
|
||||
(dynamic) Error in testoutput/driver.xmq cannot find any driver/detect/mvt triplets
|
||||
Remember to add: detect { mvt = AAA,05,07 mvt = AAA,06,07 ... }
|
||||
The triplets contain MANUFACTURER,VERSION,TYPE
|
||||
and you can see these values when listening to all meters.
|
||||
EOF
|
||||
|
||||
$PROG 1844AE4C4455223399077A55000000_041389E20100023B0000 Hej $TEST/driver.xmq 33225544 NO_KEY > $TEST/test_output.txt 2>&1 || true
|
||||
|
||||
performCheck
|
||||
|
||||
TESTNAME="Test bad mvt"
|
||||
TESTRESULT="ERROR"
|
||||
cat > $TEST/driver.xmq <<EOF
|
||||
driver { name = iffo meter_type = WaterMeter default_fields = name,id,total_m3,timestamp
|
||||
detect { mvt = alfa }
|
||||
}
|
||||
EOF
|
||||
|
||||
cat > $TEST/test_expected.txt <<EOF
|
||||
(dynamic) Error in testoutput/driver.xmq, wrong number of fields in mvt triple: mvt = alfa
|
||||
There should be three fields, for example: mvt = AAA,07,05
|
||||
EOF
|
||||
|
||||
$PROG 1844AE4C4455223399077A55000000_041389E20100023B0000 Hej $TEST/driver.xmq 33225544 NO_KEY > $TEST/test_output.txt 2>&1 || true
|
||||
|
||||
performCheck
|
Ładowanie…
Reference in New Issue