sloe 0.8.6 → 0.8.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +5 -5
- data/lib/import-mibs.rb +12 -13
- data/lib/sloe/version.rb +1 -1
- data/sloe.gemspec +22 -18
- data/spec/blocks_spec.rb +32 -11
- data/spec/methods_spec.rb +57 -24
- data/spec/spec_helper.rb +1 -1
- data/test +1 -0
- metadata +26 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5397b01aa1ff0a4b4a6d0bed0c2c27b4bea22e19
|
4
|
+
data.tar.gz: e87368db3b45d1819a8251b577ff06f71345fd02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6132916732e57176a32d61858f4bf4ba7d492b27deb12ad13dc5e09b2c97a5905bb420ecd9c35aaacadeb4e2c6157d547e63fbbc3742537710842ce615be704
|
7
|
+
data.tar.gz: 5f869852abcdd0a2f32ba90924377ae95c5e8db48aeeebd0934d561a3c8ff7920a496fb7c513b17c5b86982bef84d0bb21e65fa33111750a62b734dbbdbd3678
|
data/Rakefile
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require 'ci/reporter/rake/rspec'
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require 'ci/reporter/rake/rspec'
|
4
4
|
|
5
5
|
RSpec::Core::RakeTask.new
|
6
6
|
|
7
|
-
task :
|
8
|
-
task :
|
7
|
+
task default: ['ci:setup:rspec', :spec]
|
8
|
+
task test: ['ci:setup:rspec', :spec]
|
data/lib/import-mibs.rb
CHANGED
@@ -1,33 +1,32 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
2
|
require 'yaml'
|
4
3
|
|
5
4
|
def eval_mib_data(mib_hash)
|
6
|
-
ruby_hash = mib_hash
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
ruby_hash = mib_hash
|
6
|
+
.gsub(':', '=>') # fix hash syntax
|
7
|
+
.tr('(', '[').tr(')', ']') # fix tuple syntax
|
8
|
+
.sub('FILENAME =', 'filename =') # get rid of constants
|
9
|
+
.sub('MIB =', 'mib =')
|
11
10
|
mib = nil
|
12
11
|
eval(ruby_hash)
|
13
12
|
mib
|
14
13
|
end
|
15
14
|
|
16
15
|
def module_file_name(module_name, mib_dir)
|
17
|
-
File.join(mib_dir, module_name +
|
16
|
+
File.join(mib_dir, module_name + '.yaml')
|
18
17
|
end
|
19
18
|
|
20
|
-
raise
|
19
|
+
raise 'smidump tool must be installed' unless `smidump --version` =~ /^smidump 0.4/ && $CHILD_STATUS == 0
|
21
20
|
mib_hash = `smidump -k -p mib-jnx-smi.txt -f python #{ARGV[0]}`
|
22
21
|
mib = eval_mib_data(mib_hash)
|
23
22
|
if mib
|
24
|
-
module_name = mib[
|
23
|
+
module_name = mib['moduleName']
|
25
24
|
raise "#{module_file}: invalid file format; no module name" unless module_name
|
26
|
-
if mib[
|
25
|
+
if mib['nodes']
|
27
26
|
oid_hash = {}
|
28
|
-
mib[
|
29
|
-
if mib[
|
30
|
-
mib[
|
27
|
+
mib['nodes'].each { |key, value| oid_hash[key] = value['oid'] }
|
28
|
+
if mib['notifications']
|
29
|
+
mib['notifications'].each { |key, value| oid_hash[key] = value['oid'] }
|
31
30
|
end
|
32
31
|
File.open(module_file_name(module_name, ARGV[1]), 'w') do |file|
|
33
32
|
YAML.dump(oid_hash, file)
|
data/lib/sloe/version.rb
CHANGED
data/sloe.gemspec
CHANGED
@@ -4,27 +4,31 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'sloe/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
|
-
gem.name =
|
7
|
+
gem.name = 'sloe'
|
8
8
|
gem.version = Sloe::VERSION
|
9
|
-
gem.authors = [
|
10
|
-
gem.email = [
|
11
|
-
gem.
|
12
|
-
gem.
|
13
|
-
|
9
|
+
gem.authors = ['David Gethings']
|
10
|
+
gem.email = ['dgjnpr@gmail.com']
|
11
|
+
gem.homepage = 'https://github.com/dgjnpr/Sloe'
|
12
|
+
gem.description = <<-DESC
|
13
|
+
Sloe uses NETCONF and/or SNMP to gather data regarding a network device. Designed to help with automated testing this gem can also be used with things like Ruby on Rails
|
14
|
+
DESC
|
15
|
+
gem.summary = <<-SUMM
|
16
|
+
A one stop shop for collecting data from a network device using NETCONF or SNMP
|
17
|
+
SUMM
|
14
18
|
|
15
|
-
gem.add_dependency('snmp', '~> 1.
|
16
|
-
gem.add_dependency('
|
17
|
-
gem.add_dependency('net-scp', '~> 1.
|
18
|
-
gem.add_development_dependency('rspec', '~>
|
19
|
-
gem.add_development_dependency('yard'
|
20
|
-
gem.add_development_dependency('
|
21
|
-
gem.add_development_dependency('
|
22
|
-
gem.add_development_dependency('
|
23
|
-
gem.add_development_dependency('rake'
|
24
|
-
gem.add_development_dependency('
|
19
|
+
gem.add_dependency('snmp', '~> 1.1')
|
20
|
+
gem.add_dependency('netconf', '~> 0.3')
|
21
|
+
gem.add_dependency('net-scp', '~> 1.0')
|
22
|
+
gem.add_development_dependency('rspec', '~> 2.12')
|
23
|
+
gem.add_development_dependency('yard')
|
24
|
+
# gem.add_development_dependency('pry-debugger')
|
25
|
+
gem.add_development_dependency('simplecov')
|
26
|
+
gem.add_development_dependency('ci_reporter')
|
27
|
+
gem.add_development_dependency('rake')
|
28
|
+
gem.add_development_dependency('rubocop', '~> 0.39')
|
25
29
|
|
26
30
|
gem.files = `git ls-files`.split($/)
|
27
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
31
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
28
32
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
29
|
-
gem.require_paths = [
|
33
|
+
gem.require_paths = ['lib']
|
30
34
|
end
|
data/spec/blocks_spec.rb
CHANGED
@@ -1,31 +1,52 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Sloe do
|
4
|
-
let(:login) { {target: 'crtj-0dc1-0001', username: 'netadmin', password: 'pass123'} }
|
5
4
|
context "invoked with block" do
|
5
|
+
before(:all) do
|
6
|
+
@login = {
|
7
|
+
:target => 'capella',
|
8
|
+
:username => 'netconf',
|
9
|
+
:password => 'netconf'
|
10
|
+
}
|
11
|
+
@hostname = ''
|
12
|
+
end
|
13
|
+
|
6
14
|
it "calls Netconf RPC" do
|
7
|
-
|
8
|
-
|
9
|
-
hostname =
|
15
|
+
Sloe::Device.new( @login ) { |dut|
|
16
|
+
sw_info = dut.rpc.get_system_information
|
17
|
+
@hostname = sw_info.xpath('//host-name').text
|
10
18
|
}
|
11
|
-
|
19
|
+
@hostname.should include @login[:target]
|
12
20
|
end
|
13
21
|
|
14
22
|
it "calls SNMP RPC" do
|
15
|
-
|
16
|
-
|
17
|
-
hostname = dut.snmp.get_value( 'sysName.0' ).to_s
|
23
|
+
Sloe::Device.new ( @login ) { |dut|
|
24
|
+
@hostname = dut.snmp.get_value( 'sysName.0' ).to_s
|
18
25
|
}
|
19
|
-
|
26
|
+
@hostname.should include @login[:target]
|
20
27
|
end
|
28
|
+
|
21
29
|
end
|
22
30
|
|
23
31
|
context "Junos extensions" do
|
32
|
+
before(:all) do
|
33
|
+
@login = {
|
34
|
+
:target => 'capella',
|
35
|
+
:username => 'netconf',
|
36
|
+
:password => 'netconf'
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
24
40
|
it "Sloe::Junos responds to Junos specific RPCs" do
|
25
|
-
|
41
|
+
Sloe::Junos.new ( @login ) { |dut|
|
42
|
+
dut.rpc.respond_to?(:lock_configuration).should be true
|
43
|
+
}
|
26
44
|
end
|
27
45
|
it "Sloe::Device does not respond to Junos specific RPCs" do
|
28
|
-
|
46
|
+
Sloe::Device.new ( @login ) { |dut|
|
47
|
+
dut.rpc.respond_to?(:lock_configuration).should be false
|
48
|
+
}
|
29
49
|
end
|
50
|
+
|
30
51
|
end
|
31
52
|
end
|
data/spec/methods_spec.rb
CHANGED
@@ -1,74 +1,107 @@
|
|
1
1
|
require 'sloe/junos'
|
2
2
|
|
3
3
|
describe Sloe do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@jnx_mibs = Dir.glob("./mibs/JUNIPER-*.yaml").map { |f| File.basename(f, '.yaml') }
|
7
|
+
@args = {
|
8
|
+
:target => 'capella',
|
9
|
+
:username => 'netconf',
|
10
|
+
:password => 'netconf',
|
11
|
+
:mib_dir => './mibs',
|
12
|
+
:mib_modules => ["SNMPv2-SMI", "SNMPv2-MIB", "IF-MIB", "IP-MIB", "TCP-MIB", "UDP-MIB"].concat(@jnx_mibs)
|
13
|
+
}
|
14
|
+
|
15
|
+
@dut = Sloe::Junos.new(@args)
|
16
|
+
end
|
13
17
|
|
14
18
|
context "SNMP API" do
|
15
19
|
it "snmp.get_value() returns valid value" do
|
16
|
-
|
20
|
+
@dut.snmp.get_value('sysDescr.0').should =~ /^Juniper Networks,/
|
17
21
|
end
|
18
22
|
it "snmp.get() returns one PDU" do
|
19
|
-
|
23
|
+
@pdu = @dut.snmp.get('sysDescr.0')
|
24
|
+
@pdu.varbind_list.should have(1).item
|
20
25
|
end
|
21
26
|
it "snmp.get_bulk() returns a list of PDUs" do
|
22
|
-
|
27
|
+
@pdu = @dut.snmp.get_bulk(0, 5, 'system')
|
28
|
+
@pdu.varbind_list.should have(5).items
|
23
29
|
end
|
24
30
|
it "snmp.get_next() returns one PDU" do
|
25
|
-
|
31
|
+
@pdu = @dut.snmp.get_next('system')
|
32
|
+
@pdu.varbind_list.should have(1).item
|
26
33
|
end
|
27
34
|
it "snmp.walk() returns a list of PDUs none of which are nil" do
|
28
|
-
|
35
|
+
@dut.snmp.walk('system') { |vb| vb.should_not be_nil }
|
29
36
|
end
|
30
37
|
end
|
31
38
|
|
32
39
|
context "JNX Enterprise MIBs" do
|
33
40
|
it "jnxBoxDescr.0 has a valid value" do
|
34
|
-
|
41
|
+
@dut.snmp.get_value('jnxBoxDescr.0').should =~ /^Juniper/
|
35
42
|
end
|
36
43
|
end
|
37
44
|
|
38
45
|
context "NETCONF API" do
|
39
46
|
it "rpc.get_interface_information() functions without error" do
|
40
|
-
|
47
|
+
lambda { @dut.rpc.get_interface_information() }.should_not raise_error
|
41
48
|
end
|
42
49
|
it "rpc.get_ospf_neighbor_information() functions without error" do
|
43
|
-
|
50
|
+
lambda { @dut.rpc.get_ospf_neighbor_information() }.should_not raise_error
|
44
51
|
end
|
45
52
|
end
|
46
53
|
|
47
54
|
context "SCP API" do
|
48
55
|
it "scp.download() functions without error" do
|
49
|
-
|
56
|
+
lambda { @dut.scp.download!('/config/juniper.conf.gz', '/var/tmp/juniper.conf.gz') }.should_not raise_error
|
50
57
|
File.delete('/var/tmp/juniper.conf.gz')
|
51
58
|
end
|
52
59
|
it "scp.upload() functions without error" do
|
53
60
|
File.new('/var/tmp/test', 'w+')
|
54
|
-
|
55
|
-
dut.rpc.file_delete(:path => 'test')
|
61
|
+
lambda { @dut.scp.upload!('/var/tmp/test', 'test') }.should_not raise_error
|
62
|
+
@dut.rpc.file_delete(:path => 'test')
|
56
63
|
File.delete('/var/tmp/test')
|
57
64
|
end
|
58
65
|
end
|
59
66
|
|
60
67
|
context "CLI API" do
|
61
68
|
it "cli('show version') functions without error" do
|
62
|
-
|
69
|
+
lambda { @dut.cli("show version") }.should_not raise_error
|
63
70
|
end
|
64
71
|
it "cli('show version') contains OS information" do
|
65
|
-
|
72
|
+
@dut.cli("show version").should be_a(String)
|
73
|
+
@dut.cli("show version").should =~ /JUNOS Base OS/
|
66
74
|
end
|
67
75
|
it "cli('show version', :foo => 'bar') still contains OS information" do
|
68
|
-
|
76
|
+
@dut.cli("show version", :foo => 'bar').should be_a(String)
|
77
|
+
@dut.cli("show version", :foo => 'bar').should =~ /JUNOS Base OS/
|
69
78
|
end
|
70
79
|
it "cli('clear interface statistics') empty reply does not cause an error" do
|
71
|
-
|
80
|
+
lambda { @dut.cli('clear interface statistics fxp0') }.should_not raise_error
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context "Helper methods" do
|
85
|
+
before( :all ) do
|
86
|
+
Dir.mkdir( 'configs' )
|
87
|
+
@apply = File.open( "configs/capella-apply.set", "w" )
|
88
|
+
@apply.write( 'set system location building "In a galaxy far, far, away"' )
|
89
|
+
@apply.close
|
90
|
+
|
91
|
+
@delete = File.open( "configs/capella-delete.set", "w" )
|
92
|
+
@delete.write( 'delete system location')
|
93
|
+
@delete.close
|
94
|
+
end
|
95
|
+
|
96
|
+
it "setup() with default args updates the router config" do
|
97
|
+
lambda { @dut.setup() }.should_not raise_error
|
98
|
+
end
|
99
|
+
it "clearup() with default args updates the router config" do
|
100
|
+
lambda { @dut.clearup() }.should_not raise_error
|
101
|
+
end
|
102
|
+
|
103
|
+
after(:all) do
|
104
|
+
FileUtils.rm_rf( 'configs' )
|
72
105
|
end
|
73
106
|
end
|
74
107
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sloe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Gethings
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: snmp
|
@@ -16,16 +16,16 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: netconf
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
@@ -44,72 +44,58 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
47
|
+
version: '1.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
54
|
+
version: '1.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2.12'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '2.12'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: yard
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0
|
75
|
+
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0
|
82
|
+
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: simplecov
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0
|
89
|
+
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0
|
96
|
+
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: ci_reporter
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '2.0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '2.0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: ci_reporter_rspec
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
101
|
- - ">="
|
@@ -128,31 +114,30 @@ dependencies:
|
|
128
114
|
requirements:
|
129
115
|
- - ">="
|
130
116
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
117
|
+
version: '0'
|
132
118
|
type: :development
|
133
119
|
prerelease: false
|
134
120
|
version_requirements: !ruby/object:Gem::Requirement
|
135
121
|
requirements:
|
136
122
|
- - ">="
|
137
123
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
124
|
+
version: '0'
|
139
125
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
126
|
+
name: rubocop
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
142
128
|
requirements:
|
143
129
|
- - "~>"
|
144
130
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
131
|
+
version: '0.39'
|
146
132
|
type: :development
|
147
133
|
prerelease: false
|
148
134
|
version_requirements: !ruby/object:Gem::Requirement
|
149
135
|
requirements:
|
150
136
|
- - "~>"
|
151
137
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
153
|
-
description:
|
154
|
-
Designed to help with automated testing this gem can also be used with things like
|
155
|
-
Ruby on Rails
|
138
|
+
version: '0.39'
|
139
|
+
description: |
|
140
|
+
Sloe uses NETCONF and/or SNMP to gather data regarding a network device. Designed to help with automated testing this gem can also be used with things like Ruby on Rails
|
156
141
|
email:
|
157
142
|
- dgjnpr@gmail.com
|
158
143
|
executables: []
|
@@ -510,6 +495,7 @@ files:
|
|
510
495
|
- spec/blocks_spec.rb
|
511
496
|
- spec/methods_spec.rb
|
512
497
|
- spec/spec_helper.rb
|
498
|
+
- test
|
513
499
|
homepage: https://github.com/dgjnpr/Sloe
|
514
500
|
licenses: []
|
515
501
|
metadata: {}
|
@@ -529,7 +515,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
529
515
|
version: '0'
|
530
516
|
requirements: []
|
531
517
|
rubyforge_project:
|
532
|
-
rubygems_version: 2.
|
518
|
+
rubygems_version: 2.5.2
|
533
519
|
signing_key:
|
534
520
|
specification_version: 4
|
535
521
|
summary: A one stop shop for collecting data from a network device using NETCONF or
|