some more tests

This commit is contained in:
hg 2015-06-12 16:02:49 +02:00
parent 88e36b0170
commit c3a7c19d33
3 changed files with 65 additions and 25 deletions

View File

@ -97,7 +97,7 @@ class LongFrame(ControlFrame):
def __init__(self, telegram, devices=[]):
super(LongFrame, self).__init__(telegram)
self.devices = devices
if self.devices != None:
if self.devices is not None:
for device in self.devices:
if not isinstance(device, Device):
raise InvalidDevicesStructureException()
@ -307,7 +307,7 @@ class LongFrame(ControlFrame):
# print vifeCode
(mask, value, descr, unit, factorMask, factorFunc) = vifeCode
if (vife & mask) == value:
if factorFunc == None:
if factorFunc is None:
retFactor = 1
else:
factorHelper = vife & factorMask
@ -339,7 +339,7 @@ class LongFrame(ControlFrame):
else:
retDescr = descr
retUnit = unit
if factorFunc != None:
if factorFunc is not None:
factorHelper = vif & factorMask
retFactor = factorFunc(factorHelper)
break
@ -379,7 +379,7 @@ class LongFrame(ControlFrame):
self.consumed += userDataLength
dataConvFunc = LongFrame.DataInformationBlock.DATA_FIELD_CODES[self.dif & 0x0f][2]
if dataConvFunc == None:
if dataConvFunc is None:
self.rawValue = 0
else:
self.rawValue = dataConvFunc(self.userData)
@ -413,10 +413,10 @@ class LongFrame(ControlFrame):
device = None
for d in self.devices:
if d.address == self.address:
print("device found")
#print("device found")
device = d
break
if device != None:
if device is not None:
self.comment = device.comment
else:
self.comment = '-'
@ -425,8 +425,11 @@ class LongFrame(ControlFrame):
dibIndex = 0
#print("Telegram length: %d" % len(self.telegram))
while True:
if device != None:
comment = device.dataItems[dibIndex]
if device is not None:
try:
comment = device.dataItems[dibIndex]
except IndexError:
raise DeviceItemsMismatchException()
else:
comment = '-'
dibIndex += 1

View File

@ -10,8 +10,29 @@ import MeterbusTypeConversion
import MeterbusLibExceptions
class TestFrameParsing(unittest.TestCase):
class TestCaseWFloat(unittest.TestCase):
def assertBetween(self, v, bottom, top):
self.assertTrue(v > bottom and v < top )
class TestFrameParsing(TestCaseWFloat):
def setUp(self):
#devices
self.devices = []
device_dishwasher_electric = MeterbusLib.Device(0x53, "Dishwasher", ["Energy total", "Energy partial", "Voltage", "Current", "Power", "img. Power"])
self.devices.append(device_dishwasher_electric)
device_3phase_electric = MeterbusLib.Device(0x50, "3 Phase Electric", ["Energy T1 total", "Energy T1 partial", "Energy T2 total", "Energy T2 partial",
"Voltage phase 1", "Current phase 1", "Power phase 1", "img. Power phase 1",
"Voltage phase 2", "Current phase 2", "Power phase 2", "img. Power phase 2",
"Voltage phase 3", "Current phase 3", "Power phase 3", "img. Power phase 3",
"converter ratio", "Power total", "img. Power total", "tariff"
])
self.devices.append(device_3phase_electric)
self.brokenDevices = []
device_dishwasher_electric = MeterbusLib.Device(0x53, "Dishwasher", ["Energy total", "Energy partial", "Voltage", "Current", "Power"])
self.brokenDevices.append(device_dishwasher_electric)
# dishwasher, electric
self.inputOkLongFrame_1phase_electric = "68 38 38 68 08 53 72 17 00 13 00 2E 19 24 02 D6 00 00 00 8C 10 04 01 02 00 00 8C 11 04 01 02 00 00 02 FD C9 FF 01 E4 00 02 FD DB FF 01 03 00 02 AC FF 01 01 00 82 40 AC FF 01 FA FF 20 16"
self.inputNOkLongFrame_1phase_electric_wrong_medium = "68 38 38 68 08 53 72 17 00 13 00 2E 19 24 FE D6 00 00 00 8C 10 04 01 02 00 00 8C 11 04 01 02 00 00 02 FD C9 FF 01 E4 00 02 FD DB FF 01 03 00 02 AC FF 01 01 00 82 40 AC FF 01 FA FF 1c 16"
@ -46,7 +67,7 @@ class TestFrameParsing(unittest.TestCase):
def test_OK_LongFrame_1phase_electric(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputOkLongFrame_1phase_electric)
telegram.parse()
self.assertIsInstance(telegram.frame, MeterbusLib.LongFrame)
@ -57,22 +78,36 @@ class TestFrameParsing(unittest.TestCase):
self.assertEqual(telegram.frame.fixedDataHeader.manufacturer, "FIN")
self.assertEqual(telegram.frame.fixedDataHeader.version, 36)
self.assertEqual(telegram.frame.fixedDataHeader.medium, "Electrity")
self.assertEqual(telegram.frame.comment, "Dishwasher")
self.assertEqual(telegram.frame.dib[0].comment, "Energy total")
self.assertEqual(telegram.frame.dib[0].rawValue, 201)
self.assertEqual(telegram.frame.dib[0].value, 2010)
self.assertEqual(telegram.frame.dib[3].comment, "Current")
self.assertEqual(telegram.frame.dib[3].rawValue, 3)
v = telegram.frame.dib[3].value
self.assertBetween(v, 0.2999, 0.3001)
def test_OK_LongFrame_1phase_electric_wrong_medium(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputNOkLongFrame_1phase_electric_wrong_medium)
with self.assertRaises(MeterbusLibExceptions.MediumConversionException):
telegram.parse()
def test_OK_LongFrame_1phase_electric_wrong_signature(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputNOkLongFrame_1phase_electric_wrong_signature)
with self.assertRaises(MeterbusLibExceptions.InvalidFrameException):
telegram.parse()
def test_OK_LongFrame_1phase_electric_device_items_wrong(self):
telegram = MeterbusLib.Telegram(self.brokenDevices)
telegram.fromHexString(self.inputOkLongFrame_1phase_electric)
with self.assertRaises(MeterbusLibExceptions.DeviceItemsMismatchException):
telegram.parse()
def test_OK_LongFrame_3phase_electric(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputOkLongFrame_3phase_electric)
telegram.parse()
self.assertIsInstance(telegram.frame, MeterbusLib.LongFrame)
@ -83,9 +118,11 @@ class TestFrameParsing(unittest.TestCase):
self.assertEqual(telegram.frame.fixedDataHeader.manufacturer, "FIN")
self.assertEqual(telegram.frame.fixedDataHeader.version, 22)
self.assertEqual(telegram.frame.fixedDataHeader.medium, "Electrity")
self.assertEqual(telegram.frame.comment, "3 Phase Electric")
def test_OK_LongFrame_water(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputOkLongFrame_water)
telegram.parse()
self.assertIsInstance(telegram.frame, MeterbusLib.LongFrame)
@ -99,7 +136,7 @@ class TestFrameParsing(unittest.TestCase):
def test_OK_LongFrame_gas(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputOkLongFrame_gas)
telegram.parse()
self.assertIsInstance(telegram.frame, MeterbusLib.LongFrame)
@ -112,7 +149,7 @@ class TestFrameParsing(unittest.TestCase):
self.assertEqual(telegram.frame.fixedDataHeader.medium, "Gas")
def test_OK_LongFrame_thermometer(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputOkLongFrame_thermometer)
telegram.parse()
self.assertIsInstance(telegram.frame, MeterbusLib.LongFrame)
@ -125,13 +162,13 @@ class TestFrameParsing(unittest.TestCase):
self.assertEqual(telegram.frame.fixedDataHeader.medium, "Other")
def test_OK_SingleCharacter(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputOkSingleCharacter)
telegram.parse()
self.assertIsInstance(telegram.frame, MeterbusLib.SingleCharacter)
def test_OK_Shortframe(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputOkShortframe)
telegram.parse()
self.assertIsInstance(telegram.frame, MeterbusLib.ShortFrame)
@ -139,7 +176,7 @@ class TestFrameParsing(unittest.TestCase):
self.assertEqual(telegram.frame.address, 2);
def test_OK_Controlframe(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputOKControlframe)
telegram.parse()
self.assertIsInstance(telegram.frame, MeterbusLib.ControlFrame)
@ -148,31 +185,31 @@ class TestFrameParsing(unittest.TestCase):
self.assertEqual(telegram.frame.ciField, 3);
def test_NOk_Shortframe_checksum_failure(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputNOkShortframe_checksum_failure)
with self.assertRaises(MeterbusLibExceptions.InvalidChecksumException):
telegram.parse()
def test_NOk_LongFrame_thermometer_checksum_failure(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputNOkLongFrame_thermometer_checksum_failure)
with self.assertRaises(MeterbusLibExceptions.InvalidChecksumException):
telegram.parse()
def test_NOk_Controlframe_wrong_stopcode(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputNOKControlframe_wrong_stopcode)
with self.assertRaises(MeterbusLibExceptions.InvalidStopCharException):
telegram.parse()
def test_NOk_Controlframe_wrong_secondlength(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputNOKControlframe_wrong_secondlength)
with self.assertRaises(MeterbusLibExceptions.InvalidSecondLengthException):
telegram.parse()
def test_NOk_wrong_startcode(self):
telegram = MeterbusLib.Telegram()
telegram = MeterbusLib.Telegram(self.devices)
telegram.fromHexString(self.inputNOk_wrong_startcode)
with self.assertRaises(MeterbusLibExceptions.InvalidStartCharException):
telegram.parse()

View File

@ -30,7 +30,7 @@ inputOkLongFrame_water = "68 46 46 68 08 30 72 45 71 43 00 24 23 25 07 F6 00 00
inputOkLongFrame_gas = "68 56 56 68 08 40 72 43 60 52 00 77 04 14 03 FF 10 00 00 0C 78 76 03 01 10 0D 7C 08 44 49 20 2E 74 73 75 63 0A 30 30 30 30 30 30 30 30 30 30 04 6D 06 0E EB 16 02 7C 09 65 6D 69 74 20 2E 74 61 62 A3 09 04 13 98 AE 04 00 04 93 7F 4E 01 00 00 44 13 FC A5 04 00 0F 01 00 1F 51 16"
telegram = MeterbusLib.Telegram(devices)
telegram.fromHexString(inputOkLongFrame_thermometer)
telegram.fromHexString(inputOkLongFrame_1phase_electric)
telegram.parse()
print(json.dumps(telegram.getJSON(), indent=2))