Completed
Push — master ( cd2467...f0b5bc )
by Dave
51:52 queued 50:48
created

tests.test_rules.TestRules.test_only_one_reset()   A

Complexity

Conditions 1

Size

Total Lines 5
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nop 1
dl 0
loc 5
rs 10
c 0
b 0
f 0
1
'''test rules'''
2
import unittest
3
import datetime
4
import domain.minerstatistics
5
from domain.mining import Miner, MinerInfo
6
from domain.miningrules import RuleParameters, MinerStatisticsRule, BrokenRule
7
8
class TestRules(unittest.TestCase):
9
    def setUp(self):
10
        '''create test miner'''
11
        self.minerinfo = MinerInfo('Antminer S9', '')
12
        self.miner = Miner('Test', 'Online', 'Antminer S9', '', '', '', '', '', '', '',
13
                           lastmonitor=None, offlinecount=0, defaultpool='', minerinfo=self.minerinfo)
14
15
        self.minerstats = domain.minerstatistics.MinerStatistics(self.miner, datetime.datetime.utcnow(), 3, currenthash=9999,
16
                                          controllertemp=0, tempboard1=0, tempboard2=0, tempboard3=0)
17
18
    def test_int_has_reading(self):
19
        params = RuleParameters(self.miner.minerinfo.miner_type, 10000, 40, 55, 60*10)
20
        self.assertTrue(MinerStatisticsRule.hasreading_num(params.controllertemplimit))
21
22
    def test_float_has_reading(self):
23
        params = RuleParameters(self.miner.minerinfo.miner_type, 10000, 49.9, 55, 60*10)
24
        self.assertTrue(MinerStatisticsRule.hasreading_num(params.controllertemplimit))
25
26
    def test_string_has_reading(self):
27
        params = RuleParameters(self.miner.minerinfo.miner_type, 10000, '', 55, 60*10)
28
        self.assertFalse(MinerStatisticsRule.hasreading_num(params.controllertemplimit))
29
30
    def test_incompatable_minertype(self):
31
        params = RuleParameters('notthesameminertype', 10000, 40, 55, 60*10)
32
        rules = MinerStatisticsRule(self.miner, self.minerstats, params)
33
        isbroken = rules.isbroken()
34
        self.assertFalse(isbroken)
35
36
    def test_lowhash(self):
37
        '''test low hash condition'''
38
        params = RuleParameters(self.miner.minerinfo.miner_type, 10000, 40, 55, 60*10)
39
        rules = MinerStatisticsRule(self.miner, self.minerstats, params)
40
41
        isbroken = rules.isbroken()
42
        self.assertTrue(isbroken)
43
        self.assertTrue(len(rules.brokenrules) > 0)
44
45
    def test_board_high_temp(self):
46
        '''test when controller temp is high on miner'''
47
        self.minerstats.tempboard1 = 101
48
        params = RuleParameters(self.miner.minerinfo.miner_type, 10000, 40, 55, 60*10)
49
        rules = MinerStatisticsRule(self.miner, self.minerstats, params)
50
51
        isbroken = rules.isbroken()
52
        self.assertTrue(isbroken)
53
        self.assertTrue(len(rules.brokenrules) > 0)
54
55
    def test_board_high_temp_reset(self):
56
        '''test when controller temp is high on miner'''
57
        self.minerstats.tempboard1 = 150
58
        self.minerstats.elapsed = (60 * 10) + 1
59
        params = RuleParameters(self.miner.minerinfo.miner_type, 10000, 40, 55, 60*10, maxtempreset=120)
60
        rules = MinerStatisticsRule(self.miner, self.minerstats, params)
61
62
        isbroken = rules.isbroken()
63
        self.assertTrue(isbroken)
64
        self.assertTrue(rules.has_reboot_rule())
65
66
    def test_high_temp_reset_null(self):
67
        '''test when controller temp is high on miner. no reset'''
68
        self.minerstats.controllertemp = 101
69
        params = RuleParameters(self.miner.minerinfo.miner_type, 10000, 40, 55, 60*10, maxtempreset=None)
70
        rules = MinerStatisticsRule(self.miner, self.minerstats, params)
71
72
        isbroken = rules.isbroken()
73
        self.assertTrue(isbroken)
74
        self.assertFalse(rules.has_reboot_rule())
75
76
    def test_brokenrule(self):
77
        rule = BrokenRule(self.miner, '', '')
78
        self.assertTrue(str(rule) == 'broke Test: ')
79
80
    def test_hasreading(self):
81
        self.assertFalse(MinerStatisticsRule.hasreading(None))
82
        self.assertTrue(MinerStatisticsRule.hasreading(1))
83
        self.assertFalse(MinerStatisticsRule.hasreading(0))
84
        self.assertFalse(MinerStatisticsRule.hasreading_num(None))
85
86
    def test_only_one_reset(self):
87
        rules = MinerStatisticsRule(self.miner, None, None)
88
        rules.addbrokenrule(BrokenRule(self.miner, 'restart', ''))
89
        rules.addbrokenrule(BrokenRule(self.miner, 'restart', ''))
90
        self.assertTrue(len(rules.brokenrules) == 1)
91
92
    def test_only_one_reboot(self):
93
        rules = MinerStatisticsRule(self.miner, None, None)
94
        rules.addbrokenrule(BrokenRule(self.miner, 'restart', 'reboot'))
95
        rules.addbrokenrule(BrokenRule(self.miner, 'restart', 'reboot'))
96
        self.assertTrue(len(rules.brokenrules) == 1)
97
98
    def test_reset_leaves_reboot(self):
99
        rules = MinerStatisticsRule(self.miner, None, None)
100
        rules.addbrokenrule(BrokenRule(self.miner, 'restart', 'reboot'))
101
        rules.addbrokenrule(BrokenRule(self.miner, 'restart', ''))
102
        self.assertTrue(len(rules.brokenrules) == 1)
103
        self.assertTrue(rules.brokenrules[0].parameter == 'reboot')
104
105
if __name__ == '__main__':
106
    unittest.main()
107