cgminer-api 0.0.4 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/cgminer/api/client.rb +8 -12
- data/lib/cgminer/api/response.rb +6 -3
- data/lib/cgminer/api/version.rb +1 -1
- data/spec/client_spec.rb +143 -0
- data/spec/response_spec.rb +51 -0
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 258b3f4a7e4028128e92b2bbcb026a2e97cbde53
|
4
|
+
data.tar.gz: 85ae5352fd614a55d1085c70e43f54841ace30ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c593334573da5e8e2ff38fa8ea9b7df34ffdeaca094001cb98a08c0964073847d5d351f853acf09bff655c9a8718df3fdb391bbc12c1036d5b41f1b4357c2ea6
|
7
|
+
data.tar.gz: ba4c8d4d7483874049e01c7b2f3fc884745f01f051fce501fe6b3cf7f99e1113f4990835eb0ee6027b32aec2c408bcdb6f18791291eee74df57595e35c038f50
|
data/lib/cgminer/api/client.rb
CHANGED
@@ -3,6 +3,10 @@ module CGMiner
|
|
3
3
|
|
4
4
|
class Client
|
5
5
|
|
6
|
+
attr_reader :host
|
7
|
+
|
8
|
+
attr_reader :port
|
9
|
+
|
6
10
|
def initialize(host, port)
|
7
11
|
@host = host
|
8
12
|
@port = port
|
@@ -76,19 +80,11 @@ module CGMiner
|
|
76
80
|
private
|
77
81
|
|
78
82
|
def command(symbol, *parameters)
|
79
|
-
|
80
|
-
results =
|
81
|
-
|
82
|
-
begin
|
83
|
-
json = JSON.parse(results)
|
84
|
-
status = json['STATUS'][0]
|
85
|
-
reply = json[symbol.to_s.upcase]
|
86
|
-
response = CGMiner::API::Response.new(status, reply)
|
87
|
-
rescue JSON::ParserError => e
|
88
|
-
raise RuntimeError, "Failed parsing response: #{e}"
|
89
|
-
end
|
83
|
+
telnet = Net::Telnet::new('Host' => @host, 'Port' => @port)
|
84
|
+
results = telnet.cmd({ command: symbol.to_s, parameter: parameters.join(',') }.to_json)
|
85
|
+
CGMiner::API::Response.new(symbol, results)
|
90
86
|
ensure
|
91
|
-
|
87
|
+
telnet.close unless telnet.nil?
|
92
88
|
end
|
93
89
|
|
94
90
|
end
|
data/lib/cgminer/api/response.rb
CHANGED
@@ -7,9 +7,12 @@ module CGMiner
|
|
7
7
|
|
8
8
|
attr_reader :body
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
attr_reader :raw
|
11
|
+
|
12
|
+
def initialize(command_symbol, raw_command_response)
|
13
|
+
@raw = JSON.parse(raw_command_response)
|
14
|
+
@status = @raw['STATUS'][0]
|
15
|
+
@body = @raw[command_symbol.to_s.upcase]
|
13
16
|
end
|
14
17
|
|
15
18
|
def received_at
|
data/lib/cgminer/api/version.rb
CHANGED
data/spec/client_spec.rb
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CGMiner::API::Client do
|
4
|
+
|
5
|
+
let(:host) { 'my-hostname' }
|
6
|
+
|
7
|
+
let(:port) { 1234 }
|
8
|
+
|
9
|
+
let(:telnet) do
|
10
|
+
telnet = double('Net::Telnet')
|
11
|
+
end
|
12
|
+
|
13
|
+
before(:each) do
|
14
|
+
stub_const 'Net::Telnet', double(new: telnet)
|
15
|
+
@client = described_class.new(host, port)
|
16
|
+
end
|
17
|
+
|
18
|
+
subject { @client }
|
19
|
+
|
20
|
+
context 'successful communication' do
|
21
|
+
|
22
|
+
let(:reply) do
|
23
|
+
<<-EOF
|
24
|
+
{"STATUS":[{"STATUS":"S","When":1391459548,"Code":78,"Msg":"CGMiner coin","Description":"cgminer 3.7.2"}],"COIN":[{"Hash Method":"scrypt","Current Block Time":1391457585.060405,"Current Block Hash":"0012a85cfa3d1b7cc00bf56a5c8cd283e8ca95995d040c42ff4c66f219e24567","LP":true,"Network Difficulty":10.87349847}],"id":1}
|
25
|
+
EOF
|
26
|
+
end
|
27
|
+
|
28
|
+
before(:each) do
|
29
|
+
telnet.stub(:cmd).and_return(reply)
|
30
|
+
telnet.should_receive(:close)
|
31
|
+
end
|
32
|
+
|
33
|
+
its(:coin) { should be_a(CGMiner::API::Response) }
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'with parameters' do
|
38
|
+
|
39
|
+
let(:reply) do
|
40
|
+
<<-EOF
|
41
|
+
{"STATUS":[{"STATUS":"S","When":1391459548,"Code":78,"Msg":"CGMiner coin","Description":"cgminer 3.7.2"}],"ASC":[{"Hash Method":"scrypt","Current Block Time":1391457585.060405,"Current Block Hash":"0012a85cfa3d1b7cc00bf56a5c8cd283e8ca95995d040c42ff4c66f219e24567","LP":true,"Network Difficulty":10.87349847}],"id":1}
|
42
|
+
EOF
|
43
|
+
end
|
44
|
+
|
45
|
+
before(:each) do
|
46
|
+
expected = '{"command":"asc","parameter":"1"}'
|
47
|
+
telnet.stub(:cmd).with(expected).and_return(reply)
|
48
|
+
telnet.should_receive(:close)
|
49
|
+
end
|
50
|
+
|
51
|
+
specify { expect(subject.asc(1)).to be_a(CGMiner::API::Response) }
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'failed communication' do
|
56
|
+
|
57
|
+
before(:each) do
|
58
|
+
telnet.stub(:cmd).and_raise(TimeoutError)
|
59
|
+
telnet.should_receive(:close)
|
60
|
+
end
|
61
|
+
|
62
|
+
specify { expect { subject.asc(0) }.to raise_error(TimeoutError) }
|
63
|
+
|
64
|
+
specify { expect { subject.asccount }.to raise_error(TimeoutError) }
|
65
|
+
|
66
|
+
specify { expect { subject.check(:version) }.to raise_error(TimeoutError) }
|
67
|
+
|
68
|
+
specify { expect { subject.coin }.to raise_error(TimeoutError) }
|
69
|
+
|
70
|
+
specify { expect { subject.config }.to raise_error(TimeoutError) }
|
71
|
+
|
72
|
+
specify { expect { subject.devdetails }.to raise_error(TimeoutError) }
|
73
|
+
|
74
|
+
specify { expect { subject.devs }.to raise_error(TimeoutError) }
|
75
|
+
|
76
|
+
specify { expect { subject.gpu(0) }.to raise_error(TimeoutError) }
|
77
|
+
|
78
|
+
specify { expect { subject.gpucount }.to raise_error(TimeoutError) }
|
79
|
+
|
80
|
+
specify { expect { subject.pga(0) }.to raise_error(TimeoutError) }
|
81
|
+
|
82
|
+
specify { expect { subject.pgacount }.to raise_error(TimeoutError) }
|
83
|
+
|
84
|
+
specify { expect { subject.pools }.to raise_error(TimeoutError) }
|
85
|
+
|
86
|
+
specify { expect { subject.stats }.to raise_error(TimeoutError) }
|
87
|
+
|
88
|
+
specify { expect { subject.summary }.to raise_error(TimeoutError) }
|
89
|
+
|
90
|
+
specify { expect { subject.usbstats }.to raise_error(TimeoutError) }
|
91
|
+
|
92
|
+
specify { expect { subject.version }.to raise_error(TimeoutError) }
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'invalid JSON response' do
|
97
|
+
|
98
|
+
let(:reply) { "I AM A PRETTY BAD RESPONSE" }
|
99
|
+
|
100
|
+
before(:each) do
|
101
|
+
telnet.stub(:cmd).and_return(reply)
|
102
|
+
telnet.should_receive(:close)
|
103
|
+
end
|
104
|
+
|
105
|
+
specify { expect { subject.asc(0) }.to raise_error(JSON::ParserError) }
|
106
|
+
|
107
|
+
specify { expect { subject.asccount }.to raise_error(JSON::ParserError) }
|
108
|
+
|
109
|
+
specify { expect { subject.check(:version) }.to raise_error(JSON::ParserError) }
|
110
|
+
|
111
|
+
specify { expect { subject.coin }.to raise_error(JSON::ParserError) }
|
112
|
+
|
113
|
+
specify { expect { subject.config }.to raise_error(JSON::ParserError) }
|
114
|
+
|
115
|
+
specify { expect { subject.devdetails }.to raise_error(JSON::ParserError) }
|
116
|
+
|
117
|
+
specify { expect { subject.devs }.to raise_error(JSON::ParserError) }
|
118
|
+
|
119
|
+
specify { expect { subject.gpu(0) }.to raise_error(JSON::ParserError) }
|
120
|
+
|
121
|
+
specify { expect { subject.gpucount }.to raise_error(JSON::ParserError) }
|
122
|
+
|
123
|
+
specify { expect { subject.pga(0) }.to raise_error(JSON::ParserError) }
|
124
|
+
|
125
|
+
specify { expect { subject.pgacount }.to raise_error(JSON::ParserError) }
|
126
|
+
|
127
|
+
specify { expect { subject.pools }.to raise_error(JSON::ParserError) }
|
128
|
+
|
129
|
+
specify { expect { subject.stats }.to raise_error(JSON::ParserError) }
|
130
|
+
|
131
|
+
specify { expect { subject.summary }.to raise_error(JSON::ParserError) }
|
132
|
+
|
133
|
+
specify { expect { subject.usbstats }.to raise_error(JSON::ParserError) }
|
134
|
+
|
135
|
+
specify { expect { subject.version }.to raise_error(JSON::ParserError) }
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
its(:host) { should eql('my-hostname') }
|
140
|
+
|
141
|
+
its(:port) { should eql(1234) }
|
142
|
+
|
143
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CGMiner::API::Response do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@response = described_class.new(:coin, raw)
|
7
|
+
end
|
8
|
+
|
9
|
+
subject { @response }
|
10
|
+
|
11
|
+
context 'successful response' do
|
12
|
+
|
13
|
+
let(:raw) do
|
14
|
+
<<-EOF
|
15
|
+
{"STATUS":[{"STATUS":"S","When":1391459548,"Code":78,"Msg":"CGMiner coin","Description":"cgminer 3.7.2"}],"COIN":[{"Hash Method":"scrypt","Current Block Time":1391457585.060405,"Current Block Hash":"0012a85cfa3d1b7cc00bf56a5c8cd283e8ca95995d040c42ff4c66f219e24567","LP":true,"Network Difficulty":10.87349847}],"id":1}
|
16
|
+
EOF
|
17
|
+
end
|
18
|
+
|
19
|
+
its(:raw) { should be_a(Hash) }
|
20
|
+
|
21
|
+
its(:body) { should be_a(Array) }
|
22
|
+
|
23
|
+
its(:status) { should be_a(Hash) }
|
24
|
+
|
25
|
+
its(:received_at) { should be_a(DateTime) }
|
26
|
+
|
27
|
+
its(:success?) { should be_true }
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'invalid command response' do
|
32
|
+
|
33
|
+
let(:raw) do
|
34
|
+
<<-EOF
|
35
|
+
{"STATUS":[{"STATUS":"E","When":1391459330,"Code":14,"Msg":"Invalid command","Description":"cgminer 3.7.2"}],"id":1}
|
36
|
+
EOF
|
37
|
+
end
|
38
|
+
|
39
|
+
its(:raw) { should be_a(Hash) }
|
40
|
+
|
41
|
+
its(:body) { should be_nil }
|
42
|
+
|
43
|
+
its(:status) { should be_a(Hash) }
|
44
|
+
|
45
|
+
its(:received_at) { should be_a(DateTime) }
|
46
|
+
|
47
|
+
its(:success?) { should be_false }
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cgminer-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Veys
|
@@ -139,6 +139,8 @@ files:
|
|
139
139
|
- lib/cgminer/api/client.rb
|
140
140
|
- lib/cgminer/api/response.rb
|
141
141
|
- lib/cgminer/api/version.rb
|
142
|
+
- spec/client_spec.rb
|
143
|
+
- spec/response_spec.rb
|
142
144
|
- spec/spec_helper.rb
|
143
145
|
homepage: ''
|
144
146
|
licenses:
|
@@ -165,4 +167,6 @@ signing_key:
|
|
165
167
|
specification_version: 4
|
166
168
|
summary: cgminer api gem
|
167
169
|
test_files:
|
170
|
+
- spec/client_spec.rb
|
171
|
+
- spec/response_spec.rb
|
168
172
|
- spec/spec_helper.rb
|