snmputils 0.0.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/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ *.gem
2
+ *.rbc
3
+ *.sw[a-p]
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
19
+ measurement/
20
+ html/
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ snmp-utils
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 1.9.3
data/.travis.yml ADDED
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 1.9.3
5
+
6
+ notifications:
7
+ email:
8
+ - teodoro.cook.builds@gmail.com
9
+
10
+ before_install:
11
+ - sudo apt-get install snmpd
12
+
13
+ services:
14
+ - snmpd
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in snmp-utils.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Ted Cook
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,58 @@
1
+ = snmputils
2
+
3
+ {<img src="https://travis-ci.org/teddyphreak/ruby-snmputils.png">}[https://travis-ci.org/teddyphreak/ruby-snmputils]
4
+ {<img src="https://codeclimate.com/github/teddyphreak/ruby-snmputils.png">}[https://codeclimate.com/github/teddyphreak/ruby-snmputils]
5
+ {<img src="https://gemnasium.com/teddyphreak/ruby-snmputils.png">}[https://gemnasium.com/teddyphreak/ruby-snmputils]
6
+
7
+ Functional wrappers for Dave Halliday's ruby-snmp[https://github.com/hallidave/ruby-snmp]
8
+
9
+ == Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ gem 'snmputils'
14
+
15
+ And then execute:
16
+
17
+ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ gem install snmputils
22
+
23
+ == Usage
24
+
25
+ require snmputils
26
+
27
+ SNMPUtils.get({:host => 'localhost'}, 'SNMPv2-MIB::sysName.0')
28
+ # => {"SNMPv2-MIB::sysName.0"=>"localhost", "1.3.6.1.2.1.1.5.0"=>"localhost"}
29
+
30
+ SNMPUtils.walk({:host => 'localhost'}, ['SNMPv2-MIB::sysORDescr', 'SNMPv2-MIB::sysORID'])
31
+ # => [
32
+ # {
33
+ # "SNMPv2-MIB::sysORDescr"=>"The SNMP Management Architecture MIB.",
34
+ # "1.3.6.1.2.1.1.9.1.3"=>"The SNMP Management Architecture MIB.",
35
+ # "SNMPv2-MIB::sysORID"=>"SNMPv2-SMI::snmpModules.10.3.1.1",
36
+ # "1.3.6.1.2.1.1.9.1.2"=>"SNMPv2-SMI::snmpModules.10.3.1.1"
37
+ # },
38
+ # ...,
39
+ # {
40
+ # "SNMPv2-MIB::sysORDescr"=>"View-based Access Control Model for SNMP.",
41
+ # "1.3.6.1.2.1.1.9.1.3"=>"View-based Access Control Model for SNMP.",
42
+ # "SNMPv2-MIB::sysORID"=>"SNMPv2-SMI::snmpModules.16.2.2.1",
43
+ # "1.3.6.1.2.1.1.9.1.2"=>"SNMPv2-SMI::snmpModules.16.2.2.1"
44
+ # }
45
+ # ]
46
+
47
+ == Contributing
48
+
49
+ 1. Fork it
50
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
51
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
52
+ 4. Push to the branch (`git push origin my-new-feature`)
53
+ 5. Create new Pull Request
54
+
55
+ == License
56
+
57
+ {MIT License}[http://opensource.org/licenses/MIT]
58
+
data/Rakefile ADDED
@@ -0,0 +1,35 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
7
+
8
+ ###
9
+ # RDoc (http://rdoc.rubyforge.org/) tasks
10
+ require 'rdoc/task'
11
+ Rake::RDocTask.new(:rdoc_generate) do |rdoc|
12
+ rdoc.main = "README.rdoc"
13
+ rdoc.rdoc_files.include("README.rdoc", "lib/**/*.rb", "bin/**/*")
14
+ rdoc.title = "snmputils - A functional wrapper to snmp"
15
+ end
16
+
17
+ task :rdoc => :rdoc_generate
18
+
19
+ ###
20
+ # Yardstick (https://github.com/dkubb/yardstick) tasks
21
+ require 'yardstick/rake/measurement'
22
+ require 'yardstick/rake/verify'
23
+
24
+ # Yardstick (https://github.com/dkubb/yardstick) measure coverage
25
+ Yardstick::Rake::Measurement.new(:yardstick_measure) do |measurement|
26
+ measurement.output = 'measurement/report.txt'
27
+ end
28
+
29
+ # Yardstick (https://github.com/dkubb/yardstick) verify coverage
30
+ Yardstick::Rake::Verify.new(:yardstick_verify) do |verify|
31
+ verify.threshold = 80
32
+ end
33
+
34
+ task :coverage_measure => :yardstick_measure
35
+ task :coverage_verify => :yardstick_verify
@@ -0,0 +1,53 @@
1
+ module ArrayUtils
2
+
3
+ class ::Array
4
+
5
+ public
6
+ # Convenience method to return the second element in the list
7
+ #
8
+ # @api public
9
+ # @return [Object] The second object in the array
10
+ # @example ['a', 'b', 'c'].second # => 'b'
11
+ def second
12
+ return at(1)
13
+ end
14
+
15
+ # Calculate the longest common prefix for all elements in the array.
16
+ #
17
+ # Requires array elements to support size and take operations
18
+ #
19
+ # @api public
20
+ # @return [Object] The largest common prefix for all elements in the array
21
+ # @example [['a', 'b'], ['a', 'b', 'c', 'd'], ['a', 'b', 'e', 'f']].prefix # => ['a', 'b']
22
+ def prefix
23
+ pairwise_prefix = lambda do |short, long|
24
+ if short.size == 0 or long .size == 0
25
+ short.class.new
26
+ else
27
+ if short.size > long.size
28
+ pairwise_prefix.call(long, short)
29
+ elsif short == long.take(short.size)
30
+ short
31
+ else
32
+ pairwise_prefix.call(short.take(short.size - 1), long)
33
+ end
34
+ end
35
+ end
36
+ reduce &pairwise_prefix
37
+ end
38
+
39
+ # Calculate the longest common suffix for all elements in the array.
40
+ #
41
+ # Requires array elements to support size and take operations
42
+ #
43
+ # @api public
44
+ # @return [Object] The largest common suffix for all elements in the array
45
+ # @example [['y', 'z'], ['w', 'x', 'y', 'z'], ['u', 'v', 'y', 'z']].suffix # => ['y', 'z']
46
+ def suffix
47
+ prefix = (map { |x| x != nil && x.reverse }).prefix
48
+ prefix.reverse if prefix
49
+ end
50
+
51
+ end
52
+
53
+ end
@@ -0,0 +1,18 @@
1
+ module StringUtils
2
+
3
+ class ::String
4
+
5
+ public
6
+ # Return the first N characters in the string
7
+ #
8
+ # @api public
9
+ # @param n [Integer] the number of characters to retrieve from the string
10
+ # @return [String] the first N characters in the string
11
+ # @example "example".take(2) # => "ex"
12
+ def take(n=1)
13
+ chars.to_a.take(n).join('')
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,5 @@
1
+ module Snmp
2
+ module Utils
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
data/lib/snmputils.rb ADDED
@@ -0,0 +1,128 @@
1
+ require 'snmputils/version'
2
+ require 'snmp'
3
+ require 'snmp/mib'
4
+ require 'snmputils/stringutils'
5
+ require 'snmputils/arrayutils'
6
+
7
+ # @author Ted Cok
8
+ module SNMPUtils
9
+
10
+ private
11
+ # Return the dot notation string representation of a SNMP::VarBind's OID
12
+ #
13
+ # @api private
14
+ # @param x [SNMP::VarBind] the input VarBind value
15
+ # @return [String] the dot notation string representation of the VarBind's OID
16
+ def self.oid(x) x.oid.to_s end
17
+
18
+ # Return the symbolic string representation of a SNMP::VarBind's OID
19
+ #
20
+ # @api private
21
+ # @param x [SNMP::VarBind] the input VarBind value
22
+ # @return [String] the symbolic string representation of the VarBind's OID
23
+ def self.name(x) x.oid.to_str end
24
+
25
+ # Return the string representation of a SNMP::VarBind's value
26
+ #
27
+ # @api private
28
+ # @param x [SNMP::VarBind] the input VarBind value
29
+ # @return [String] the string representation of the VarBind's value
30
+ def self.value(x) x.value.to_s unless ['noSuchInstance', 'noSuchObject'].include? x.value.to_s end
31
+
32
+ # Return a Hash representation of a SNMP::VarBind's value indexed by dotted OID
33
+ #
34
+ # @api private
35
+ # @param x [SNMP::VarBind] the input VarBind value
36
+ # @return [String] the Hash representation of the VarBind as !{ oid(x) => value(x) }
37
+ # @see #oid
38
+ # @see #value
39
+ def self.oid_keyval(x)
40
+ value(x) && { oid(x) => value(x) } or {}
41
+ end
42
+
43
+ # Return a Hash representation of a SNMP::VarBind's value indexed by symbolic OID
44
+ #
45
+ # @api private
46
+ # @param x [SNMP::VarBind] the input VarBind value
47
+ # @return [String] the Hash representation of the VarBind as !{ name(x) => value(x) }
48
+ # @see #name
49
+ # @see #value
50
+ def self.name_keyval(x)
51
+ value(x) && ( name(x) != oid(x) ) && { name(x) => value(x) } or {}
52
+ end
53
+
54
+ # SNMP get. Return an Enumerator of the SNMP::VarBind at each input oids
55
+ #
56
+ # @api private
57
+ # @param opts [Hash] the snmp connection options. Check {http://snmplib.rubyforge.org/doc/SNMP/Manager.html snmplib} for default values
58
+ # @param oids [Array] a list of oids containing the interesting values to retrieve
59
+ # @return [Enumerator] an {http://www.ruby-doc.org/core-2.0/Enumerator.html Enumerator} of {http://snmplib.rubyforge.org/doc/SNMP/VarBind.html SNMP::VarBind} values
60
+ def self.snmpget(opts, oids)
61
+ return Enumerator.new do |yielder|
62
+ SNMP::Manager.open(opts) do |manager|
63
+ begin
64
+ response = manager.get([oids].flatten)
65
+ response.each_varbind do |v|
66
+ yielder.yield v
67
+ end
68
+ rescue ArgumentError
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ # SNMP walk. Return an Enumerator of each SNMP::VarBindList at the input oids
75
+ #
76
+ # @api private
77
+ # @param opts [Hash] the snmp connection options. Check {http://snmplib.rubyforge.org/doc/SNMP/Manager.html snmplib} for default values
78
+ # @param oids [Array] a list of oids containing the interesting columns to scan/retrieve from a snmp table
79
+ # @return [Enumerator] an {http://www.ruby-doc.org/core-2.0/Enumerator.html Enumerator} of {http://snmplib.rubyforge.org/doc/SNMP/VarBindList.html SNMP::VarBindList} values
80
+ def self.snmpwalk(opts, oids)
81
+ return Enumerator.new do |yielder|
82
+ SNMP::Manager.open(opts) do |manager|
83
+ begin
84
+ manager.walk([oids].flatten) do |row|
85
+ yielder.yield row
86
+ end
87
+ rescue ArgumentError
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ public
94
+
95
+ # SNMP get. Return a Hash representation of the values at the input oids
96
+ #
97
+ # @api public
98
+ # @param opts [Hash] the snmp connection options. Check {http://snmplib.rubyforge.org/doc/SNMP/Manager.html snmplib} for default values
99
+ # @param oids [Array] a list of oids containing the interesting values to retrieve
100
+ # @return [Hash] a Hash representation of the values at the requested oids as !{ name(oids[0]) => value(oids[0]), oid(oids[0]) => value(oids[0]) } for each value in the input array oids
101
+ # @example snmpvalue = SNMPUtils.get({:host => 'localhost'}, 'SNMPv2-MIB::sysName.0') # => {"SNMPv2-MIB::sysName.0"=>"medusa", "1.3.6.1.2.1.1.5.0"=>"medusa"}
102
+ def self.get(opts, oids)
103
+ return snmpget(opts,oids).inject({}) do |row, value|
104
+ row.merge(oid_keyval(value)).merge(name_keyval(value))
105
+ end
106
+ end
107
+
108
+ # SNMP walk. Return a List[Hash] representation of the values at the input oids
109
+ #
110
+ # @api public
111
+ # @param opts [Hash] the snmp connection options. Check {http://snmplib.rubyforge.org/doc/SNMP/Manager.html snmplib} for default values
112
+ # @param oids [Array] a list of oids containing the interesting snmp columns to retrieve
113
+ # @return [List] a List of Hashes describing each row in the table as
114
+ # @example snmpvalues = SNMPUtils.walk({:host => 'localhost'}, ['SNMPv2-MIB::sysORDescr', 'SNMPv2-MIB::sysORID']) # =>
115
+ def self.walk(opts, oids)
116
+ return snmpwalk(opts, oids).inject([]) do |table, row|
117
+ rawoids = row.inject({}) do |row_n, value|
118
+ row_n.merge(oid_keyval(value)).merge(name_keyval(value))
119
+ end
120
+ suffix = rawoids.keys.suffix
121
+ table << rawoids.inject({}) do |row_n, kvpair|
122
+ key, value = kvpair
123
+ row_n.merge(key.sub(/#{suffix}$/, '') => value)
124
+ end
125
+ end
126
+ end
127
+
128
+ end
data/snmputils.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'snmputils/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "snmputils"
8
+ spec.version = Snmp::Utils::VERSION
9
+ spec.authors = ["Ted Cook"]
10
+ spec.email = ["teodoro.cook@gmail.com"]
11
+ spec.description = "SNMP low level routines"
12
+ spec.summary = "SNMP low level routines"
13
+ spec.homepage = "https://github.com/teddyphreak/ruby-snmputils.git"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake", "~> 10.1"
23
+ spec.add_development_dependency "rspec", "~> 2.13"
24
+ spec.add_development_dependency "yard", "~> 0.8"
25
+ spec.add_development_dependency "yardstick", "~> 0.9"
26
+ spec.add_development_dependency "travis-lint", "~> 1.7"
27
+ spec.add_dependency "snmp", "~> 1.1"
28
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ describe Array do
4
+
5
+ describe '#suffix' do
6
+
7
+ it "should return the input for scalar arrays" do
8
+ ['single'].suffix.should eql 'single'
9
+ [''].suffix.should eql ''
10
+ [].suffix.should eql nil
11
+ end
12
+
13
+ it "should return the input for list input with a single repeated value" do
14
+ (['two'] * 2).suffix.should eql 'two'
15
+ (['three'] * 3).suffix.should eql 'three'
16
+ (['twenty'] * 20).suffix.should eql 'twenty'
17
+ (['two'.chars.to_a] * 2).suffix.should eql 'two'.chars.to_a
18
+ (['three'.chars.to_a] * 3).suffix.should eql 'three'.chars.to_a
19
+ (['twenty'.chars.to_a] * 20).suffix.should eql 'twenty'.chars.to_a
20
+ end
21
+
22
+ it "should return the largest suffix for a list of length 2" do
23
+ ['two thousand one', 'four million'].suffix.should eql ''
24
+ ['two thousand one.1', 'two, million.1'].suffix.should eql '.1'
25
+ ['three thousand', 'threethousand'].suffix.should eql 'thousand'
26
+ (['two thousand one.1', 'two, million.1'].map { |x| x.chars.to_a }).suffix.should eql '.1'.chars.to_a
27
+ (['three thousand', 'threethousand'].map { |x| x.chars.to_a }).suffix.should eql 'thousand'.chars.to_a
28
+ end
29
+
30
+ it "should return the largest suffix for a list of length N" do
31
+ (['', 'prove', 'provoke'].map { |x| x.reverse } * 2).suffix.should eql ''.reverse
32
+ (['proud', 'prove', 'provoke'].map { |x| x.reverse } * 6).suffix.should eql 'pro'.reverse
33
+ (['', 'prank', 'primary', 'probability'].map { |x| x.reverse } * 12).suffix.should eql ''.reverse
34
+ (['prune', 'prank', 'primary', 'probability'].map { |x| x.reverse } * 24).suffix.should eql 'pr'.reverse
35
+ end
36
+
37
+ end
38
+
39
+ describe '#prefix' do
40
+
41
+ it "should return the input for scalar arrays" do
42
+ ['single'].prefix.should eql 'single'
43
+ [''].prefix.should eql ''
44
+ [].prefix.should eql nil
45
+ end
46
+
47
+ it "should return the input for list input with a single repeated value" do
48
+ (['two'] * 2).prefix.should eql 'two'
49
+ (['three'] * 3).prefix.should eql 'three'
50
+ (['twenty'] * 20).prefix.should eql 'twenty'
51
+ (['two'.chars.to_a] * 2).prefix.should eql 'two'.chars.to_a
52
+ (['three'.chars.to_a] * 3).prefix.should eql 'three'.chars.to_a
53
+ (['twenty'.chars.to_a] * 20).prefix.should eql 'twenty'.chars.to_a
54
+ end
55
+
56
+ it "should return the largest prefix for a list of length 2" do
57
+ ['two thousand', 'four million'].prefix.should eql ''
58
+ ['two thousand', 'two, million'].prefix.should eql 'two'
59
+ ['three thousand', 'threepence'].prefix.should eql 'three'
60
+ (['three thousand', 'threepence'].map { |x| x.chars.to_a }).prefix.should eql 'three'.chars.to_a
61
+ (['two thousand', 'two, million'].map { |x| x.chars.to_a }).prefix.should eql 'two'.chars.to_a
62
+ end
63
+
64
+ it "should return the largest prefix for a list of length N" do
65
+ (['', 'prove', 'provoke'] * 2).prefix.should eql ''
66
+ (['proud', 'prove', 'provoke'] * 6).prefix.should eql 'pro'
67
+ (['', 'prank', 'primary', 'probability'] * 12).prefix.should eql ''
68
+ (['prune', 'prank', 'primary', 'probability'] * 24).prefix.should eql 'pr'
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe String do
4
+
5
+ describe '#take' do
6
+
7
+ it "should return nil for an empty string" do
8
+ ''.take.should eql ''
9
+ end
10
+
11
+ it "should return the first character of the string with no input" do
12
+ 'victor'.take.should eql 'v'
13
+ 'tango uniform'.take.should eql 't'
14
+ end
15
+
16
+ it "should return the first N characters of the string with input N" do
17
+ 'alpha'.take(1).should eql 'a'
18
+ 'hotel'.take(2).should eql 'ho'
19
+ 'india juliet kilo mike'.take('india '.size). should eql 'india '
20
+ end
21
+
22
+ end
23
+
24
+ describe '#to_a' do
25
+
26
+ it "should return an empty array for an empty string" do
27
+ ''.take.should be_empty
28
+ end
29
+
30
+ it "should return an array of the first character of the string with no input" do
31
+ 'foxtrot'.take.should eql 'f'
32
+ 'quebec romeo'.take.should eql 'q'
33
+ end
34
+
35
+ it "should return an array of the first N characters of the string with input N" do
36
+ 'bravo'.take(1).should eql 'b'
37
+ 'delta'.take(2).should eql 'de'
38
+ 'november oscar papa quebec romeo sierra'.take('november oscar'.size). should eql 'november oscar'
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe SNMPUtils do
4
+
5
+ describe '#get' do
6
+
7
+ it "should return an empty SNMP response for an invalid scalar request" do
8
+ SNMPUtils.get({:host => 'localhost'}, 'invalid').should be_empty
9
+ SNMPUtils.get({:host => 'localhost'}, []).should be_empty
10
+ end
11
+
12
+ it "should return an empty SNMP response for a mixed valid/invalid list request" do
13
+ SNMPUtils.get({:host => 'localhost'}, ['SNMPv2-MIB::sysName.0', 'invalid']).should be_empty
14
+ SNMPUtils.get({:host => 'localhost'}, ['invalid', 'SNMPv2-MIB::sysContact.0']).should be_empty
15
+ end
16
+
17
+ it "should return a hash SNMP response for a valid scalar request" do
18
+ SNMPUtils.get({:host => 'localhost'}, 'SNMPv2-MIB::sysName.0').should_not be_empty
19
+ SNMPUtils.get({:host => 'localhost'}, 'SNMPv2-MIB::sysName.0').should include('SNMPv2-MIB::sysName.0')
20
+ SNMPUtils.get({:host => 'localhost'}, 'SNMPv2-MIB::sysName.0')['SNMPv2-MIB::sysName.0'].should eql Socket.gethostname
21
+ SNMPUtils.get({:host => 'localhost'}, '1.3.6.1.2.1.1.5.0').should_not be_empty
22
+ SNMPUtils.get({:host => 'localhost'}, '1.3.6.1.2.1.1.5.0').should include('1.3.6.1.2.1.1.5.0')
23
+ SNMPUtils.get({:host => 'localhost'}, '1.3.6.1.2.1.1.5.0')['1.3.6.1.2.1.1.5.0'].should eql Socket.gethostname
24
+ end
25
+
26
+ it "should return a hash SNMP response for a valid list request" do
27
+ SNMPUtils.get({:host => 'localhost'}, ['SNMPv2-MIB::sysName.0', 'SNMPv2-MIB::sysContact.0']).should include('SNMPv2-MIB::sysName.0')
28
+ SNMPUtils.get({:host => 'localhost'}, ['SNMPv2-MIB::sysName.0', 'SNMPv2-MIB::sysContact.0']).should include('SNMPv2-MIB::sysContact.0')
29
+ end
30
+
31
+ end
32
+
33
+ describe '#walk' do
34
+ it "should return an empty SNMP response for an invalid scalar request" do
35
+ SNMPUtils.walk({:host => 'localhost'}, 'invalid').should be_empty
36
+ SNMPUtils.walk({:host => 'localhost'}, []).should be_empty
37
+ end
38
+
39
+ it "should return an empty SNMP response for a mixed valid/invalid list request" do
40
+ SNMPUtils.walk({:host => 'localhost'}, ['SNMPv2-MIB::sysName.0', 'invalid']).should be_empty
41
+ SNMPUtils.walk({:host => 'localhost'}, ['invalid', 'SNMPv2-MIB::sysContact.0']).should be_empty
42
+ end
43
+
44
+ it "should return a hash list SNMP response for a valid requests" do
45
+ SNMPUtils.walk({:host => 'localhost'}, ['SNMPv2-MIB::sysORDescr', 'SNMPv2-MIB::sysORID']).should_not be_empty
46
+ SNMPUtils.walk({:host => 'localhost'}, ['SNMPv2-MIB::sysORDescr', 'SNMPv2-MIB::sysORID']).each do |x|
47
+ x.should include('SNMPv2-MIB::sysORDescr')
48
+ x.should include('SNMPv2-MIB::sysORID')
49
+ end
50
+ end
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1,13 @@
1
+ unless Kernel.respond_to?(:require_relative)
2
+ module Kernel
3
+ def require_relative(path)
4
+ require File.join(File.dirname(caller[0]), path.to_str)
5
+ end
6
+ end
7
+ end
8
+
9
+ require_relative'../lib/snmputils'
10
+ require_relative'../lib/snmputils/arrayutils'
11
+ require_relative'../lib/snmputils/stringutils'
12
+
13
+ require 'yaml'
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: snmputils
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ted Cook
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '10.1'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '10.1'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '2.13'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '2.13'
62
+ - !ruby/object:Gem::Dependency
63
+ name: yard
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '0.8'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '0.8'
78
+ - !ruby/object:Gem::Dependency
79
+ name: yardstick
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '0.9'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '0.9'
94
+ - !ruby/object:Gem::Dependency
95
+ name: travis-lint
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: '1.7'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '1.7'
110
+ - !ruby/object:Gem::Dependency
111
+ name: snmp
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: '1.1'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: '1.1'
126
+ description: SNMP low level routines
127
+ email:
128
+ - teodoro.cook@gmail.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - .gitignore
134
+ - .rspec
135
+ - .ruby-gemset
136
+ - .ruby-version
137
+ - .travis.yml
138
+ - Gemfile
139
+ - LICENSE.txt
140
+ - README.rdoc
141
+ - Rakefile
142
+ - lib/snmputils.rb
143
+ - lib/snmputils/arrayutils.rb
144
+ - lib/snmputils/stringutils.rb
145
+ - lib/snmputils/version.rb
146
+ - snmputils.gemspec
147
+ - spec/snmputils/arrayutils_spec.rb
148
+ - spec/snmputils/stringutils_spec.rb
149
+ - spec/snmputils_spec.rb
150
+ - spec/spec_helper.rb
151
+ homepage: https://github.com/teddyphreak/ruby-snmputils.git
152
+ licenses:
153
+ - MIT
154
+ post_install_message:
155
+ rdoc_options: []
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ! '>='
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ! '>='
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ requirements: []
171
+ rubyforge_project:
172
+ rubygems_version: 1.8.25
173
+ signing_key:
174
+ specification_version: 3
175
+ summary: SNMP low level routines
176
+ test_files:
177
+ - spec/snmputils/arrayutils_spec.rb
178
+ - spec/snmputils/stringutils_spec.rb
179
+ - spec/snmputils_spec.rb
180
+ - spec/spec_helper.rb
181
+ has_rdoc: