snmp 1.3.2 → 1.3.3
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/CHANGELOG.md +63 -0
- data/MIT-LICENSE +19 -0
- data/README.md +143 -0
- data/Rakefile +13 -49
- data/dump_yaml.rb +13 -0
- data/import.rb +22 -0
- data/lib/snmp/manager.rb +17 -11
- data/lib/snmp/mib.rb +1 -0
- data/lib/snmp/version.rb +1 -1
- metadata +19 -80
- data/README.rdoc +0 -206
- data/test/if_table1.yaml +0 -81
- data/test/if_table6.yaml +0 -441
- data/test/test_ber.rb +0 -243
- data/test/test_manager.rb +0 -351
- data/test/test_mib.rb +0 -102
- data/test/test_pdu.rb +0 -201
- data/test/test_retry.rb +0 -84
- data/test/test_smi.rb +0 -21
- data/test/test_varbind.rb +0 -383
- data/test/test_walk.rb +0 -193
data/test/test_ber.rb
DELETED
@@ -1,243 +0,0 @@
|
|
1
|
-
# encoding: ascii-8bit
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require 'minitest/autorun'
|
5
|
-
require 'snmp/varbind'
|
6
|
-
require 'snmp/ber'
|
7
|
-
|
8
|
-
class ASN1_Test < Minitest::Test
|
9
|
-
|
10
|
-
include SNMP::BER::Encode
|
11
|
-
include SNMP::BER::Decode
|
12
|
-
|
13
|
-
def test_decode_tlv_empty
|
14
|
-
tag, value, data = decode_tlv("\001\000")
|
15
|
-
assert_equal(1, tag)
|
16
|
-
assert_equal("", value)
|
17
|
-
assert_equal("", data)
|
18
|
-
|
19
|
-
tag, value, data = decode_tlv("\001\000\111")
|
20
|
-
assert_equal(1, tag)
|
21
|
-
assert_equal("", value)
|
22
|
-
assert_equal("\111", data)
|
23
|
-
end
|
24
|
-
|
25
|
-
# Decode TLV data with the short-format length field.
|
26
|
-
def test_decode_tlv_short
|
27
|
-
tag, value, data = decode_tlv("\001\002\023\044")
|
28
|
-
assert_equal(1, tag)
|
29
|
-
assert_equal("\023\044", value)
|
30
|
-
assert_equal("", data)
|
31
|
-
end
|
32
|
-
|
33
|
-
# Extra bytes of data are returned.
|
34
|
-
def test_decode_tlv_short_extra
|
35
|
-
tag, value, data = decode_tlv("\001\002\023\044\000")
|
36
|
-
assert_equal(1, tag)
|
37
|
-
assert_equal("\023\044", value)
|
38
|
-
assert_equal("\000", data)
|
39
|
-
end
|
40
|
-
|
41
|
-
# Decode TLV data with long-format length field
|
42
|
-
def test_decode_tlv_long
|
43
|
-
long_data = "".dup; 128.times { |i| long_data << i.chr }
|
44
|
-
tag, value, data = decode_tlv("\001\201\200" + long_data)
|
45
|
-
assert_equal(1, tag)
|
46
|
-
assert_equal(long_data, value)
|
47
|
-
assert_equal("", data)
|
48
|
-
end
|
49
|
-
|
50
|
-
# Long format with extra bytes - use four bytes for length
|
51
|
-
def test_decode_tlv_long_extra
|
52
|
-
long_data = "".dup; 129.times { |i| long_data << i.chr }
|
53
|
-
tag, value, data = decode_tlv("\001\204\000\000\000\201" + long_data + "\123\123\123")
|
54
|
-
assert_equal(1, tag)
|
55
|
-
assert_equal(long_data, value)
|
56
|
-
assert_equal("\123\123\123", data)
|
57
|
-
end
|
58
|
-
|
59
|
-
# Check invalid length - ASN.1 says that first length octet can't be 255.
|
60
|
-
def test_bad_length
|
61
|
-
assert_raises(BER::InvalidLength) {
|
62
|
-
decode_tlv("\001\377\001")
|
63
|
-
}
|
64
|
-
end
|
65
|
-
|
66
|
-
# Check if input data is too short
|
67
|
-
def test_out_of_data
|
68
|
-
assert_raises(BER::OutOfData) {
|
69
|
-
decode_tlv("\001\001")
|
70
|
-
}
|
71
|
-
assert_raises(BER::OutOfData) {
|
72
|
-
decode_tlv("\001")
|
73
|
-
}
|
74
|
-
assert_raises(BER::OutOfData) {
|
75
|
-
decode_tlv("")
|
76
|
-
}
|
77
|
-
end
|
78
|
-
|
79
|
-
# Decode single-octet ASN.1 integer.
|
80
|
-
# Number is negative (2's complement) if high order bit is 1.
|
81
|
-
def test_decode_integer_octet
|
82
|
-
i, data = decode_integer("\002\001\042")
|
83
|
-
assert_equal(34, i)
|
84
|
-
assert_equal("", data)
|
85
|
-
i, data = decode_integer("\002\001\377")
|
86
|
-
assert_equal(-1, i)
|
87
|
-
assert_equal("", data)
|
88
|
-
end
|
89
|
-
|
90
|
-
# Decode multi-octet ASN.1 integer.
|
91
|
-
def test_decode_integer
|
92
|
-
i, data = decode_integer("\002\004\001\002\003\004")
|
93
|
-
assert_equal(16909060, i)
|
94
|
-
assert_equal("", data)
|
95
|
-
|
96
|
-
i, data = decode_integer("\002\004\377\377\377\376")
|
97
|
-
assert_equal(-2, i)
|
98
|
-
assert_equal("", data)
|
99
|
-
|
100
|
-
i, data = decode_integer("\002\003\000\377\376")
|
101
|
-
assert_equal(65534, i)
|
102
|
-
assert_equal("", data)
|
103
|
-
|
104
|
-
i, data = decode_integer("\002\002\000\377")
|
105
|
-
assert_equal(255, i)
|
106
|
-
assert_equal("", data)
|
107
|
-
|
108
|
-
assert_raises(BER::InvalidTag) {
|
109
|
-
decode_integer("\001\004\001\002\003\004")
|
110
|
-
}
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_decode_timeticks
|
114
|
-
i, data = decode_timeticks("\103\004\001\002\003\004")
|
115
|
-
assert_equal(16909060, i)
|
116
|
-
assert_equal("", data)
|
117
|
-
|
118
|
-
assert_raises(BER::InvalidTag) {
|
119
|
-
decode_timeticks("\002\004\001\002\003\004")
|
120
|
-
}
|
121
|
-
end
|
122
|
-
|
123
|
-
# Decode ASN.1 octet string
|
124
|
-
def test_decode_octet_string
|
125
|
-
s, _ = decode_octet_string("\004\202\000\005hello")
|
126
|
-
assert_equal("hello",s)
|
127
|
-
assert_raises(BER::InvalidTag) {
|
128
|
-
decode_octet_string("\005\202\000\005hello")
|
129
|
-
}
|
130
|
-
end
|
131
|
-
|
132
|
-
def test_decode_ip_address
|
133
|
-
ip, _ = decode_ip_address("@\004\001\002\003\004")
|
134
|
-
assert_equal(ip, "\001\002\003\004")
|
135
|
-
assert_raises(BER::InvalidTag) {
|
136
|
-
decode_ip_address("\004\004\001\002\003\004")
|
137
|
-
}
|
138
|
-
assert_raises(BER::InvalidLength) {
|
139
|
-
decode_ip_address("@\005\001\002\003\004\005")
|
140
|
-
}
|
141
|
-
end
|
142
|
-
|
143
|
-
# Decode ASN.1 sequence
|
144
|
-
def test_decode_sequence
|
145
|
-
seq, data = decode_sequence("\060\003\002\001\077")
|
146
|
-
assert_equal("\002\001\077", seq)
|
147
|
-
assert_equal("", data)
|
148
|
-
|
149
|
-
seq, data = decode_sequence("\060\003\002\001\077\002\001\001")
|
150
|
-
assert_equal("\002\001\077", seq)
|
151
|
-
assert_equal("\002\001\001", data)
|
152
|
-
|
153
|
-
assert_raises(BER::InvalidTag) {
|
154
|
-
decode_sequence("\061\003\002\001\077")
|
155
|
-
}
|
156
|
-
end
|
157
|
-
|
158
|
-
def test_decode_object_id
|
159
|
-
# Handle an empty object identifier because net-snmp does it and
|
160
|
-
# they probably had a good reason.
|
161
|
-
object_id, remainder = decode_object_id("\006\000")
|
162
|
-
assert_equal([], object_id)
|
163
|
-
assert_equal("", remainder)
|
164
|
-
|
165
|
-
object_id, remainder = decode_object_id("\006\001+")
|
166
|
-
assert_equal([1,3], object_id);
|
167
|
-
assert_equal("", remainder)
|
168
|
-
|
169
|
-
object_id, remainder = decode_object_id("\006\002+\006")
|
170
|
-
assert_equal([1,3,6], object_id);
|
171
|
-
assert_equal("", remainder)
|
172
|
-
|
173
|
-
object_id, remainder = decode_object_id("\006\003+\202\001")
|
174
|
-
assert_equal([1,3,257], object_id);
|
175
|
-
assert_equal("", remainder)
|
176
|
-
|
177
|
-
object_id, remainder = decode_object_id("\006\003S\202\001")
|
178
|
-
assert_equal([2,3,257], object_id);
|
179
|
-
assert_equal("", remainder)
|
180
|
-
|
181
|
-
object_id, remainder = decode_object_id("\006\001\000")
|
182
|
-
assert_equal([0,0], object_id);
|
183
|
-
assert_equal("", remainder)
|
184
|
-
|
185
|
-
assert_raises(BER::InvalidTag) do
|
186
|
-
decode_object_id("\007\001+")
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
def test_encode_length
|
191
|
-
assert_equal("\000", encode_length(0))
|
192
|
-
assert_equal("\001", encode_length(1))
|
193
|
-
assert_equal("\177", encode_length(127))
|
194
|
-
assert_equal("\201\200", encode_length(128))
|
195
|
-
assert_equal("\202\002\001", encode_length(513))
|
196
|
-
assert_raises(BER::InvalidLength) { encode_length(-1) }
|
197
|
-
end
|
198
|
-
|
199
|
-
def test_encode_integer
|
200
|
-
assert_equal("\002\001\000", encode_integer(0))
|
201
|
-
assert_equal("\002\001\001", encode_integer(1))
|
202
|
-
assert_equal("\002\001\177", encode_integer(127))
|
203
|
-
assert_equal("\002\002\000\200", encode_integer(128))
|
204
|
-
assert_equal("\002\002\000\377", encode_integer(255))
|
205
|
-
assert_equal("\002\002\001\000", encode_integer(256))
|
206
|
-
|
207
|
-
assert_equal("\002\001\377", encode_integer(-1))
|
208
|
-
assert_equal("\002\001\200", encode_integer(-128))
|
209
|
-
assert_equal("\002\002\377\177", encode_integer(-129))
|
210
|
-
end
|
211
|
-
|
212
|
-
def test_encode_octet_string
|
213
|
-
assert_equal("\004\015Dave was here", encode_octet_string("Dave was here"))
|
214
|
-
assert_equal("\004\000", encode_octet_string(""))
|
215
|
-
end
|
216
|
-
|
217
|
-
def test_encode_sequence
|
218
|
-
assert_equal("0\015Dave was here", encode_sequence("Dave was here"))
|
219
|
-
assert_equal("0\000", encode_sequence(""))
|
220
|
-
end
|
221
|
-
|
222
|
-
def test_encode_null
|
223
|
-
assert_equal("\005\000", encode_null)
|
224
|
-
end
|
225
|
-
|
226
|
-
def test_encode_exception
|
227
|
-
assert_equal("\200\000", encode_exception(0x80))
|
228
|
-
end
|
229
|
-
|
230
|
-
def test_encode_object_id
|
231
|
-
assert_equal("\006\001".dup << 80.chr, encode_object_id([2]))
|
232
|
-
assert_equal("\006\001\000", encode_object_id([0,0]))
|
233
|
-
assert_equal("\006\001+", encode_object_id([1,3]))
|
234
|
-
assert_equal("\006\002+\006", encode_object_id([1,3,6]))
|
235
|
-
assert_equal("\006\003+\202\001", encode_object_id([1,3,257]))
|
236
|
-
assert_equal("\006\003".dup << 82.chr << "\202\001", encode_object_id([2,2,257]))
|
237
|
-
assert_raises(BER::InvalidObjectId) { encode_object_id([3,2,257]) }
|
238
|
-
assert_raises(BER::InvalidObjectId) { encode_object_id([]) }
|
239
|
-
|
240
|
-
assert_equal("\006\a+\203\377\177\203\377\177",
|
241
|
-
encode_object_id(SNMP::ObjectId.new("1.3.65535.65535")))
|
242
|
-
end
|
243
|
-
end
|
data/test/test_manager.rb
DELETED
@@ -1,351 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'minitest/autorun'
|
4
|
-
require 'snmp/manager'
|
5
|
-
|
6
|
-
class EchoTransport
|
7
|
-
def initialize
|
8
|
-
end
|
9
|
-
|
10
|
-
def close
|
11
|
-
end
|
12
|
-
|
13
|
-
def send(data, host, port)
|
14
|
-
@data = data
|
15
|
-
end
|
16
|
-
|
17
|
-
def recv(max_bytes)
|
18
|
-
SNMP::Message.decode(@data).response.encode[0,max_bytes]
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class TestConfig < Minitest::Test
|
23
|
-
|
24
|
-
include SNMP
|
25
|
-
|
26
|
-
def test_new_style_symbols
|
27
|
-
config = Manager::Config.new(:host => "test")
|
28
|
-
assert_equal("test", config.host)
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_defaults
|
32
|
-
config = Manager::Config.new({})
|
33
|
-
assert_equal("localhost", config.host)
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_old_style_symbols
|
37
|
-
config = Manager::Config.new(:Transport => "transport")
|
38
|
-
assert_equal("transport", config.transport)
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_invalid_option
|
42
|
-
assert_raises(RuntimeError) { Manager::Config.new(:fly_to_the_moon => true) }
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_ipv6_address_guessing
|
46
|
-
config = Manager::Config.new(:host => "::1")
|
47
|
-
assert(config.use_IPv6)
|
48
|
-
assert_equal("::1", config.host)
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_applied_config
|
52
|
-
config = Manager::Config.new(:host => "1:2:3:4:5:6:7:8", :port => 42, :timeout => 3)
|
53
|
-
config.host
|
54
|
-
config.use_IPv6
|
55
|
-
config.retries
|
56
|
-
assert_equal({:host=>"1:2:3:4:5:6:7:8", :retries=>5, :use_IPv6=>true,
|
57
|
-
:Host => "1:2:3:4:5:6:7:8", :Retries => 5}, config.applied_config)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
class TestManager < Minitest::Test
|
62
|
-
|
63
|
-
include SNMP
|
64
|
-
|
65
|
-
def setup
|
66
|
-
@manager = Manager.new(:Transport => EchoTransport.new)
|
67
|
-
end
|
68
|
-
|
69
|
-
def teardown
|
70
|
-
@manager.close
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_defaults
|
74
|
-
assert_equal('localhost', @manager.config[:host])
|
75
|
-
assert_equal(161, @manager.config[:port])
|
76
|
-
assert_equal('public', @manager.config[:write_community])
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_community
|
80
|
-
@manager = Manager.new(:WriteCommunity=>'private', :Transport => EchoTransport.new)
|
81
|
-
assert_equal('public', @manager.config[:community])
|
82
|
-
assert_equal('private', @manager.config[:write_community])
|
83
|
-
|
84
|
-
@manager = Manager.new(:Community=>'test', :Transport => EchoTransport.new)
|
85
|
-
assert_equal('test', @manager.config[:community])
|
86
|
-
assert_equal('test', @manager.config[:write_community])
|
87
|
-
|
88
|
-
@manager = Manager.new(:Community=>'test', :WriteCommunity=>'private',
|
89
|
-
:Transport => EchoTransport.new)
|
90
|
-
assert_equal('test', @manager.config[:community])
|
91
|
-
assert_equal('private', @manager.config[:write_community])
|
92
|
-
end
|
93
|
-
|
94
|
-
def test_transport_instance
|
95
|
-
@manager = Manager.new(:Transport => EchoTransport.new)
|
96
|
-
response = @manager.get("1.2.3.4")
|
97
|
-
assert_equal("1.2.3.4", response.varbind_list.first.name.to_s)
|
98
|
-
end
|
99
|
-
|
100
|
-
def test_get
|
101
|
-
response = @manager.get("1.2.3.4")
|
102
|
-
assert_equal("1.2.3.4", response.varbind_list.first.name.to_s)
|
103
|
-
|
104
|
-
response = @manager.get([ObjectId.new("1.2.3.4"), ObjectId.new("1.2.3.4.5")])
|
105
|
-
assert_equal(ObjectId.new("1.2.3.4.5"), response.varbind_list[1].name)
|
106
|
-
end
|
107
|
-
|
108
|
-
def test_get_with_nil
|
109
|
-
assert_raises(ArgumentError) { @manager.get(nil) }
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_get_value
|
113
|
-
value = @manager.get_value("1.2.3.4")
|
114
|
-
assert_equal(Null, value)
|
115
|
-
|
116
|
-
value = @manager.get_value(["1.2.3.4"])
|
117
|
-
assert_equal([Null], value)
|
118
|
-
|
119
|
-
values = @manager.get_value(["1.2.3.4", "1.2.3.4.5"])
|
120
|
-
assert_equal(2, values.length)
|
121
|
-
assert_equal(Null, values[0])
|
122
|
-
assert_equal(Null, values[1])
|
123
|
-
end
|
124
|
-
|
125
|
-
def test_get_next
|
126
|
-
response = @manager.get_next("1.2.3.4")
|
127
|
-
assert_equal("1.2.3.4", response.varbind_list.first.name.to_s)
|
128
|
-
|
129
|
-
response = @manager.get_next([ObjectId.new("1.2.3.4"), ObjectId.new("1.2.3.4.5")])
|
130
|
-
assert_equal(ObjectId.new("1.2.3.4.5"), response.varbind_list[1].name)
|
131
|
-
end
|
132
|
-
|
133
|
-
def test_get_next_with_nil
|
134
|
-
assert_raises(ArgumentError) { @manager.get_next(nil) }
|
135
|
-
end
|
136
|
-
|
137
|
-
def test_set
|
138
|
-
v0 = VarBind.new("1.3.6.1.3.1.1.1.0", OctetString.new("Hello1"))
|
139
|
-
v1 = VarBind.new("1.3.6.1.3.1.1.1.0", OctetString.new("Hello2"))
|
140
|
-
response = @manager.set([v0, v1])
|
141
|
-
assert_equal("Hello1", response.varbind_list[0].value.to_s)
|
142
|
-
assert_equal("Hello2", response.varbind_list[1].value.to_s)
|
143
|
-
end
|
144
|
-
|
145
|
-
def test_set_with_nil
|
146
|
-
assert_raises(ArgumentError) { @manager.set(nil) }
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_single_set
|
150
|
-
varbind = VarBind.new("1.3.6.1.3.1.1.1.0", OctetString.new("Hello"))
|
151
|
-
response = @manager.set(varbind)
|
152
|
-
assert_equal("Hello", response.varbind_list.first.value.to_s)
|
153
|
-
end
|
154
|
-
|
155
|
-
def test_get_bulk
|
156
|
-
response = @manager.get_bulk(1, 3, ["1.3.6.1.3.1.1.1.0", "1.3.6.1.3.1.1.2.0"])
|
157
|
-
assert_equal(:noError, response.error_status)
|
158
|
-
assert_equal(0, response.error_index)
|
159
|
-
assert_equal(2, response.varbind_list.length)
|
160
|
-
assert_equal("SNMPv2-SMI::experimental.1.1.1.0", response.varbind_list[0].name.to_s)
|
161
|
-
assert_equal("SNMPv2-SMI::experimental.1.1.2.0", response.varbind_list[1].name.to_s)
|
162
|
-
end
|
163
|
-
|
164
|
-
def test_get_bulk_with_nil
|
165
|
-
assert_raises(ArgumentError) { @manager.get_bulk(nil, nil, nil) }
|
166
|
-
end
|
167
|
-
|
168
|
-
def test_walk
|
169
|
-
old_verbose = $VERBOSE
|
170
|
-
$VERBOSE = nil
|
171
|
-
@manager.walk("ifTable") { fail "Expected break from OID not increasing" }
|
172
|
-
ensure
|
173
|
-
$VERBOSE = old_verbose
|
174
|
-
end
|
175
|
-
|
176
|
-
def test_walk_with_nil
|
177
|
-
assert_raises(ArgumentError) { @manager.walk(nil) {} }
|
178
|
-
end
|
179
|
-
|
180
|
-
def test_request_id
|
181
|
-
id = RequestId.new
|
182
|
-
fail if id.next < 0 or id.next >= 2**31
|
183
|
-
|
184
|
-
id.force_next(1)
|
185
|
-
assert_equal(1, id.next)
|
186
|
-
|
187
|
-
id.force_next(RequestId::MAX_REQUEST_ID-1)
|
188
|
-
assert_equal(RequestId::MAX_REQUEST_ID-1, id.next)
|
189
|
-
|
190
|
-
assert_raises(RuntimeError) { id.force_next(RequestId::MAX_REQUEST_ID) }
|
191
|
-
assert_raises(RuntimeError) { id.force_next(0) }
|
192
|
-
end
|
193
|
-
|
194
|
-
def test_trap_v1
|
195
|
-
manager = Manager.new(:Transport => EchoTransport.new, :Version => :SNMPv1)
|
196
|
-
sent_data = manager.trap_v1(
|
197
|
-
"enterprises.9",
|
198
|
-
"10.1.2.3",
|
199
|
-
:enterpriseSpecific,
|
200
|
-
42,
|
201
|
-
12345,
|
202
|
-
[VarBind.new("1.3.6.1.2.3.4", SNMP::Integer.new(1))]
|
203
|
-
)
|
204
|
-
pdu = Message.decode(sent_data).pdu
|
205
|
-
assert_equal(ObjectId.new("1.3.6.1.4.1.9"), pdu.enterprise)
|
206
|
-
assert_equal(IpAddress.new("10.1.2.3"), pdu.agent_addr)
|
207
|
-
assert_equal(:enterpriseSpecific, pdu.generic_trap)
|
208
|
-
assert_equal(42, pdu.specific_trap)
|
209
|
-
assert_equal(TimeTicks.new(12345), pdu.timestamp)
|
210
|
-
assert_equal(1, pdu.vb_list.length)
|
211
|
-
end
|
212
|
-
|
213
|
-
def test_trap_v1_with_nil
|
214
|
-
assert_raises(ArgumentError) { @manager.trap_v1(nil) }
|
215
|
-
end
|
216
|
-
|
217
|
-
def test_trap_v2
|
218
|
-
sent_data = @manager.trap_v2(1234, "1.3.6.1.2.3.4")
|
219
|
-
pdu = Message.decode(sent_data).pdu
|
220
|
-
assert_equal(1234, pdu.sys_up_time)
|
221
|
-
assert_equal("1.3.6.1.2.3.4", pdu.trap_oid.to_s)
|
222
|
-
assert_equal(2, pdu.vb_list.length)
|
223
|
-
|
224
|
-
sent_data = @manager.trap_v2(1234, "1.3.6.1.2.3.4", ["1.2.3", "1.4.5.6"])
|
225
|
-
pdu = Message.decode(sent_data).pdu
|
226
|
-
assert_equal(1234, pdu.sys_up_time)
|
227
|
-
assert_equal("1.3.6.1.2.3.4", pdu.trap_oid.to_s)
|
228
|
-
assert_equal(4, pdu.vb_list.length)
|
229
|
-
assert_equal("1.4.5.6", pdu.vb_list.last.name.to_s)
|
230
|
-
end
|
231
|
-
|
232
|
-
def test_trap_v2_with_nil
|
233
|
-
assert_raises(ArgumentError) { @manager.trap_v2(nil, nil, nil) }
|
234
|
-
end
|
235
|
-
|
236
|
-
def test_inform
|
237
|
-
response = @manager.inform(1234, "1.3.6.1.2.3.4")
|
238
|
-
assert_equal(1234, response.vb_list[0].value)
|
239
|
-
assert_equal("SNMPv2-SMI::mgmt.3.4", response.vb_list[1].value.to_s)
|
240
|
-
assert_equal(2, response.vb_list.length)
|
241
|
-
|
242
|
-
response = @manager.inform(1234, "1.3.6.1.2.3.4", ["1.2.3", "1.4.5.6"])
|
243
|
-
assert_equal(1234, response.vb_list[0].value)
|
244
|
-
assert_equal("SNMPv2-SMI::mgmt.3.4", response.vb_list[1].value.to_s)
|
245
|
-
assert_equal(4, response.vb_list.length)
|
246
|
-
end
|
247
|
-
end
|
248
|
-
|
249
|
-
class TrapTestTransport
|
250
|
-
include SNMP
|
251
|
-
def initialize
|
252
|
-
@count = 0
|
253
|
-
sys_up_varbind = VarBind.new(ObjectId.new("1.3.6.1.2.1.1.3.0"),
|
254
|
-
TimeTicks.new(1234))
|
255
|
-
trap_oid_varbind = VarBind.new(ObjectId.new("1.3.6.1.6.3.1.1.4.1.0"),
|
256
|
-
ObjectId.new("1.2.3"))
|
257
|
-
trap = SNMPv2_Trap.new(42, VarBindList.new([sys_up_varbind, trap_oid_varbind]))
|
258
|
-
message = Message.new(:SNMPv2c, "public", trap)
|
259
|
-
@data = message.encode
|
260
|
-
end
|
261
|
-
|
262
|
-
def close
|
263
|
-
end
|
264
|
-
|
265
|
-
def recvfrom(max_bytes)
|
266
|
-
@count += 1
|
267
|
-
case @count
|
268
|
-
when 1
|
269
|
-
return @data, "127.0.0.1"
|
270
|
-
when 2
|
271
|
-
Thread.exit
|
272
|
-
else
|
273
|
-
raise "Huh?"
|
274
|
-
end
|
275
|
-
end
|
276
|
-
end
|
277
|
-
|
278
|
-
|
279
|
-
class TestTrapListener < Minitest::Test
|
280
|
-
include SNMP
|
281
|
-
|
282
|
-
def test_init_no_handlers
|
283
|
-
init_called = false
|
284
|
-
m = TrapListener.new(:ServerTransport => TrapTestTransport.new) do |manager|
|
285
|
-
init_called = true
|
286
|
-
end
|
287
|
-
m.join
|
288
|
-
assert(init_called)
|
289
|
-
end
|
290
|
-
|
291
|
-
def test_v2c_handler
|
292
|
-
default_called = false
|
293
|
-
v2c_called = false
|
294
|
-
m = TrapListener.new(:ServerTransport => TrapTestTransport.new) do |manager|
|
295
|
-
manager.on_trap_default { default_called = true }
|
296
|
-
manager.on_trap_v2c { v2c_called = true }
|
297
|
-
end
|
298
|
-
m.join
|
299
|
-
assert(!default_called)
|
300
|
-
assert(v2c_called)
|
301
|
-
end
|
302
|
-
|
303
|
-
def test_oid_handler
|
304
|
-
default_called = false
|
305
|
-
v2c_called = false
|
306
|
-
oid_called = false
|
307
|
-
m = TrapListener.new(:ServerTransport => TrapTestTransport.new) do |manager|
|
308
|
-
manager.on_trap("1.2.3") do |trap|
|
309
|
-
assert_equal(ObjectId.new("1.2.3"), trap.trap_oid)
|
310
|
-
assert_equal("127.0.0.1", trap.source_ip)
|
311
|
-
oid_called = true
|
312
|
-
end
|
313
|
-
manager.on_trap_default { default_called = true }
|
314
|
-
manager.on_trap_v2c { v2c_called = true }
|
315
|
-
end
|
316
|
-
m.join
|
317
|
-
assert(!default_called)
|
318
|
-
assert(!v2c_called)
|
319
|
-
assert(oid_called)
|
320
|
-
end
|
321
|
-
|
322
|
-
##
|
323
|
-
# Should filter traps with a 'public' community if that community is not accepted
|
324
|
-
#
|
325
|
-
def test_reject_community
|
326
|
-
assert !public_trap_passes?("test")
|
327
|
-
assert !public_trap_passes?(["foo", "bar"])
|
328
|
-
assert !public_trap_passes?([])
|
329
|
-
end
|
330
|
-
|
331
|
-
##
|
332
|
-
# Should accept traps with a 'public' community if that community is allowed.
|
333
|
-
#
|
334
|
-
def test_accept_community
|
335
|
-
assert public_trap_passes? "public"
|
336
|
-
assert public_trap_passes? ["test", "public"]
|
337
|
-
assert public_trap_passes? nil
|
338
|
-
end
|
339
|
-
|
340
|
-
def public_trap_passes?(community_filter)
|
341
|
-
default_called = false
|
342
|
-
m = TrapListener.new(
|
343
|
-
:community => community_filter,
|
344
|
-
:server_transport => TrapTestTransport.new) do |manager|
|
345
|
-
manager.on_trap_default { default_called = true }
|
346
|
-
end
|
347
|
-
m.join
|
348
|
-
default_called
|
349
|
-
end
|
350
|
-
|
351
|
-
end
|
data/test/test_mib.rb
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'minitest/autorun'
|
4
|
-
require 'snmp/mib'
|
5
|
-
|
6
|
-
module SNMP
|
7
|
-
|
8
|
-
class TestMib < Minitest::Test
|
9
|
-
|
10
|
-
def setup
|
11
|
-
@mib = MIB.new
|
12
|
-
@mib.load_module("SNMPv2-SMI")
|
13
|
-
@mib.load_module("SNMPv2-MIB")
|
14
|
-
@mib.load_module("IF-MIB")
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_name_to_oid
|
18
|
-
oid = @mib.oid("1.2.3.4")
|
19
|
-
assert_equal("1.2.3.4", oid.to_s)
|
20
|
-
|
21
|
-
oid = @mib.oid("ifTable")
|
22
|
-
assert_equal("1.3.6.1.2.1.2.2", oid.to_s)
|
23
|
-
|
24
|
-
oid = @mib.oid("sysDescr.0")
|
25
|
-
assert_equal("1.3.6.1.2.1.1.1.0", oid.to_s)
|
26
|
-
|
27
|
-
oid = @mib.oid("ifTable.1.23")
|
28
|
-
assert_equal("1.3.6.1.2.1.2.2.1.23", oid.to_s)
|
29
|
-
|
30
|
-
oid = @mib.oid("IF-MIB::ifTable.1.23")
|
31
|
-
assert_equal("1.3.6.1.2.1.2.2.1.23", oid.to_s)
|
32
|
-
|
33
|
-
assert_raises(MIB::ModuleNotLoadedError) {
|
34
|
-
@mib.oid("IFMIB::ifTable.1.23")
|
35
|
-
}
|
36
|
-
|
37
|
-
assert_raises(ArgumentError) {
|
38
|
-
@mib.oid("IF-MIB::")
|
39
|
-
}
|
40
|
-
|
41
|
-
assert_raises(ArgumentError) {
|
42
|
-
MIB.new.oid("sysDescr.0")
|
43
|
-
}
|
44
|
-
|
45
|
-
assert_equal("1.2.3.4", MIB.new.oid("1.2.3.4").to_s)
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_varbind_list
|
49
|
-
vb_list = @mib.varbind_list("1.2.3.4")
|
50
|
-
assert_equal(1, vb_list.length)
|
51
|
-
assert_equal("1.2.3.4", vb_list.first.name.to_s)
|
52
|
-
|
53
|
-
vb_list = @mib.varbind_list(["1.2.3.4"])
|
54
|
-
assert_equal(1, vb_list.length)
|
55
|
-
assert_equal("1.2.3.4", vb_list.first.name.to_s)
|
56
|
-
|
57
|
-
vb_list = @mib.varbind_list(["IF-MIB::ifTable.1.23", "1.2.3.4"])
|
58
|
-
assert_equal(2, vb_list.length)
|
59
|
-
assert_equal("1.3.6.1.2.1.2.2.1.23", vb_list.first.name.to_s)
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_varbind_list_with_nil
|
63
|
-
assert_raises(ArgumentError) { @mib.varbind_list(nil) }
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_varbind
|
67
|
-
vb = @mib.varbind("1.2.3.4", Null)
|
68
|
-
assert_equal("1.2.3.4", vb.name.to_s)
|
69
|
-
assert_equal(Null, vb.value)
|
70
|
-
|
71
|
-
vb = @mib.varbind("IF-MIB::ifTable.3.45", Integer.new(2))
|
72
|
-
assert_equal("1.3.6.1.2.1.2.2.3.45", vb.name.to_s)
|
73
|
-
assert_equal(2, vb.value)
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_list
|
77
|
-
list = MIB.list_imported(/SNMPv2/)
|
78
|
-
assert_equal(4, list.length)
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_name
|
82
|
-
cases = [["1.3.6.1.2.1.2.2.3.45", "IF-MIB::ifTable.3.45"],
|
83
|
-
["1.3.6.1.2.1.1.0", "SNMPv2-MIB::system.0"],
|
84
|
-
["1.2.3.4", "1.2.3.4"],
|
85
|
-
["1.3", "SNMPv2-SMI::org"],
|
86
|
-
["1.2", "1.2"],
|
87
|
-
["1", "1"],
|
88
|
-
["", ""]]
|
89
|
-
cases.each do |oid, expected_name|
|
90
|
-
name = @mib.name(oid)
|
91
|
-
assert_equal(expected_name, name)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
# def test_import
|
96
|
-
# module_name = MIB.import_module('SNMPv2-MIB')
|
97
|
-
# assert_equal('SNMPv2-MIB', module_name)
|
98
|
-
# end
|
99
|
-
|
100
|
-
end
|
101
|
-
|
102
|
-
end
|