TestMiner.test_miner_format_time_string()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 4
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
'''test mining domain'''
2
import unittest
3
import datetime
4
import domain.minerstatistics
5
from domain.mining import Miner, MinerStatus, MinerInfo, MinerApiCall, MinerCommand, MinerCurrentPool
6
7
class TestMiner(unittest.TestCase):
8
    def test_miner_is_not_disabled(self):
9
        miner = Miner("test", '', '', '', '', '', '', '', '')
10
        self.assertFalse(miner.is_disabled())
11
12
    def test_miner_is_disabled(self):
13
        miner = Miner("#test", '', '', '', '', '', '', '', '')
14
        self.assertTrue(miner.is_disabled())
15
16
    def test_miner_key_is_id(self):
17
        miner = Miner("test", minerid='unittest')
18
        self.assertTrue(miner.key() == 'unittest')
19
20
    def test_miner_key_not_unknown(self):
21
        miner = Miner('test', minerid='unknown', ipaddress='unittest', port='1234')
22
        self.assertTrue(miner.key() == 'unittest:1234')
23
24
    def test_miner_key_is_networkid(self):
25
        miner = Miner("test", networkid={'unittest1', 'unittest2'})
26
        self.assertTrue(miner.key() == str({'unittest1', 'unittest2'}))
27
28
    def test_key_notempty_net(self):
29
        miner = Miner("test", networkid={})
30
        self.assertFalse(miner.key() == str({}))
31
32
    def test_miner_key_is_ip(self):
33
        miner = Miner("test", ipaddress='unittest', port='1234')
34
        self.assertTrue(miner.key() == 'unittest:1234')
35
36
    def test_miner_key_is_name(self):
37
        miner = Miner("test")
38
        self.assertTrue(miner.key() == 'test')
39
40
    def test_miner_format_time_now(self):
41
        miner = Miner('test')
42
        miner.lastmonitor = datetime.datetime.utcnow()
43
        self.assertTrue(miner.formattime(miner.lastmonitor))
44
45
    def test_miner_format_time_string(self):
46
        miner = Miner('test')
47
        miner.lastmonitor = '2018-04-11T01:28:45+00:00'
48
        self.assertTrue(miner.formattime(miner.lastmonitor))
49
50
    def test_miner_format_time_with_fraction(self):
51
        miner = Miner('test')
52
        miner.lastmonitor = '2018-04-11T01:28:45.3821739+00:00'
53
        self.assertTrue(miner.formattime(miner.lastmonitor))
54
55
    def test_miner_uses_custom(self):
56
        miner = Miner('test')
57
        miner.ftpport = '99'
58
        miner.set_ftp_port('22')
59
        self.assertTrue(miner.ftpport == '99')
60
61
    def test_miner_uses_default(self):
62
        miner = Miner('test')
63
        miner.ftpport = ''
64
        miner.set_ftp_port('22')
65
        self.assertTrue(miner.ftpport == '22')
66
67
    def test_miner_status_set_last_update(self):
68
        miner = Miner('test')
69
        self.assertTrue(not miner.laststatuschanged)
70
        miner.status = MinerStatus.Offline
71
        self.assertTrue(miner.laststatuschanged)
72
73
    def test_miner_status_change_keeps_original(self):
74
        miner = Miner('test')
75
        miner.status = MinerStatus.Offline
76
        self.assertTrue(miner.laststatuschanged)
77
        originalstatuschangetime = miner.laststatuschanged
78
        miner.status = MinerStatus.Offline
79
        self.assertTrue(miner.laststatuschanged == originalstatuschangetime)
80
81
    def test_miner_status_no_you_cant(self):
82
        miner = Miner('test')
83
        def set_status_test():
84
            miner.status = 'you can be anyting'
85
        self.assertRaises(ValueError, set_status_test)
86
87
    def test_miner_reset_offline_count(self):
88
        miner = Miner('test')
89
        self.assertTrue(miner.offlinecount == 0)
90
        self.assertTrue(miner.is_send_offline_alert())
91
        miner.offline_now()
92
        miner.offline_now()
93
        miner.offline_now()
94
        miner.offline_now()
95
        self.assertFalse(miner.is_send_offline_alert())
96
        miner.online_now()
97
        self.assertTrue(miner.offlinecount == 0)
98
        self.assertTrue(miner.is_send_offline_alert())
99
100
    def test_miner_setminerinfo(self):
101
        miner = Miner('test')
102
        minerinfo = MinerInfo('testminertype', miner.minerid)
103
        miner.setminerinfo(minerinfo)
104
        self.assertTrue(miner.miner_type == minerinfo.miner_type)
105
106
    def test_miner_shouldmonitor(self):
107
        miner = Miner('test')
108
        miner.lastmonitor = ""
109
        self.assertTrue(miner.should_monitor())
110
111
    def test_miner_elapsed_format(self):
112
        miner = Miner('test')
113
        miner.minerstats = domain.minerstatistics.MinerStatistics(miner)
114
        self.assertTrue(miner.minerstats.format_elapsed() == "0:0:0:0")
115
116
    def test_miner_statistics_seconds(self):
117
        miner = Miner('test')
118
        miner.minerstats = domain.minerstatistics.MinerStatistics(miner,hardware_errors=100,elapsed=10)
119
        self.assertTrue(miner.minerstats.hardware_errors_per_second == 10)
120
121
    def test_miner_statistics_minutes(self):
122
        miner = Miner('test')
123
        miner.minerstats = domain.minerstatistics.MinerStatistics(miner,hardware_errors=60,elapsed=60)
124
        self.assertTrue(miner.minerstats.hardware_errors_per_minute == 60, str(miner.minerstats.hardware_errors_per_minute))
125
126
    def test_miner_statistics_hours(self):
127
        miner = Miner('test')
128
        miner.minerstats = domain.minerstatistics.MinerStatistics(miner,hardware_errors=60,elapsed=60*60)
129
        self.assertTrue(miner.minerstats.hardware_errors_per_hour == 60, str(miner.minerstats.hardware_errors_per_hour))
130
131
    def test_miner_statistics_days(self):
132
        miner = Miner('test')
133
        miner.minerstats = domain.minerstatistics.MinerStatistics(miner,hardware_errors=60,elapsed=60*60*24)
134
        self.assertTrue(miner.minerstats.hardware_errors_per_day == 60)
135
136
    def test_miner_stats_summary(self):
137
        miner = Miner('test')
138
        miner.minerstats = domain.minerstatistics.MinerStatistics(miner)
139
        summary = miner.minerstats.stats_summary()
140
        self.assertTrue(summary == '0 0/0 0:0:0:0')
141
142
    def test_miner_monitored_nothing_none(self):
143
        miner = Miner('test')
144
        miner.monitored(None, None, None, None)
145
        self.assertTrue(miner.lastmonitor is None)
146
147
    def test_miner_monitored_not_nothing_ismonitored(self):
148
        miner = Miner('test')
149
        stats = domain.minerstatistics.MinerStatistics(miner)
150
        miner.monitored(stats, pool=None, info=None, sec=None)
151
        self.assertFalse(miner.lastmonitor is None)
152
153
    def test_miner_monitored_pool(self):
154
        miner = Miner('test')
155
        stats = domain.minerstatistics.MinerStatistics(miner)
156
        miner.monitored(stats, pool=MinerCurrentPool(miner), info=None, sec=None)
157
        self.assertTrue(miner.minerpool)
158
159
    def test_miner_monitored_timer(self):
160
        miner = Miner('test')
161
        stats = domain.minerstatistics.MinerStatistics(miner)
162
        apicall = MinerApiCall(miner)
163
        apicall.start()
164
        apicall.stop()
165
        miner.monitored(stats, pool=None, info=None, sec=apicall.elapsed())
166
        self.assertFalse(miner.lastmonitor is None)
167
168
    def test_miner_update(self):
169
        miner = Miner('test')
170
        miner.minerid = 'test'
171
        miner.ipaddress = 'ip1'
172
        miner.location = 'location1'
173
        miner.in_service_date = datetime.datetime.now().replace(second=0, microsecond=0)
174
        minerupdate = Miner('test1')
175
        minerupdate.minerid = 'test1'
176
        minerupdate.ipaddress = 'ip2'
177
        minerupdate.location = 'location2'
178
        minerupdate.in_service_date = datetime.datetime.now()
179
        miner.updatefrom(minerupdate)
180
        self.assertFalse(miner.ipaddress == minerupdate.ipaddress)
181
        minerupdate.minerid = miner.minerid
182
        miner.updatefrom(minerupdate)
183
        self.assertTrue(miner.ipaddress == minerupdate.ipaddress)
184
        self.assertTrue(miner.location == minerupdate.location)
185
        self.assertTrue(miner.in_service_date == minerupdate.in_service_date)
186
187
    def test_miner_is_unknown(self):
188
        miner = Miner('test')
189
        miner.minerid = "unknown"
190
        self.assertTrue(miner.is_unknown)
191
192
    def test_miner_is_known(self):
193
        miner = Miner('test')
194
        miner.minerid = "123.123.123.123"
195
        self.assertFalse(miner.is_unknown)
196
197
    def test_miner_no_update(self):
198
        miner = Miner('test')
199
        miner.ipaddress = 'ip1'
200
        minerupdate = Miner('test')
201
        minerupdate.ipaddress = None
202
        miner.updatefrom(minerupdate)
203
        self.assertTrue(miner.ipaddress != minerupdate.ipaddress)
204
205
    def test_miner_update_port(self):
206
        miner = Miner('test')
207
        miner.port = 'port1'
208
        minerupdate = Miner('test')
209
        minerupdate.port = 'port2'
210
        miner.updatefrom(minerupdate)
211
        self.assertTrue(miner.port == minerupdate.port)
212
213
    def test_miner_create(self):
214
        values = []
215
        values.append({"name":"UnitTest"})
216
        values.append({"minerid": "1"})
217
        values.append({"ipaddress": "123.123.123.123"})
218
        values.append({"port": "987"})
219
        values.append({"location": "rack"})
220
        values.append({"in_service_date": "2018-01-01T08:00:00.000Z"})
221
        miner = Miner.create(values)
222
        self.assertTrue(miner.name == "UnitTest")
223
        self.assertTrue(miner.minerid == "1")
224
        self.assertTrue(miner.ipaddress == "123.123.123.123")
225
        self.assertTrue(miner.port == "987")
226
        self.assertTrue(miner.location == "rack")
227
        self.assertTrue(miner.in_service_date.date() == datetime.date(2018, 1, 1))
228
229
    def test_miner_key_original(self):
230
        miner = Miner('test')
231
        miner.minerid = "unittest"
232
        self.assertTrue(miner.is_key_updated)
233
234
    def test_miner_command(self):
235
        command = MinerCommand()
236
        self.assertTrue(command.command == '')
237
        self.assertTrue(command.parameter == '')
238
239
    def test_miner_currentpoolname(self):
240
        miner = Miner('test')
241
        self.assertTrue(miner.currentpoolname() == '?')
242
        miner.minerpool = MinerCurrentPool(miner, 'test pool', 'test worker', allpools={}, poolname='unit test')
243
        self.assertTrue(miner.currentpoolname() == 'unit test')
244
        self.assertFalse(miner.minerpool.findpoolnumberforpool('test pool', 'test worker'))
245
246
    def test_miner_pools_available(self):
247
        miner = Miner('test')
248
        self.assertTrue(miner.pools_available is None)
249
        miner.minerpool = MinerCurrentPool(miner, 'test pool', 'test worker', allpools={})
250
        self.assertTrue(len(miner.pools_available) == 0)
251
        miner.minerpool.allpools = {"POOLS": [
252
        {
253
            "Pool Stale%": 0,
254
            "Accepted": 421743,
255
            "Difficulty Stale": 0,
256
            "Stratum URL": "test",
257
            "Rejected": 85,
258
            "Difficulty Accepted": 6587318272,
259
            "Best Share": 4019408192,
260
            "User": "test",
261
            "Stratum Active": True,
262
            "Difficulty Rejected": 1343488,
263
            "Diff": "16.4K",
264
            "Remote Failures": 3,
265
            "Discarded": 1094132,
266
            "Long Poll": "N",
267
            "Proxy": "",
268
            "Priority": 0,
269
            "Has GBT": False,
270
            "Pool Rejected%": 0.0204,
271
            "Stale": 63,
272
            "Last Share Difficulty": 16384,
273
            "Diff1 Shares": 0,
274
            "Has Stratum": True,
275
            "Status": "Alive",
276
            "URL": "test",
277
            "Quota": 1,
278
            "Last Share Time": "0:00:05",
279
            "Getworks": 70163,
280
            "Get Failures": 3,
281
            "POOL": 3,
282
            "Proxy Type": ""
283
        }]}
284
        self.assertTrue(len(miner.pools_available) > 0)
285
        self.assertTrue(miner.minerpool.findpoolnumberforpool('test', 'test'))
286
        self.assertFalse(miner.minerpool.findpoolnumberforpool('not', 'found'))
287
288
    def test_miner_summary(self):
289
        miner = Miner("test", '', '', '', '', '', '', '', '')
290
        self.assertTrue(miner.summary() is not None)
291
        miner.status = MinerStatus.Online
292
        self.assertTrue(miner.summary() is not None)
293
        miner.minerstats = None
294
        self.assertTrue(miner.summary() is not None)
295
        miner.minerstats = domain.minerstatistics.MinerStatistics(miner)
296
        self.assertTrue(miner.summary() is not None)
297
298
    def test_miner_todate(self):
299
        dttm = Miner.to_date(datetime.datetime.now())
300
        self.assertTrue(isinstance(dttm, datetime.datetime))
301
302
    def test_miner_uptime(self):
303
        miner = Miner("test", '', '', '', '', '', '', '', '')
304
        self.assertTrue(miner.uptime(1))
305
306
    def test_miner_monitorresponsetime(self):
307
        miner = Miner("test", '', '', '', '', '', '', '', '')
308
        self.assertTrue(miner.monitorresponsetime() == 0)
309
        miner.monitored(domain.minerstatistics.MinerStatistics(miner), None, None, 1)
310
        self.assertTrue(miner.monitorresponsetime() > 0)
311
312
    def test_miner_can_monitor(self):
313
        miner = Miner("test", '', '', '', '', '', '', '', '')
314
        self.assertFalse(miner.can_monitor())
315
        miner.ipaddress = '123.123.123.123'
316
        self.assertFalse(miner.can_monitor())
317
        miner.port = '4028'
318
        self.assertTrue(miner.can_monitor())
319
320
    def test_miner_should_monitor(self):
321
        miner = Miner("#test", '', '', '', '', '', '', '', '')
322
        self.assertTrue(miner.should_monitor())
323
        miner.monitored(domain.minerstatistics.MinerStatistics(miner), None, None, None)
324
        self.assertFalse(miner.should_monitor())
325
        miner.name = "test"
326
        self.assertTrue(miner.should_monitor())
327
        miner.status = MinerStatus.Disabled
328
        self.assertTrue(miner.should_monitor())
329
330
if __name__ == '__main__':
331
    unittest.main()
332