Passed
Push — master ( fbe99c...28cd06 )
by Dave
01:06
created

tests.test_json_message   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 95
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 76
dl 0
loc 95
rs 10
c 0
b 0
f 0
wmc 5

5 Methods

Rating   Name   Duplication   Size   Complexity  
A TestSerialization.test_minerserialization() 0 28 1
A TestSerialization.test_message_inapp() 0 8 1
A TestSerialization.test_miner_deserialize() 0 5 1
A TestSerialization.test_sensorvalue_serialization() 0 18 1
A TestSerialization.test_config_serialization() 0 10 1
1
'''# test json message format
2
# scenarios:
3
# - Miner with miner stats
4
# - Miner with command
5
# - command by itself
6
# - sensor
7
'''
8
import unittest
9
import datetime
10
import domain.minerstatistics
11
from domain.mining import Miner, MinerStatus, MinerInfo, MinerCurrentPool
12
from domain.sensors import SensorValue, Sensor
13
from messaging.messages import MinerSchema, ConfigurationMessage, ConfigurationMessageSchema
14
from messaging.sensormessages import SensorValueSchema
15
from backend.fcmapp import ApplicationService
16
import backend.fcmutils as utils
17
18
class TestSerialization(unittest.TestCase):
19
    def test_minerserialization(self):
20
        sch = MinerSchema()
21
        miner = Miner('test')
22
        miner.status = MinerStatus.Offline
23
        miner.status = MinerStatus.Online
24
        miner.minerinfo = MinerInfo('Antminer S9', '123')
25
        miner.minerpool = MinerCurrentPool(miner, 'test pool', 'test worker', allpools={})
26
        miner.minerpool.poolname = 'unittest'
27
        miner.minerstats = domain.minerstatistics.MinerStatistics(miner, datetime.datetime.utcnow(), 0, 1, 0, 99, 98, 97, 123, '', '', '')
28
        miner.minerstats.boardstatus1 = 'o'
29
        miner.minerstats.boardstatus2 = 'oo'
30
        miner.minerstats.boardstatus3 = 'ooo'
31
        miner.location = 'unittest'
32
        miner.in_service_date = datetime.datetime.today().replace(microsecond=0)
33
        jminer = sch.dumps(miner).data
34
35
        #rehydrate miner
36
        reminer = MinerSchema().loads(jminer).data
37
        self.assertTrue(isinstance(reminer.minerinfo, MinerInfo))
38
        self.assertTrue(isinstance(reminer.minerpool, MinerCurrentPool))
39
        self.assertTrue(reminer.minerpool.poolname == 'unittest')
40
        self.assertTrue(isinstance(reminer.minerstats, domain.minerstatistics.MinerStatistics))
41
        self.assertTrue(reminer.laststatuschanged)
42
        self.assertTrue(reminer.minerstats.boardstatus1 == 'o')
43
        self.assertTrue(reminer.minerstats.boardstatus2 == 'oo')
44
        self.assertTrue(reminer.minerstats.boardstatus3 == 'ooo')
45
        self.assertTrue(reminer.location == miner.location)
46
        self.assertTrue(reminer.in_service_date == miner.in_service_date)
47
48
    def test_miner_deserialize(self):
49
        miner = Miner("unittest", None, "", "unitip", "unitport", "", "")
50
        jminer = utils.serialize(miner, MinerSchema())
51
        reminer = utils.deserialize(MinerSchema(),jminer) #().loads(jminer).data
52
        self.assertTrue(isinstance(reminer, Miner),"object from MinerSchema should be a miner")
53
54
    def test_sensorvalue_serialization(self):
55
        '''on windows the deserialization seems to lose the fractions of seconds
56
        so this test is only for seconds'''
57
        sch = SensorValueSchema()
58
        sensorvalue = SensorValue('testid', '99.9', 'temperature')
59
        sensorvalue.sensor = Sensor('testid', 'temperature', 'controller')
60
        sensortime = sensorvalue.sensortime
61
        jsensor = sch.dumps(sensorvalue).data
62
63
        #rehydrate sensor
64
        resensor = SensorValueSchema().loads(jsensor).data
65
        self.assertTrue(isinstance(resensor, SensorValue))
66
        self.assertTrue(resensor.sensortime.day == sensortime.day)
67
        self.assertTrue(resensor.sensortime.hour == sensortime.hour)
68
        self.assertTrue(resensor.sensortime.minute == sensortime.minute)
69
        self.assertTrue(resensor.sensortime.second == sensortime.second)
70
        self.assertTrue(isinstance(resensor.sensor, Sensor))
71
        self.assertTrue(resensor.sensorid == resensor.sensor.sensorid)
72
73
    def test_config_serialization(self):
74
        sch = ConfigurationMessageSchema()
75
        msg = ConfigurationMessage('save', '', 'pool', {"configuration_message_id":"name"}, [{"name":"my pool"}])
76
        jconfig = sch.dumps(msg).data
77
        reconfig = sch.loads(jconfig).data
78
        self.assertTrue(isinstance(reconfig, ConfigurationMessage))
79
        self.assertTrue(isinstance(reconfig.command, str))
80
        self.assertTrue(isinstance(reconfig.parameter, str))
81
        self.assertTrue(isinstance(reconfig.configuration_message_id, dict))
82
        self.assertTrue(isinstance(reconfig.values, list))
83
84
    def test_message_inapp(self):
85
        app = ApplicationService(component='test')
86
        values = '{"version":"1.1","sender":"fullcyclereact","type":"configuration","timestamp":"2018-09-16T07:18:34.431Z","body":"{\\"command\\":\\"save\\",\\"parameter\\":\\"\\",\\"id\\":\\"unknown\\",\\"entity\\":\\"miner\\",\\"values\\":[{\\"name\\":\\"S9102\\"},{\\"ipaddress\\":\\"test.com\\"},{\\"port\\":\\"4102\\"},{\\"location\\":\\"222\\"},{\\"in_service_date\\":null}]}"}'
87
        msg = app.messagedecode_configuration(values)
88
        self.assertTrue(isinstance(msg, ConfigurationMessage))
89
        self.assertTrue(msg.entity == 'miner')
90
        miner = Miner.create(msg.values)
91
        self.assertTrue(miner.name == "S9102")
92
93
if __name__ == '__main__':
94
    unittest.main()
95