Passed
Push — master ( 359b68...b28825 )
by Dave
01:09
created

TestSerialization.test_configuration_serialization()   A

Complexity

Conditions 1

Size

Total Lines 10
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 10
nop 1
dl 0
loc 10
rs 9.9
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
from domain.mining import Miner, MinerStatus, MinerInfo, MinerCurrentPool, MinerStatistics
11
from domain.sensors import SensorValue, Sensor
12
from messaging.messages import MinerSchema, ConfigurationMessage, ConfigurationMessageSchema
13
from messaging.sensormessages import SensorValueSchema
14
15
class TestSerialization(unittest.TestCase):
16
    def test_minerserialization(self):
17
        sch = MinerSchema()
18
        miner = Miner('test')
19
        miner.status = MinerStatus.Offline
20
        miner.status = MinerStatus.Online
21
        miner.minerinfo = MinerInfo('Antminer S9', '123')
22
        miner.minerpool = MinerCurrentPool(miner, 'test pool', 'test worker', allpools={})
23
        miner.minerpool.poolname = 'unittest'
24
        miner.minerstats = MinerStatistics(miner, datetime.datetime.utcnow(), 0, 1, 0, 99, 98, 97, 123, '', '', '')
25
        miner.minerstats.boardstatus1 = 'o'
26
        miner.minerstats.boardstatus2 = 'oo'
27
        miner.minerstats.boardstatus3 = 'ooo'
28
        jminer = sch.dumps(miner).data
29
30
        #rehydrate miner
31
        reminer = MinerSchema().loads(jminer).data
32
        self.assertTrue(isinstance(reminer.minerinfo, MinerInfo))
33
        self.assertTrue(isinstance(reminer.minerpool, MinerCurrentPool))
34
        self.assertTrue(reminer.minerpool.poolname == 'unittest')
35
        self.assertTrue(isinstance(reminer.minerstats, MinerStatistics))
36
        self.assertTrue(reminer.laststatuschanged)
37
        self.assertTrue(reminer.minerstats.boardstatus1 == 'o')
38
        self.assertTrue(reminer.minerstats.boardstatus2 == 'oo')
39
        self.assertTrue(reminer.minerstats.boardstatus3 == 'ooo')
40
41
    def test_sensorvalue_serialization(self):
42
        '''on windows the deserialization seems to lose the fractions of seconds
43
        so this test is only for seconds'''
44
        sch = SensorValueSchema()
45
        sensorvalue = SensorValue('testid', '99.9', 'temperature')
46
        sensorvalue.sensor = Sensor('testid', 'temperature', 'controller')
47
        sensortime = sensorvalue.sensortime
48
        jsensor = sch.dumps(sensorvalue).data
49
50
        #rehydrate sensor
51
        resensor = SensorValueSchema().loads(jsensor).data
52
        self.assertTrue(isinstance(resensor, SensorValue))
53
        self.assertTrue(resensor.sensortime.day == sensortime.day)
54
        self.assertTrue(resensor.sensortime.hour == sensortime.hour)
55
        self.assertTrue(resensor.sensortime.minute == sensortime.minute)
56
        self.assertTrue(resensor.sensortime.second == sensortime.second)
57
        self.assertTrue(isinstance(resensor.sensor, Sensor))
58
        self.assertTrue(resensor.sensorid == resensor.sensor.sensorid)
59
60
    def test_config_serialization(self):
61
        sch = ConfigurationMessageSchema()
62
        msg = ConfigurationMessage('save', '', 'pool', {"id":"name"}, [{"name":"my pool"}])
63
        jconfig = sch.dumps(msg).data
64
        reconfig = sch.loads(jconfig).data
65
        self.assertTrue(isinstance(reconfig, ConfigurationMessage))
66
        self.assertTrue(isinstance(reconfig.command, str))
67
        self.assertTrue(isinstance(reconfig.parameter, str))
68
        self.assertTrue(isinstance(reconfig.id, dict))
69
        self.assertTrue(isinstance(reconfig.values, list))
70
71
if __name__ == '__main__':
72
    unittest.main()
73