snmp 0.4.0 → 0.4.1

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/Rakefile CHANGED
@@ -9,7 +9,7 @@ Rake::TestTask.new do |test|
9
9
  end
10
10
 
11
11
  # package target
12
- PKG_VERSION = '0.4.0'
12
+ PKG_VERSION = '0.4.1'
13
13
  PKG_FILES = FileList[
14
14
  'Rakefile',
15
15
  'README',
data/examples/walk.rb CHANGED
@@ -2,8 +2,13 @@ require 'snmp'
2
2
 
3
3
  host = ARGV[0] || 'localhost'
4
4
 
5
+ SNMP::Manager.open(:Host => "localhost") do |manager|
6
+ manager.walk("ifTable") { |vb| puts vb }
7
+ end
8
+
9
+
5
10
  SNMP::Manager.open(:Host => host) do |manager|
6
- manager.walk(["ifIndex", "ifDescr"]) do |index, descr|
7
- puts "#{index.value} #{descr.value}"
11
+ manager.walk(["ifIndex", "ifDescr"]) do |ifIndex, ifDescr|
12
+ puts "#{ifIndex} #{ifDescr}"
8
13
  end
9
14
  end
data/lib/snmp/manager.rb CHANGED
@@ -101,7 +101,7 @@ end
101
101
  # current implementation of the importing code requires that the
102
102
  # external 'smidump' tool is available in your PATH. This tool can be
103
103
  # obtained from the libsmi website at
104
- # http://http://www.ibr.cs.tu-bs.de/projects/libsmi/ .
104
+ # http://www.ibr.cs.tu-bs.de/projects/libsmi/ .
105
105
  #
106
106
  # = Example
107
107
  #
@@ -246,8 +246,9 @@ class Manager
246
246
  # the response to the first OID in the list reaches the end of its
247
247
  # MIB subtree.
248
248
  #
249
- # The results of each get_next are yielded to the given block as
250
- # they are retrieved.
249
+ # The varbinds from each get_next are yielded to the given block as
250
+ # they are retrieved. The result is yielded as a VarBind when walking
251
+ # a single object or as a VarBindList when walking a list of objects.
251
252
  #
252
253
  # Normally this method is used for walking tables by providing an
253
254
  # ObjectId for each column of the table.
@@ -255,6 +256,10 @@ class Manager
255
256
  # For example:
256
257
  #
257
258
  # SNMP::Manager.open(:Host => "localhost") do |manager|
259
+ # manager.walk("ifTable") { |vb| puts vb }
260
+ # end
261
+ #
262
+ # SNMP::Manager.open(:Host => "localhost") do |manager|
258
263
  # manager.walk(["ifIndex", "ifDescr"]) do |index, descr|
259
264
  # puts "#{index.value} #{descr.value}"
260
265
  # end
@@ -264,12 +269,23 @@ class Manager
264
269
  raise ArgumentError, "expected a block to be given" unless block_given?
265
270
  varbind_list = @mib.varbind_list(object_list, :NullValue)
266
271
  start_oid = varbind_list.first.name
272
+ last_oid = start_oid
267
273
  loop do
268
274
  varbind_list = get_next(varbind_list).varbind_list
269
275
  first_vb = varbind_list.first
270
- break unless first_vb.name.subtree_of?(start_oid)
271
- break if first_vb.value == EndOfMibView
272
- yield varbind_list
276
+ stop_oid = first_vb.name
277
+ if stop_oid <= last_oid
278
+ warn "OIDs are not increasing, #{last_oid} followed by #{stop_oid}"
279
+ break
280
+ end
281
+ break unless stop_oid.subtree_of?(start_oid)
282
+ break if stop_oid == EndOfMibView
283
+ last_oid = stop_oid
284
+ if varbind_list.length == 1
285
+ yield first_vb
286
+ else
287
+ yield varbind_list
288
+ end
273
289
  end
274
290
  end
275
291
 
data/lib/snmp/varbind.rb CHANGED
@@ -132,7 +132,7 @@ class ObjectId < Array
132
132
  # Create an object id. The input is expected to be either a string
133
133
  # in the format "n.n.n.n.n.n" or an array of integers.
134
134
  #
135
- def initialize(id)
135
+ def initialize(id=[])
136
136
  if id.respond_to? :to_str
137
137
  super(make_integers(id.to_str.split(".")))
138
138
  else
data/test/test_manager.rb CHANGED
@@ -13,7 +13,7 @@ class EchoTransport
13
13
  end
14
14
 
15
15
  def recv(max_bytes)
16
- @data[0,max_bytes]
16
+ Message.decode(@data).response.encode[0,max_bytes]
17
17
  end
18
18
  end
19
19
 
@@ -81,14 +81,22 @@ class TestManager < Test::Unit::TestCase
81
81
  end
82
82
 
83
83
  def test_get_bulk
84
- response = @manager.get_bulk(1, 2, ["1.3.6.1.3.1.1.1.0", "1.3.6.1.3.1.1.2.0"])
85
- assert(1, response.error_status)
86
- assert(2, response.error_index)
87
- assert(2, response.varbind_list.length)
84
+ response = @manager.get_bulk(1, 3, ["1.3.6.1.3.1.1.1.0", "1.3.6.1.3.1.1.2.0"])
85
+ assert_equal(:tooBig, response.error_status)
86
+ assert_equal(3, response.error_index)
87
+ assert_equal(2, response.varbind_list.length)
88
88
  assert_equal("1.3.6.1.3.1.1.1.0", response.varbind_list[0].name.to_s)
89
89
  assert_equal("1.3.6.1.3.1.1.2.0", response.varbind_list[1].name.to_s)
90
90
  end
91
91
 
92
+ def test_walk
93
+ old_verbose = $VERBOSE
94
+ $VERBOSE = nil
95
+ @manager.walk("ifTable") { fail "Expected break from OID not increasing" }
96
+ ensure
97
+ $VERBOSE = old_verbose
98
+ end
99
+
92
100
  def test_request_id
93
101
  srand(100)
94
102
  id = RequestId.new
data/test/test_varbind.rb CHANGED
@@ -109,6 +109,8 @@ class TestVarBind < Test::Unit::TestCase
109
109
  assert_raise(ArgumentError) {
110
110
  ObjectId.new("xyzzy")
111
111
  }
112
+
113
+ assert_equal("", ObjectId.new.to_s)
112
114
  end
113
115
 
114
116
  def test_object_id_create
data/test/test_walk.rb ADDED
@@ -0,0 +1,84 @@
1
+ require 'snmp'
2
+ require 'test/unit'
3
+
4
+ include SNMP
5
+
6
+ class GetNextTransport
7
+
8
+ attr_accessor :count
9
+
10
+ def initialize(host, port)
11
+ end
12
+
13
+ def close
14
+ end
15
+
16
+ def send(data)
17
+ @data = data
18
+ end
19
+
20
+ def recv(max_bytes)
21
+ response = Message.decode(@data).response
22
+ if $transport_pdu_count > 0
23
+ response.pdu.each_varbind do |vb|
24
+ vb.name << 1
25
+ end
26
+ $transport_pdu_count -= 1
27
+ else
28
+ response.pdu.each_varbind do |vb|
29
+ vb.name = ObjectId.new("1.3.6.9999")
30
+ end
31
+ end
32
+ response.encode[0,max_bytes]
33
+ end
34
+ end
35
+
36
+
37
+ class TestWalk < Test::Unit::TestCase
38
+
39
+ def test_single_object
40
+ $transport_pdu_count = 3
41
+ list = []
42
+ manager.walk("ifTable") do |vb|
43
+ list << vb
44
+ end
45
+ assert_equal(3, list.length)
46
+ end
47
+
48
+ def test_object_list
49
+ $transport_pdu_count = 3
50
+ list1 = []
51
+ list2 = []
52
+ manager.walk(["ifIndex", "ifDescr"]) do |vb1, vb2|
53
+ list1 << vb1
54
+ list2 << vb2
55
+ end
56
+ assert_equal(3, list1.length)
57
+ assert_equal(3, list2.length)
58
+ end
59
+
60
+ def test_empty
61
+ $transport_pdu_count = 0
62
+ manager.walk("1.2.3.4") do |vb|
63
+ fail { "Expected block to not be executed"}
64
+ end
65
+ end
66
+
67
+ def test_one
68
+ $transport_pdu_count = 1
69
+ list = []
70
+ manager.walk(["1.3.6.1", "1.3.6.2"]) do |vb|
71
+ assert_equal("1.3.6.1.1", vb[0].name.to_s)
72
+ assert_equal("1.3.6.2.1", vb[1].name.to_s)
73
+ list << vb
74
+ end
75
+ assert_equal(1, list.length)
76
+ end
77
+
78
+ private
79
+
80
+ def manager
81
+ Manager.new(:Transport => GetNextTransport)
82
+ end
83
+
84
+ end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.3
3
3
  specification_version: 1
4
4
  name: snmp
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.4.0
7
- date: 2004-12-19
6
+ version: 0.4.1
7
+ date: 2004-12-20
8
8
  summary: A Ruby implementation of SNMP (the Simple Network Management Protocol).
9
9
  require_paths:
10
10
  - lib
@@ -42,6 +42,7 @@ files:
42
42
  - test/test_mib.rb
43
43
  - test/test_pdu.rb
44
44
  - test/test_varbind.rb
45
+ - test/test_walk.rb
45
46
  - examples/dump.rb
46
47
  - examples/get.rb
47
48
  - examples/iftable.rb