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

tests.test_json_message   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 56
dl 0
loc 73
rs 10
c 0
b 0
f 0
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A TestSerialization.test_minerserialization() 0 24 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
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