snmpjr 0.1.0-java → 0.1.2-java

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NDA5MDUxNDEyZmM2NjFiMzEyZDQzMjliMjY5YTlkOTlmNzBiZTAzZg==
4
+ NDg0ZjZmMzlhOTM4ZjA5Zjk3NzVhOTljN2U3MTI1M2RkZTBkYjNjMg==
5
5
  data.tar.gz: !binary |-
6
- NTQ4ZmE0YjZhYjllOTE4YmMzYjk1YjEwZGUwZTkxNzFjN2VjNjM5YQ==
6
+ NzhkMWE4OTk2Nzk5MDg3YWJiOTk2ZDY2OTUzMTgwYzVlOWVhYjNjMQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MmQyYzA2NThlNWJkMGYyNDFkZTgzZWQ4ODJiZDI5MjZmYzFiODk0MmMxNDBi
10
- ZWU1YWY2ZGU4NGUxZmMxMWM3MjEyNGE0ZGY2ODI1OTc5OWQ2NjJhZWJmYzEx
11
- OGNhYWVmNTQ2MzFjY2IwNGFkNDRmNjk1ZThlNjYzMDNiMjM4M2M=
9
+ MmQ2ZGJmMzVlODRhNTJkZmIwN2VkMGIwYjA5MGE3Mzc0Nzc2OWRiOGVmOWYx
10
+ OTYwNjU4ZmMwMjE1YzJkYjQzNWRkMjU5ZTljNTc1ODNkYTkzOTA3YTBmOTA3
11
+ OTIyZDEzYTNkYTJmM2UwZTdlOTNmZWYxMTRhZDViZmE5NDUwZTc=
12
12
  data.tar.gz: !binary |-
13
- ZWNjYTE1N2Y1MGVhM2FmOWIwZmQ2ZmI5NzA3ZWIxNzZjNDU3ZjVkN2ZjMTFk
14
- MTg4ZjliMmVlOWEwNjY3OTE4NDdjOWViYTAyMzQxNGMwMWVkMjEwODA2ODIy
15
- NzA2ZWNiNDI5NWE1MzE3YTI2NTFkYWQ1ODAyNTcyZGU1NWI5NGE=
13
+ Mjk1Y2VlZjg4NWZmNWFmZDM4MGNkZWY2NDNkZGQ0OWM4MjEwYjdjMzQ3YTY4
14
+ YjJlNjE4NzA5ZjQyYmJlNjRhNzQxMmFmYmMxY2YxMDFmMjA3MmI1NmE2NDAx
15
+ MzY4MTg0NGNjY2QwMDA1NzM1MWQyOTlkZTYwYjM0OTI3MDQ3MTg=
data/history.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.1.2 (13 October 2014)
2
+
3
+ * Refactor the wiring
4
+
1
5
  == 0.1.1 (12 October 2014)
2
6
 
3
7
  * Fix travis auto deployment
@@ -0,0 +1,36 @@
1
+ require "snmpjr/pdu"
2
+ require "snmpjr/session"
3
+
4
+ class Snmpjr
5
+ class Getter
6
+
7
+ def initialize target
8
+ @target = target
9
+ @session = Snmpjr::Session.new
10
+ end
11
+
12
+ def get_multiple oids
13
+ @session.start
14
+ result = oids.map {|oid|
15
+ send_oid oid
16
+ }
17
+ @session.close
18
+ result
19
+ end
20
+
21
+ def get oid
22
+ @session.start
23
+ result = send_oid oid
24
+ @session.close
25
+ result
26
+ end
27
+
28
+ private
29
+
30
+ def send_oid oid
31
+ pdu = Snmpjr::Pdu.new.create oid
32
+ @session.send(pdu, @target)
33
+ end
34
+
35
+ end
36
+ end
@@ -3,20 +3,29 @@ require 'snmpjr/wrappers/transport'
3
3
  class Snmpjr
4
4
  class Session
5
5
 
6
+ def initialize
7
+ @snmp = Snmpjr::Wrappers::Snmp.new(Snmpjr::Wrappers::Transport::DefaultUdpTransportMapping.new)
8
+ end
6
9
 
7
- def send pdu, target
8
- snmp = Snmpjr::Wrappers::Snmp.new(Snmpjr::Wrappers::Transport::DefaultUdpTransportMapping.new)
9
- snmp.listen
10
+ def start
11
+ @snmp.listen
12
+ end
10
13
 
14
+ def send pdu, target
11
15
  begin
12
- result = snmp.send(pdu, target)
13
- rescue
14
- raise "Failed to send SNMP package"
15
- ensure
16
- snmp.close
16
+ result = @snmp.send(pdu, target)
17
+ if result.response.nil?
18
+ "Request timed out"
19
+ else
20
+ result.response.variable_bindings.first.variable.to_s
21
+ end
22
+ rescue Exception => e
23
+ "Error: #{e.to_s}"
17
24
  end
25
+ end
18
26
 
19
- result.response.variable_bindings.first.variable.to_s
27
+ def close
28
+ @snmp.close
20
29
  end
21
30
  end
22
31
  end
@@ -1,3 +1,3 @@
1
1
  class Snmpjr
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/snmpjr.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require "snmpjr/version"
2
- require "snmpjr/pdu"
3
- require "snmpjr/session"
2
+ require "snmpjr/getter"
4
3
  require "snmpjr/target"
5
4
 
6
5
  class Snmpjr
@@ -13,24 +12,16 @@ class Snmpjr
13
12
 
14
13
  def get oids
15
14
  target = Snmpjr::Target.new.create(:host => @host, :port => @port, :community => @community)
15
+ getter = Snmpjr::Getter.new(target)
16
16
 
17
17
  case oids.class.to_s
18
18
  when 'String'
19
- get_oid(oids, target)
19
+ getter.get oids
20
20
  when 'Array'
21
- oids.map{|oid|
22
- get_oid(oid, target)
23
- }
21
+ getter.get_multiple oids
24
22
  else
25
23
  raise ArgumentError.new 'You can request a single Oid using a String, or multiple using an Array'
26
24
  end
27
25
  end
28
26
 
29
- private
30
-
31
- def get_oid oid, target
32
- pdu = Snmpjr::Pdu.new.create oid
33
- Snmpjr::Session.new.send(pdu, target)
34
- end
35
-
36
27
  end
@@ -2,15 +2,36 @@ require 'snmpjr'
2
2
 
3
3
  describe "snmpjr" do
4
4
 
5
- subject { Snmpjr.new(:host => 'demo.snmplabs.com', :port => 161, :community => 'public') }
6
5
  describe 'GET' do
7
- it "can perform a simple synchronous get request on an snmp agent" do
8
- expect(subject.get '1.3.6.1.2.1.1.1.0').to eq 'SunOS zeus.snmplabs.com 4.1.3_U1 1 sun4m'
6
+ context 'when the host is reachable' do
7
+ subject { Snmpjr.new(:host => 'demo.snmplabs.com', :port => 161, :community => 'public') }
8
+
9
+ it "can perform a simple synchronous get request on an snmp agent" do
10
+ expect(subject.get '1.3.6.1.2.1.1.1.0').to eq 'SunOS zeus.snmplabs.com 4.1.3_U1 1 sun4m'
11
+ end
12
+
13
+ let(:expected) { ['SunOS zeus.snmplabs.com 4.1.3_U1 1 sun4m', 'zeus.snmplabs.com'] }
14
+ it "can perform a series of gets if passed an array of oids" do
15
+ expect(subject.get ['1.3.6.1.2.1.1.1.0', '1.3.6.1.2.1.1.5.0']).to eq expected
16
+ end
17
+
18
+ context "when an invalid oid is requested" do
19
+
20
+ let(:expected) { ['Error: Invalid first sub-identifier (must be 0, 1, or 2)', 'zeus.snmplabs.com'] }
21
+ it "returns an error" do
22
+ expect(subject.get ['6.5.4.3.2.1', '1.3.6.1.2.1.1.5.0']).to eq expected
23
+
24
+ end
25
+ end
9
26
  end
10
27
 
11
- let(:expected) { ['SunOS zeus.snmplabs.com 4.1.3_U1 1 sun4m', 'zeus.snmplabs.com'] }
12
- it "can perform a series of gets if passed an array of oids" do
13
- expect(subject.get ['1.3.6.1.2.1.1.1.0', '1.3.6.1.2.1.1.5.0']).to eq expected
28
+ context 'when the host is unreachable' do
29
+ subject { Snmpjr.new(:host => 'example.com', :port => 161, :community => 'public') }
30
+
31
+ it "the request times out after 5 seconds" do
32
+ expect(subject.get '1.3.6.1.2.1.1.1.0').to eq 'Request timed out'
33
+ end
14
34
  end
35
+
15
36
  end
16
37
  end
@@ -0,0 +1,61 @@
1
+ require production_code
2
+
3
+ describe Snmpjr::Getter do
4
+ let(:target) { double :target }
5
+ let(:session) { double Snmpjr::Session }
6
+ let(:pdu) { double Snmpjr::Pdu }
7
+ let(:created_pdu_1) { double :created_pdu_1 }
8
+
9
+ subject { described_class.new(target) }
10
+
11
+ before do
12
+ allow(Snmpjr::Pdu).to receive(:new).and_return pdu
13
+ allow(pdu).to receive(:create).with('1.2.3.4.5.6').and_return created_pdu_1
14
+ allow(Snmpjr::Session).to receive(:new).and_return session
15
+ allow(session).to receive(:start)
16
+ allow(session).to receive(:send).with(created_pdu_1, target).and_return 'Foo'
17
+ allow(session).to receive(:close)
18
+ end
19
+
20
+ describe "#get_multiple" do
21
+ let(:created_pdu_2) { double :created_pdu_2 }
22
+
23
+ before do
24
+ allow(pdu).to receive(:create).with('6.5.4.3.2.1').and_return created_pdu_2
25
+ allow(session).to receive(:send).with(created_pdu_2, target).and_return 'Bar'
26
+ end
27
+
28
+ it 'starts an snmp session' do
29
+ subject.get_multiple ['1.2.3.4.5.6', '6.5.4.3.2.1']
30
+ expect(session).to have_received(:start)
31
+ end
32
+
33
+ it 'performs multiple gets for each oid' do
34
+ expect(subject.get_multiple ['1.2.3.4.5.6', '6.5.4.3.2.1']).to eq(['Foo', 'Bar'])
35
+ expect(session).to have_received(:send).with(created_pdu_1, target)
36
+ expect(session).to have_received(:send).with(created_pdu_2, target)
37
+ end
38
+
39
+ it 'closes the snmp session' do
40
+ subject.get_multiple ['1.2.3.4.5.6', '6.5.4.3.2.1']
41
+ expect(session).to have_received(:close)
42
+ end
43
+ end
44
+
45
+ describe "#get" do
46
+ it 'starts an snmp session' do
47
+ subject.get '1.2.3.4.5.6'
48
+ expect(session).to have_received(:start)
49
+ end
50
+
51
+ it 'performs a synchronous get' do
52
+ expect(subject.get '1.2.3.4.5.6').to eq 'Foo'
53
+ expect(session).to have_received(:send).with(created_pdu_1, target)
54
+ end
55
+
56
+ it 'closes the snmp session' do
57
+ subject.get '1.2.3.4.5.6'
58
+ expect(session).to have_received(:close)
59
+ end
60
+ end
61
+ end
@@ -1,26 +1,40 @@
1
1
  require production_code
2
2
 
3
3
  describe Snmpjr::Session do
4
- describe "#send" do
5
- let(:transport_mapping) { double Snmpjr::Wrappers::Transport::DefaultUdpTransportMapping }
6
4
 
7
- let(:target) { double :target }
8
- let(:pdu) { double :pdu }
9
- let(:result) { double :result }
5
+ let(:transport_mapping) { double Snmpjr::Wrappers::Transport::DefaultUdpTransportMapping }
6
+ let(:snmp_session) { double Snmpjr::Wrappers::Snmp }
7
+
8
+ before do
9
+ allow(Snmpjr::Wrappers::Transport::DefaultUdpTransportMapping).to receive(:new).and_return transport_mapping
10
+ allow(Snmpjr::Wrappers::Snmp).to receive(:new).and_return snmp_session
11
+ allow(snmp_session).to receive(:listen)
12
+ allow(snmp_session).to receive(:send)
13
+ allow(snmp_session).to receive(:close)
14
+ end
15
+
16
+ describe "#start" do
17
+
18
+ it "opens a new SNMP4J session with Udp transport mapping" do
19
+ subject.start
20
+ expect(Snmpjr::Wrappers::Snmp).to have_received(:new).with(transport_mapping)
21
+ end
22
+
23
+ it "calls the listen method on the Snmp session" do
24
+ subject.start
25
+ expect(snmp_session).to have_received(:listen)
26
+ end
27
+
28
+ end
10
29
 
11
- let(:snmp_session) { double Snmpjr::Wrappers::Snmp }
30
+ describe "#send" do
31
+ let(:result) { double :result }
32
+ let(:pdu) { double :pdu }
33
+ let(:target) { double :target }
12
34
 
13
35
  before do
14
- allow(Snmpjr::Wrappers::Transport::DefaultUdpTransportMapping).to receive(:new).and_return transport_mapping
15
- allow(Snmpjr::Wrappers::Snmp).to receive(:new).and_return snmp_session
16
36
  allow(snmp_session).to receive(:send).and_return result
17
37
  allow(result).to receive_message_chain('response.variable_bindings.first.variable.to_s')
18
- allow(snmp_session).to receive(:listen)
19
- allow(snmp_session).to receive(:close)
20
- end
21
- it "opens a new SNMP4J session with Udp transport mapping" do
22
- expect(Snmpjr::Wrappers::Snmp).to receive(:new).with(transport_mapping)
23
- subject.send(pdu, target)
24
38
  end
25
39
 
26
40
  it "sends the pdu to the target" do
@@ -28,10 +42,31 @@ describe Snmpjr::Session do
28
42
  subject.send(pdu, target)
29
43
  end
30
44
 
31
- it "closes the connection" do
32
- expect(snmp_session).to receive(:close)
33
- subject.send(pdu, target)
45
+ context 'the requests times out' do
46
+ before do
47
+ allow(result).to receive(:response).and_return nil
48
+ end
49
+
50
+ it 'returns a request timeout' do
51
+ expect(subject.send(pdu, target)).to eq "Request timed out"
52
+ end
34
53
  end
35
54
 
55
+ context 'an exception is raised' do
56
+ before do
57
+ allow(snmp_session).to receive(:send).and_raise(RuntimeError.new('Some error'))
58
+ end
59
+
60
+ it 'returns the error without blowing up' do
61
+ expect(subject.send(pdu, target)).to eq "Error: Some error"
62
+ end
63
+ end
64
+ end
65
+
66
+ describe "#close" do
67
+ it "closes the snmp session" do
68
+ subject.close
69
+ expect(snmp_session).to have_received(:close)
70
+ end
36
71
  end
37
72
  end
data/spec/snmpjr_spec.rb CHANGED
@@ -6,17 +6,12 @@ describe Snmpjr do
6
6
 
7
7
  let(:target) { double Snmpjr::Target }
8
8
  let(:community_target) { double :community_target }
9
- let(:session) { double Snmpjr::Session }
10
- let(:pdu) { double Snmpjr::Pdu }
11
- let(:created_pdu_1) { double :created_pdu_1 }
9
+ let(:getter) { double Snmpjr::Getter }
12
10
 
13
11
  before do
14
- allow(Snmpjr::Pdu).to receive(:new).and_return pdu
15
- allow(pdu).to receive(:create).with('1.2.3.4.5.6').and_return created_pdu_1
16
- allow(Snmpjr::Session).to receive(:new).and_return session
17
- allow(session).to receive(:send)
18
12
  allow(Snmpjr::Target).to receive(:new).and_return target
19
13
  allow(target).to receive(:create).with(agent_details).and_return community_target
14
+ allow(Snmpjr::Getter).to receive(:new).with(community_target).and_return getter
20
15
  end
21
16
 
22
17
  let(:agent_details) { { :host => '127.0.0.1', :port => 161, :community => 'some_community' } }
@@ -25,22 +20,15 @@ describe Snmpjr do
25
20
 
26
21
  context 'when passed a single oid' do
27
22
  it 'performs a synchronous get' do
23
+ expect(getter).to receive(:get).with('1.2.3.4.5.6')
28
24
  subject.get '1.2.3.4.5.6'
29
- expect(session).to have_received(:send).with(created_pdu_1, community_target)
30
25
  end
31
26
  end
32
27
 
33
28
  context 'when passed multiple oids' do
34
- let(:created_pdu_2) { double :created_pdu_2 }
35
-
36
- before do
37
- allow(pdu).to receive(:create).with('6.5.4.3.2.1').and_return created_pdu_2
38
- end
39
-
40
- it 'performs multiple gets for each oid' do
29
+ it 'performs a get multiple using the getter' do
30
+ expect(getter).to receive(:get_multiple).with(['1.2.3.4.5.6', '6.5.4.3.2.1'])
41
31
  subject.get ['1.2.3.4.5.6', '6.5.4.3.2.1']
42
- expect(session).to have_received(:send).with(created_pdu_1, community_target)
43
- expect(session).to have_received(:send).with(created_pdu_2, community_target)
44
32
  end
45
33
  end
46
34
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snmpjr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: java
6
6
  authors:
7
7
  - Zen Kyprianou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-12 00:00:00.000000000 Z
11
+ date: 2014-10-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: ! 'Snmpjr aims to provide a clean and simple interface to use SNMP in
14
14
  your ruby code. It will wrap the popular SNMP4J library in Java.
@@ -30,6 +30,7 @@ files:
30
30
  - Rakefile
31
31
  - history.rdoc
32
32
  - lib/snmpjr.rb
33
+ - lib/snmpjr/getter.rb
33
34
  - lib/snmpjr/pdu.rb
34
35
  - lib/snmpjr/session.rb
35
36
  - lib/snmpjr/target.rb
@@ -40,6 +41,7 @@ files:
40
41
  - lib/snmpjr/wrappers/transport.rb
41
42
  - snmpjr.gemspec
42
43
  - spec/integration/snmpjr_spec.rb
44
+ - spec/snmpjr/getter_spec.rb
43
45
  - spec/snmpjr/pdu_spec.rb
44
46
  - spec/snmpjr/session_spec.rb
45
47
  - spec/snmpjr/target_spec.rb
@@ -71,6 +73,7 @@ specification_version: 4
71
73
  summary: Simple SNMP interface for JRuby
72
74
  test_files:
73
75
  - spec/integration/snmpjr_spec.rb
76
+ - spec/snmpjr/getter_spec.rb
74
77
  - spec/snmpjr/pdu_spec.rb
75
78
  - spec/snmpjr/session_spec.rb
76
79
  - spec/snmpjr/target_spec.rb