sloe 0.8.6 → 0.8.7
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/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
|