ngi_api 0.0.5 → 0.0.6
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.
- data/.travis.yml +7 -0
- data/README.md +10 -3
- data/Rakefile +2 -1
- data/lib/ngi_api.rb +30 -24
- data/lib/ngi_api/version.rb +1 -1
- data/spec/ngi_api_spec.rb +150 -47
- data/tasks/rspec.rake +1 -1
- metadata +3 -2
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
# NgiApi
|
2
2
|
|
3
|
-
|
3
|
+
This library is a convenient, easy way to access NGI's API for resellers - simple object methods vs. custom SOAP calls. There are multiple built-in checks for type corrections, and the entered values are automatically adjusted. Return values are parsed and presented as a hash.
|
4
|
+
This gem currently supports all API operations:
|
5
|
+
* list_bts
|
6
|
+
* list_comuni
|
7
|
+
* info_bts
|
8
|
+
* info_radio
|
9
|
+
* reboot_radio
|
10
|
+
* set_ethernet
|
4
11
|
|
5
12
|
## Installation
|
6
13
|
|
@@ -20,11 +27,11 @@ Or install it yourself as:
|
|
20
27
|
|
21
28
|
## Usage
|
22
29
|
|
23
|
-
|
30
|
+
See documentation!
|
24
31
|
|
25
32
|
## Contributing
|
26
33
|
|
27
|
-
1. Fork it ( https://github.com/
|
34
|
+
1. Fork it ( https://github.com/blacksd/ngi_api/fork )
|
28
35
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
29
36
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
30
37
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/Rakefile
CHANGED
data/lib/ngi_api.rb
CHANGED
@@ -33,9 +33,9 @@ class NgiAPI
|
|
33
33
|
@partnerPassword = !!args[:test] ? "517fc7b578767ebfa6bb5252252653d2" : parameter_to_string(args[:partnerPassword])
|
34
34
|
fetch_cacert unless File.exist?('cacert.pem')
|
35
35
|
@soapClient = Savon.client do
|
36
|
-
wsdl !!args[:test] ? "https://www.eolo.it/ws/wsdl/?test" : "https://www.eolo.it/ws/wsdl"
|
36
|
+
wsdl !!args[:test] ? "https://www.eolo.it/ws/wsdl/?test" : "https://www.eolo.it/ws/wsdl/"
|
37
37
|
ssl_ca_cert_file "cacert.pem"
|
38
|
-
if args[:debug]
|
38
|
+
if !!args[:debug]
|
39
39
|
log true
|
40
40
|
log_level :debug
|
41
41
|
pretty_print_xml true
|
@@ -161,7 +161,7 @@ class NgiAPI
|
|
161
161
|
)
|
162
162
|
end
|
163
163
|
|
164
|
-
private
|
164
|
+
private # ------------------
|
165
165
|
|
166
166
|
# formats the mac address for the request, stripping separators and upcasing it
|
167
167
|
def fix_mac_address(mac)
|
@@ -203,28 +203,34 @@ class NgiAPI
|
|
203
203
|
checksum = @partnerLogin
|
204
204
|
|
205
205
|
case type
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
206
|
+
when :info_bts
|
207
|
+
checksum += params[:btsID]
|
208
|
+
message[:btsID] = params[:btsID]
|
209
|
+
when :list_comuni
|
210
|
+
checksum += params[:comune]
|
211
|
+
message[:comune] = params[:comune]
|
212
|
+
when :set_ethernet
|
213
|
+
checksum += params[:macAddress]
|
214
|
+
checksum += params[:statoEthernet]
|
215
|
+
message[:macAddress] = params[:macAddress]
|
216
|
+
message[:statoEthernet] = params[:statoEthernet]
|
217
|
+
when :reboot_radio
|
218
|
+
checksum += params[:macAddress]
|
219
|
+
message[:macAddress] = params[:macAddress]
|
220
|
+
when :info_radio
|
221
|
+
checksum += parameter_to_string(params[:macAddressList])
|
222
|
+
checksum += parameter_to_string(params[:clientLoginList])
|
223
|
+
message[:macAddressList] = {items: params[:macAddressList]}
|
224
|
+
message[:clientLoginList] = {items: params[:clientLoginList]}
|
225
|
+
when :info_coverage
|
226
|
+
checksum += params[:via]
|
227
|
+
checksum += params[:civico]
|
228
|
+
checksum += params[:istat]
|
229
|
+
message[:via] = params[:via]
|
230
|
+
message[:civico] = params[:civico]
|
231
|
+
message[:istat] = params[:istat]
|
232
|
+
when :list_bts # no input needed
|
226
233
|
end
|
227
|
-
|
228
234
|
message[:controlHash] = Digest::MD5.hexdigest(checksum+@partnerPassword)
|
229
235
|
@soapClient.call(type, message: message).to_hash[(type.to_s+"_response").to_sym]
|
230
236
|
end
|
data/lib/ngi_api/version.rb
CHANGED
data/spec/ngi_api_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe NgiAPI do
|
@@ -5,6 +7,35 @@ describe NgiAPI do
|
|
5
7
|
|
6
8
|
before :all do
|
7
9
|
@myNgiAPI = NgiAPI.new({test: true})
|
10
|
+
@macstotest = [
|
11
|
+
# '00.aA.bB.cC.dD.11', # dots
|
12
|
+
# '00:aA:bB:cC:dD:11', # colons
|
13
|
+
# '00-aA-bB-cC-dD-11', # dashes
|
14
|
+
# '00aAbBcCdD11', # no spaces
|
15
|
+
'00aA:bB.cC-dD-11' # mixed
|
16
|
+
]
|
17
|
+
@zeroedmacstotest = [
|
18
|
+
# '00.00.00.00.00.00', # dots
|
19
|
+
# '00:00:00:00:00:00', # colons
|
20
|
+
# '00-00-00-00-00-00', # dashes
|
21
|
+
# '000000000000', # no spaces
|
22
|
+
'0000:00.00-00-00' # mixed
|
23
|
+
]
|
24
|
+
@onedmacstotest = [
|
25
|
+
# '11.11.11.11.11.11', # dots
|
26
|
+
# '11:11:11:11:11:11', # colons
|
27
|
+
# '11-11-11-11-11-11', # dashes
|
28
|
+
# '111111111111', # no spaces
|
29
|
+
'1111:11.11-11-11' # mixed
|
30
|
+
]
|
31
|
+
@loginstotest = [
|
32
|
+
# 'W12345678901' # upcase
|
33
|
+
'w12345678901', # lowcase
|
34
|
+
]
|
35
|
+
@zeroedloginstotest = [
|
36
|
+
# 'W00000000000' # upcase
|
37
|
+
'w00000000000', # lowcase
|
38
|
+
]
|
8
39
|
end
|
9
40
|
|
10
41
|
it 'can build a test instance' do
|
@@ -30,37 +61,22 @@ describe NgiAPI do
|
|
30
61
|
|
31
62
|
describe '#infoRadio' do
|
32
63
|
# OKs
|
33
|
-
it 'is fine with a
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
expect(@myNgiAPI.infoRadio('00:aA:bB:cC:dD:11')[:info][:"@xsi:type"]).to eq("ns1:radioInfoListType")
|
38
|
-
end
|
39
|
-
it 'is fine with a dashed single mac' do
|
40
|
-
expect(@myNgiAPI.infoRadio('00-aA-bB-cC-dD-11')[:info][:"@xsi:type"]).to eq("ns1:radioInfoListType")
|
41
|
-
end
|
42
|
-
it 'is fine with an unspaced single mac' do
|
43
|
-
expect(@myNgiAPI.infoRadio('00aAbBcCdD11')[:info][:"@xsi:type"]).to eq("ns1:radioInfoListType")
|
44
|
-
end
|
45
|
-
it 'is fine with a mixed separated single mac' do
|
46
|
-
expect(@myNgiAPI.infoRadio('00aA:bB.cC-dD-11')[:info][:"@xsi:type"]).to eq("ns1:radioInfoListType")
|
47
|
-
end
|
48
|
-
it 'is okay with a single lowercase login' do
|
49
|
-
expect(@myNgiAPI.infoRadio('w12345678901')[:info][:"@xsi:type"]).to eq("ns1:radioInfoListType")
|
64
|
+
it 'is fine with a single mac' do
|
65
|
+
@macstotest.each do |mac|
|
66
|
+
expect(@myNgiAPI.infoRadio(mac)[:info][:"@xsi:type"]).to eq("ns1:radioInfoListType")
|
67
|
+
end
|
50
68
|
end
|
51
|
-
|
52
|
-
|
69
|
+
|
70
|
+
it 'is okay with a single login' do
|
71
|
+
@loginstotest.each do |login|
|
72
|
+
expect(@myNgiAPI.infoRadio(login)[:info][:"@xsi:type"]).to eq("ns1:radioInfoListType")
|
73
|
+
end
|
53
74
|
end
|
75
|
+
|
54
76
|
it 'is fine with an array of mixed values' do
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
'00aAbBcCdD11',
|
59
|
-
'00aA:bB.cC-dD-11',
|
60
|
-
'w12345678901',
|
61
|
-
'W12345678901'
|
62
|
-
]
|
63
|
-
expect(@myNgiAPI.infoRadio(test_array)[:info][:"@xsi:type"]).to eq("ns1:radioInfoListType")
|
77
|
+
(@macstotest + @loginstotest).each do |element|
|
78
|
+
expect(@myNgiAPI.infoRadio(element)[:info][:"@xsi:type"]).to eq("ns1:radioInfoListType")
|
79
|
+
end
|
64
80
|
end
|
65
81
|
|
66
82
|
# KOs
|
@@ -72,56 +88,143 @@ describe NgiAPI do
|
|
72
88
|
expect{ @myNgiAPI.infoRadio(large_test_array) }.to raise_error(ArgumentError)
|
73
89
|
end
|
74
90
|
it 'fails with a mac value of 000000000000' do
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
expect{ @myNgiAPI.infoRadio('00-00-00-00-00-00') }.to raise_error
|
79
|
-
expect{ @myNgiAPI.infoRadio('000000:00.00-00') }.to raise_error
|
91
|
+
@zeroedmacstotest.each do |zeroedmac|
|
92
|
+
expect{ @myNgiAPI.infoRadio(zeroedmac) }.to raise_error
|
93
|
+
end
|
80
94
|
end
|
95
|
+
|
81
96
|
it 'fails with a login value of W00000000000' do
|
82
|
-
|
83
|
-
|
97
|
+
@zeroedloginstotest.each do |zeroedlogin|
|
98
|
+
expect{ @myNgiAPI.infoRadio(zeroedlogin) }.to raise_error
|
99
|
+
end
|
84
100
|
end
|
85
101
|
|
86
102
|
end
|
87
103
|
|
88
104
|
describe '#infoBts' do
|
89
105
|
# OKs
|
90
|
-
it 'returns sample data
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
106
|
+
it 'returns sample data' do
|
107
|
+
[
|
108
|
+
3, # int
|
109
|
+
"3" # string
|
110
|
+
].each do |bts_input|
|
111
|
+
expect( @myNgiAPI.infoBts(bts_input)[:info_bts][:"@xsi:type"] ).to eq("ns1:BtsFullInfoType")
|
112
|
+
end
|
96
113
|
end
|
97
114
|
|
98
115
|
# KOs
|
99
116
|
it 'throws an error with btsId < 1' do
|
100
|
-
|
101
|
-
|
117
|
+
[
|
118
|
+
0, # int
|
119
|
+
"0" # string
|
120
|
+
].each do |bts_input|
|
121
|
+
expect{ @myNgiAPI.infoBts(bts_input) }.to raise_error(ArgumentError)
|
122
|
+
end
|
102
123
|
end
|
103
124
|
|
104
125
|
end
|
105
126
|
|
106
127
|
describe '#infoCoverage' do
|
107
|
-
|
128
|
+
# OKs
|
129
|
+
it 'returns a list of matching BTSes for the address' do
|
130
|
+
expect( @myNgiAPI.infoCoverage("Viale Monza",12,"01234")[:lista_bts][:"@xsi:type"] ).to eq("ns1:BtsListType")
|
131
|
+
end
|
108
132
|
end
|
109
133
|
|
110
134
|
describe '#listComuni' do
|
135
|
+
# OKs
|
136
|
+
it 'returns a list of towns' do
|
137
|
+
expect( @myNgiAPI.listComuni("someteststring")[:lista_comuni][:"@xsi:type"] ).to eq("ns1:comuneListType")
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'works fine with latin characters' do
|
141
|
+
expect( @myNgiAPI.listComuni("sometestàèéìòùstring")[:lista_comuni][:"@xsi:type"] ).to eq("ns1:comuneListType")
|
142
|
+
end
|
111
143
|
|
144
|
+
# KOs
|
145
|
+
it 'throws an error with a short (<2 chars) param' do
|
146
|
+
expect{ @myNgiAPI.listComuni("a") }.to raise_error(ArgumentError)
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'throws an error with a long (>35 chars) param' do
|
150
|
+
expect{ @myNgiAPI.listComuni("areallylongstringthatshouldnotbeatown") }.to raise_error(ArgumentError)
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'returns an empty list with a "nolist" param' do
|
154
|
+
expect( @myNgiAPI.listComuni("nolist")[:lista_comuni][:items] ).to be_nil
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'throws an error with a "error" param' do
|
158
|
+
expect{ @myNgiAPI.listComuni("error") }.to raise_error
|
159
|
+
end
|
112
160
|
end
|
113
161
|
|
114
162
|
describe '#setEthernet' do
|
163
|
+
# OKs
|
164
|
+
it 'can enable an ethernet interface' do
|
165
|
+
[
|
166
|
+
1, # int
|
167
|
+
true # bool
|
168
|
+
].each do |eth_enable_state|
|
169
|
+
@macstotest.each do |mac|
|
170
|
+
expect( @myNgiAPI.setEthernet(mac,eth_enable_state)[:stato_ethernet] ).to be true
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
115
174
|
|
175
|
+
it 'can disable an ethernet interface' do
|
176
|
+
[
|
177
|
+
0, # int
|
178
|
+
false # bool
|
179
|
+
].each do |eth_enable_state|
|
180
|
+
@macstotest.each do |mac|
|
181
|
+
expect( @myNgiAPI.setEthernet(mac,eth_enable_state)[:stato_ethernet] ).to be false
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
# KOs
|
187
|
+
it 'throws an error if mac is all 1s' do
|
188
|
+
[
|
189
|
+
true, # bool
|
190
|
+
false
|
191
|
+
].each do |eth_state|
|
192
|
+
@onedmacstotest.each do |onedmac|
|
193
|
+
expect{ @myNgiAPI.setEthernet(onedmac,eth_state) }.to raise_error
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
it 'always gets a false with a mac of all 0s' do
|
199
|
+
[
|
200
|
+
true, # bool
|
201
|
+
false
|
202
|
+
].each do |eth_state|
|
203
|
+
@zeroedmacstotest.each do |zeroedmac|
|
204
|
+
expect( @myNgiAPI.setEthernet(zeroedmac,eth_state)[:stato_ethernet] ).to be false
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
116
208
|
end
|
117
209
|
|
118
210
|
describe '#rebootRadio' do
|
119
211
|
# OKs
|
120
|
-
it 'returns true'
|
212
|
+
it 'returns true' do
|
213
|
+
@macstotest.each do |mac|
|
214
|
+
expect( @myNgiAPI.rebootRadio(mac)[:esito] ).to be true
|
215
|
+
end
|
216
|
+
end
|
121
217
|
|
122
218
|
# KOs
|
123
|
-
it 'throws an error if mac address is invalid'
|
124
|
-
|
219
|
+
it 'throws an error if mac address is invalid' do
|
220
|
+
expect{ @myNgiAPI.rebootRadio('someinvalidstring') }.to raise_error(ArgumentError)
|
221
|
+
end
|
222
|
+
|
223
|
+
it 'returns an error if mac is all 0s or all 1s' do
|
224
|
+
(@zeroedmacstotest + @onedmacstotest).each do |mac|
|
225
|
+
expect{ @myNgiAPI.rebootRadio(mac) }.to raise_error
|
226
|
+
end
|
227
|
+
end
|
125
228
|
end
|
126
229
|
end
|
127
230
|
|
data/tasks/rspec.rake
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ngi_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-02-
|
12
|
+
date: 2015-02-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -99,6 +99,7 @@ extensions: []
|
|
99
99
|
extra_rdoc_files: []
|
100
100
|
files:
|
101
101
|
- .gitignore
|
102
|
+
- .travis.yml
|
102
103
|
- Gemfile
|
103
104
|
- LICENSE.txt
|
104
105
|
- README.md
|