Passed
Push — master ( fbf2d0...93c134 )
by Dave
58s
created

TestSerialization.test_message_inapp()   A

Complexity

Conditions 1

Size

Total Lines 8
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 8
nop 1
dl 0
loc 8
rs 10
c 0
b 0
f 0
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
17
class TestSerialization(unittest.TestCase):
18
    def test_minerserialization(self):
19
        sch = MinerSchema()
20
        miner = Miner('test')
21
        miner.status = MinerStatus.Offline
22
        miner.status = MinerStatus.Online
23
        miner.minerinfo = MinerInfo('Antminer S9', '123')
24
        miner.minerpool = MinerCurrentPool(miner, 'test pool', 'test worker', allpools={})
25
        miner.minerpool.poolname = 'unittest'
26
        miner.minerstats = domain.minerstatistics.MinerStatistics(miner, datetime.datetime.utcnow(), 0, 1, 0, 99, 98, 97, 123, '', '', '')
27
        miner.minerstats.boardstatus1 = 'o'
28
        miner.minerstats.boardstatus2 = 'oo'
29
        miner.minerstats.boardstatus3 = 'ooo'
30
        miner.location = 'unittest'
31
        miner.in_service_date = datetime.datetime.today().replace(microsecond=0)
32
        jminer = sch.dumps(miner).data
33
34
        #rehydrate miner
35
        reminer = MinerSchema().loads(jminer).data
36
        self.assertTrue(isinstance(reminer.minerinfo, MinerInfo))
37
        self.assertTrue(isinstance(reminer.minerpool, MinerCurrentPool))
38
        self.assertTrue(reminer.minerpool.poolname == 'unittest')
39
        self.assertTrue(isinstance(reminer.minerstats, domain.minerstatistics.MinerStatistics))
40
        self.assertTrue(reminer.laststatuschanged)
41
        self.assertTrue(reminer.minerstats.boardstatus1 == 'o')
42
        self.assertTrue(reminer.minerstats.boardstatus2 == 'oo')
43
        self.assertTrue(reminer.minerstats.boardstatus3 == 'ooo')
44
        self.assertTrue(reminer.location == miner.location)
45
        self.assertTrue(reminer.in_service_date == miner.in_service_date)
46
47
    def test_sensorvalue_serialization(self):
48
        '''on windows the deserialization seems to lose the fractions of seconds
49
        so this test is only for seconds'''
50
        sch = SensorValueSchema()
51
        sensorvalue = SensorValue('testid', '99.9', 'temperature')
52
        sensorvalue.sensor = Sensor('testid', 'temperature', 'controller')
53
        sensortime = sensorvalue.sensortime
54
        jsensor = sch.dumps(sensorvalue).data
55
56
        #rehydrate sensor
57
        resensor = SensorValueSchema().loads(jsensor).data
58
        self.assertTrue(isinstance(resensor, SensorValue))
59
        self.assertTrue(resensor.sensortime.day == sensortime.day)
60
        self.assertTrue(resensor.sensortime.hour == sensortime.hour)
61
        self.assertTrue(resensor.sensortime.minute == sensortime.minute)
62
        self.assertTrue(resensor.sensortime.second == sensortime.second)
63
        self.assertTrue(isinstance(resensor.sensor, Sensor))
64
        self.assertTrue(resensor.sensorid == resensor.sensor.sensorid)
65
66
    def test_config_serialization(self):
67
        sch = ConfigurationMessageSchema()
68
        msg = ConfigurationMessage('save', '', 'pool', {"configuration_message_id":"name"}, [{"name":"my pool"}])
69
        jconfig = sch.dumps(msg).data
70
        reconfig = sch.loads(jconfig).data
71
        self.assertTrue(isinstance(reconfig, ConfigurationMessage))
72
        self.assertTrue(isinstance(reconfig.command, str))
73
        self.assertTrue(isinstance(reconfig.parameter, str))
74
        self.assertTrue(isinstance(reconfig.configuration_message_id, dict))
75
        self.assertTrue(isinstance(reconfig.values, list))
76
77
    def test_message_inapp(self):
78
        app = ApplicationService(component='test')
79
        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}]}"}'
80
        msg = app.messagedecode_configuration(values)
81
        self.assertTrue(isinstance(msg, ConfigurationMessage))
82
        self.assertTrue(msg.entity == 'miner')
83
        miner = Miner.create(msg.values)
84
        self.assertTrue(miner.name == "S9102")
85
86
if __name__ == '__main__':
87
    unittest.main()
88