cisco_node_utils 1.0.1 → 1.1.0

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.
Files changed (114) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.rubocop.yml +81 -1
  4. data/.travis.yml +9 -0
  5. data/CHANGELOG.md +72 -6
  6. data/CONTRIBUTING.md +32 -7
  7. data/README.md +70 -7
  8. data/Rakefile +17 -0
  9. data/bin/check_metric_limits.rb +109 -0
  10. data/bin/git/hooks/commit-msg/enforce_style +81 -0
  11. data/bin/git/hooks/hook_lib +108 -0
  12. data/bin/git/hooks/hooks-wrapper +38 -0
  13. data/bin/git/hooks/post-flow-hotfix-start/update-version +24 -0
  14. data/bin/git/hooks/post-flow-release-finish/update-version +29 -0
  15. data/bin/git/hooks/post-flow-release-start/update-version +19 -0
  16. data/bin/git/hooks/post-merge/update-hooks +6 -0
  17. data/bin/git/hooks/post-rewrite/update-hooks +6 -0
  18. data/bin/git/hooks/pre-commit/rubocop +20 -0
  19. data/bin/git/hooks/pre-commit/validate-diffs +31 -0
  20. data/bin/git/hooks/pre-push/check-changelog +24 -0
  21. data/bin/git/hooks/pre-push/rubocop +7 -0
  22. data/bin/git/update-hooks +65 -0
  23. data/cisco_node_utils.gemspec +9 -3
  24. data/docs/README-develop-best-practices.md +404 -0
  25. data/docs/README-develop-node-utils-APIs.md +215 -365
  26. data/docs/README-maintainers.md +33 -3
  27. data/docs/template-router.rb +89 -91
  28. data/docs/template-test_router.rb +52 -55
  29. data/lib/.rubocop.yml +18 -0
  30. data/lib/cisco_node_utils.rb +2 -19
  31. data/lib/cisco_node_utils/README_YAML.md +1 -9
  32. data/lib/cisco_node_utils/bgp.rb +664 -0
  33. data/lib/cisco_node_utils/bgp_af.rb +530 -0
  34. data/lib/cisco_node_utils/bgp_neighbor.rb +425 -0
  35. data/lib/cisco_node_utils/bgp_neighbor_af.rb +709 -0
  36. data/lib/cisco_node_utils/cisco_cmn_utils.rb +59 -25
  37. data/lib/cisco_node_utils/command_reference.rb +72 -74
  38. data/lib/cisco_node_utils/command_reference_common.yaml +174 -9
  39. data/lib/cisco_node_utils/command_reference_common_bgp.yaml +535 -0
  40. data/lib/cisco_node_utils/command_reference_n7k.yaml +4 -0
  41. data/lib/cisco_node_utils/command_reference_n9k.yaml +0 -9
  42. data/lib/cisco_node_utils/configparser_lib.rb +152 -147
  43. data/lib/cisco_node_utils/dns_domain.rb +79 -0
  44. data/lib/cisco_node_utils/domain_name.rb +71 -0
  45. data/lib/cisco_node_utils/interface.rb +167 -161
  46. data/lib/cisco_node_utils/interface_ospf.rb +78 -81
  47. data/lib/cisco_node_utils/name_server.rb +64 -0
  48. data/lib/cisco_node_utils/node.rb +154 -198
  49. data/lib/cisco_node_utils/node_util.rb +61 -0
  50. data/lib/cisco_node_utils/ntp_config.rb +65 -0
  51. data/lib/cisco_node_utils/ntp_server.rb +76 -0
  52. data/lib/cisco_node_utils/platform.rb +174 -165
  53. data/lib/cisco_node_utils/radius_global.rb +146 -0
  54. data/lib/cisco_node_utils/radius_server.rb +295 -0
  55. data/lib/cisco_node_utils/router_ospf.rb +59 -63
  56. data/lib/cisco_node_utils/router_ospf_vrf.rb +226 -210
  57. data/lib/cisco_node_utils/snmpcommunity.rb +52 -58
  58. data/lib/cisco_node_utils/snmpgroup.rb +22 -23
  59. data/lib/cisco_node_utils/snmpserver.rb +99 -103
  60. data/lib/cisco_node_utils/snmpuser.rb +294 -274
  61. data/lib/cisco_node_utils/syslog_server.rb +92 -0
  62. data/lib/cisco_node_utils/syslog_settings.rb +69 -0
  63. data/lib/cisco_node_utils/tacacs_server.rb +137 -133
  64. data/lib/cisco_node_utils/tacacs_server_host.rb +84 -87
  65. data/lib/cisco_node_utils/version.rb +2 -1
  66. data/lib/cisco_node_utils/vlan.rb +28 -31
  67. data/lib/cisco_node_utils/vrf.rb +80 -0
  68. data/lib/cisco_node_utils/vtp.rb +100 -97
  69. data/lib/cisco_node_utils/yum.rb +15 -17
  70. data/tests/.rubocop.yml +15 -0
  71. data/tests/basetest.rb +81 -36
  72. data/tests/ciscotest.rb +38 -78
  73. data/{lib/cisco_node_utils → tests}/platform_info.rb +12 -8
  74. data/{lib/cisco_node_utils → tests}/platform_info.yaml +1 -1
  75. data/tests/test_bgp_af.rb +920 -0
  76. data/tests/test_bgp_neighbor.rb +403 -0
  77. data/tests/test_bgp_neighbor_af.rb +589 -0
  78. data/tests/test_command_config.rb +65 -62
  79. data/tests/test_command_reference.rb +31 -45
  80. data/tests/test_dns_domain.rb +113 -0
  81. data/tests/test_domain_name.rb +86 -0
  82. data/tests/test_interface.rb +424 -548
  83. data/tests/test_interface_ospf.rb +248 -432
  84. data/tests/test_interface_svi.rb +56 -79
  85. data/tests/test_interface_switchport.rb +196 -272
  86. data/tests/test_name_server.rb +85 -0
  87. data/tests/test_node.rb +7 -6
  88. data/tests/test_node_ext.rb +133 -186
  89. data/tests/test_ntp_config.rb +49 -0
  90. data/tests/test_ntp_server.rb +74 -0
  91. data/tests/test_platform.rb +58 -37
  92. data/tests/test_radius_global.rb +78 -0
  93. data/tests/test_radius_server.rb +185 -0
  94. data/tests/test_router_bgp.rb +838 -0
  95. data/tests/test_router_ospf.rb +49 -80
  96. data/tests/test_router_ospf_vrf.rb +274 -392
  97. data/tests/test_snmpcommunity.rb +128 -172
  98. data/tests/test_snmpgroup.rb +12 -14
  99. data/tests/test_snmpserver.rb +160 -189
  100. data/tests/test_snmpuser.rb +568 -717
  101. data/tests/test_syslog_server.rb +88 -0
  102. data/tests/test_syslog_settings.rb +54 -0
  103. data/tests/test_tacacs_server.rb +113 -148
  104. data/tests/test_tacacs_server_host.rb +108 -161
  105. data/tests/test_vlan.rb +63 -79
  106. data/tests/test_vrf.rb +92 -0
  107. data/tests/test_vtp.rb +108 -126
  108. data/tests/test_yum.rb +47 -41
  109. metadata +92 -56
  110. data/.rubocop_todo.yml +0 -293
  111. data/docs/.rubocop.yml +0 -13
  112. data/docs/template-feature.rb +0 -45
  113. data/docs/template-test_feature.rb +0 -51
  114. data/tests/test_all_cisco.rb +0 -46
@@ -17,13 +17,11 @@
17
17
  # See the License for the specific language governing permissions and
18
18
  # limitations under the License.
19
19
 
20
- require File.join(File.dirname(__FILE__), 'node')
20
+ require_relative 'node_util'
21
21
 
22
22
  module Cisco
23
23
  # This Yum class provides cisco package management functions through nxapi.
24
- class Yum
25
- @@node = Cisco::Node.instance
26
-
24
+ class Yum < NodeUtil
27
25
  def self.decompose_name(file_name)
28
26
  # ex: chef-12.0.0alpha.2+20150319.git.1.b6f-1.el5.x86_64.rpm
29
27
  name_ver_arch_regex = /^([\w\-\+]+)-(\d+\..*)\.(\w{4,})(?:\.rpm)?$/
@@ -40,7 +38,7 @@ module Cisco
40
38
  end
41
39
 
42
40
  def self.validate(pkg)
43
- file_name = pkg.strip.gsub(':', '/').split('/').last
41
+ file_name = pkg.strip.tr(':', '/').split('/').last
44
42
  pkg_info = Yum.decompose_name(file_name)
45
43
  if pkg_info.nil?
46
44
  query_name = file_name
@@ -54,22 +52,22 @@ module Cisco
54
52
  should_ver = pkg_info[2] if pkg_info && pkg_info[3]
55
53
  ver = query(query_name)
56
54
  if ver.nil? || (!should_ver.nil? && should_ver != ver)
57
- raise "Failed to install the requested rpm"
55
+ fail 'Failed to install the requested rpm'
58
56
  end
59
57
  end
60
58
 
61
- def self.get_vrf
59
+ def self.detect_vrf
62
60
  # Detect current namespace from agent environment
63
- inode = File::Stat.new("/proc/self/ns/net").ino
61
+ inode = File::Stat.new('/proc/self/ns/net').ino
64
62
  # -L reqd for guestshell's find command
65
63
  vrfname = File.basename(`find -L /var/run/netns/ -inum #{inode}`.chop)
66
- vrf = "vrf " + vrfname unless vrfname.empty?
64
+ vrf = 'vrf ' + vrfname unless vrfname.empty?
67
65
  vrf
68
66
  end
69
67
 
70
- def self.install(pkg, vrf = nil)
71
- vrf = vrf.nil? ? get_vrf : "vrf #{vrf}"
72
- @@node.config_set("yum", "install", pkg, vrf)
68
+ def self.install(pkg, vrf=nil)
69
+ vrf = vrf.nil? ? detect_vrf : "vrf #{vrf}"
70
+ config_set('yum', 'install', pkg, vrf)
73
71
 
74
72
  # HACK: The current nxos host installer is a multi-part command
75
73
  # which may fail at a later stage yet return a false positive;
@@ -80,15 +78,15 @@ module Cisco
80
78
 
81
79
  # returns version of package, or false if package doesn't exist
82
80
  def self.query(pkg)
83
- raise TypeError unless pkg.is_a? String
84
- raise ArgumentError if pkg.empty?
85
- b = @@node.config_get("yum", "query", pkg)
86
- raise "Multiple matching packages found for #{pkg}" if b and b.size > 1
81
+ fail TypeError unless pkg.is_a? String
82
+ fail ArgumentError if pkg.empty?
83
+ b = config_get('yum', 'query', pkg)
84
+ fail "Multiple matching packages found for #{pkg}" if b && b.size > 1
87
85
  b.nil? ? nil : b.first
88
86
  end
89
87
 
90
88
  def self.remove(pkg)
91
- @@node.config_set("yum", "remove", pkg)
89
+ config_set('yum', 'remove', pkg)
92
90
  end
93
91
  end
94
92
  end
@@ -0,0 +1,15 @@
1
+ inherit_from: ../.rubocop.yml
2
+
3
+ # Code complexity metrics for the tests/ subdirectory
4
+
5
+ Metrics/AbcSize:
6
+ Enabled: false
7
+
8
+ Metrics/CyclomaticComplexity:
9
+ Max: 15
10
+
11
+ Metrics/MethodLength:
12
+ Max: 86
13
+
14
+ Metrics/PerceivedComplexity:
15
+ Max: 17
data/tests/basetest.rb CHANGED
@@ -17,67 +17,78 @@
17
17
  # See the License for the specific language governing permissions and
18
18
  # limitations under the License.
19
19
 
20
+ require 'simplecov'
21
+ SimpleCov.start do
22
+ # Don't calculate coverage of our test code itself!
23
+ add_filter '/tests/'
24
+ end
25
+
20
26
  require 'rubygems'
21
- gem 'minitest', '>= 2.5.1', '< 5.0.0'
27
+ gem 'minitest', '~> 5.0'
22
28
  require 'minitest/autorun'
23
29
  require 'net/telnet'
24
- require 'test/unit'
25
30
  begin
26
31
  require 'cisco_nxapi'
27
32
  rescue LoadError
28
- require File.expand_path("../../../cisco_nxapi/lib/cisco_nxapi")
33
+ require File.expand_path('../../../cisco-nxapi/lib/cisco_nxapi')
29
34
  end
30
35
 
31
- class TestCase < Test::Unit::TestCase
36
+ # rubocop:disable Style/ClassVars
37
+ # We *want* the address/username/password class variables to be shared
38
+ # with all child classes, so that we only need to initialize them once.
39
+
40
+ # TestCase - common base class for all minitest cases in this module.
41
+ # Most node utility tests should inherit from CiscoTestCase instead.
42
+ class TestCase < Minitest::Test
43
+ # These variables can be set in one of three ways:
44
+ # 1) ARGV:
45
+ # $ ruby basetest.rb -- address username password
46
+ # 2) NODE environment variable
47
+ # $ export NODE="address username password"
48
+ # $ rake test
49
+ # 3) At run time:
50
+ # $ rake test
51
+ # Enter address or hostname of node under test:
32
52
  @@address = nil
33
53
  @@username = nil
34
54
  @@password = nil
35
55
 
36
- def process_arguments
37
- if ARGV.length != 3 and ARGV.length != 4
38
- puts "Usage:"
39
- puts " ruby test_nxapi.rb [options] -- <address> <username> <password> [debug]"
40
- exit
41
- end
42
-
43
- # Record the version of Ruby we got invoked with.
44
- puts "\nRuby Version - #{RUBY_VERSION}"
45
-
46
- @@address = ARGV[0]
47
- @@username = ARGV[1]
48
- @@password = ARGV[2]
49
-
50
- if ARGV.length == 4
51
- if ARGV[3] == "debug"
52
- CiscoLogger.debug_enable
53
- else
54
- puts "Only 'debug' is allowed"
55
- exit
56
- end
57
- end
58
- end
59
-
60
- # setup-once params
61
56
  def address
62
- process_arguments unless @@address
57
+ @@address ||= ARGV[0]
58
+ @@address ||= ENV['NODE'].split(' ')[0] if ENV['NODE']
59
+ unless @@address
60
+ print 'Enter address or hostname of node under test: '
61
+ @@address = gets.chomp
62
+ end
63
63
  @@address
64
64
  end
65
65
 
66
66
  def username
67
- process_arguments unless @@username
67
+ @@username ||= ARGV[1]
68
+ @@username ||= ENV['NODE'].split(' ')[1] if ENV['NODE']
69
+ unless @@username
70
+ print 'Enter username for node under test: '
71
+ @@username = gets.chomp
72
+ end
68
73
  @@username
69
74
  end
70
75
 
71
76
  def password
72
- process_arguments unless @@password
77
+ @@password ||= ARGV[2]
78
+ @@password ||= ENV['NODE'].split(' ')[2] if ENV['NODE']
79
+ unless @@password
80
+ print 'Enter password for node under test: '
81
+ @@password = gets.chomp
82
+ end
73
83
  @@password
74
84
  end
75
85
 
76
86
  def setup
77
- @device = Net::Telnet.new("Host" => address, "Timeout" => 240)
87
+ @device = Net::Telnet.new('Host' => address, 'Timeout' => 240)
78
88
  @device.login(username, password)
89
+ CiscoLogger.debug_enable if ARGV[3] == 'debug' || ENV['DEBUG'] == '1'
79
90
  rescue Errno::ECONNREFUSED
80
- puts "Connection refused - please check that the IP address is correct"
91
+ puts 'Connection refused - please check that the IP address is correct'
81
92
  puts " and that you have enabled 'feature telnet' on the UUT"
82
93
  exit
83
94
  end
@@ -87,7 +98,41 @@ class TestCase < Test::Unit::TestCase
87
98
  GC.start
88
99
  end
89
100
 
90
- def test_placeholder
91
- # needed so that we don't get a "no tests were specified" error
101
+ def config(*args)
102
+ # Send the entire config as one string but be sure not to return until
103
+ # we are safely back out of config mode, i.e. prompt is
104
+ # 'switch#' not 'switch(config)#' or 'switch(config-if)#' etc.
105
+ @device.cmd('String' => "configure terminal\n" + args.join("\n") + "\nend",
106
+ 'Match' => /^[^()]+[$%#>] \z/n)
107
+ end
108
+
109
+ def assert_show_match(pattern: nil, command: nil, msg: nil)
110
+ pattern ||= @default_output_pattern
111
+ refute_nil(pattern)
112
+ command ||= @default_show_command
113
+ refute_nil(command)
114
+
115
+ output = @device.cmd(command)
116
+ msg = message(msg) do
117
+ "Expected #{mu_pp pattern} to match " \
118
+ "output of '#{mu_pp command}':\n#{output}"
119
+ end
120
+ assert pattern =~ output, msg
121
+ pattern.match(output)
122
+ end
123
+
124
+ def refute_show_match(pattern: nil, command: nil, msg: nil)
125
+ pattern ||= @default_output_pattern
126
+ refute_nil(pattern)
127
+ command ||= @default_show_command
128
+ refute_nil(command)
129
+
130
+ output = @device.cmd(command)
131
+ msg = message(msg) do
132
+ "Expected #{mu_pp pattern} to NOT match " \
133
+ "output of '#{mu_pp command}':\n#{output}"
134
+ end
135
+ refute pattern =~ output, msg
92
136
  end
93
137
  end
138
+ # rubocop:enable Style/ClassVars
data/tests/ciscotest.rb CHANGED
@@ -12,125 +12,85 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require File.join(File.dirname(__FILE__), 'basetest')
16
- require File.expand_path("../../lib/cisco_node_utils/platform_info", __FILE__)
17
- require File.expand_path("../../lib/cisco_node_utils/node", __FILE__)
15
+ require_relative 'basetest'
16
+ require_relative 'platform_info'
17
+ require_relative '../lib/cisco_node_utils/node'
18
18
 
19
19
  include Cisco
20
20
 
21
21
  Node.lazy_connect = true # we'll specify the connection info later
22
22
 
23
+ # CiscoTestCase - base class for all node utility minitests
23
24
  class CiscoTestCase < TestCase
25
+ # rubocop:disable Style/ClassVars
24
26
  @@node = nil
25
27
  @@interfaces = nil
26
28
  @@interfaces_id = nil
29
+ # rubocop:enable Style/ClassVars
27
30
 
28
31
  def node
29
32
  unless @@node
30
- @@node = Node.instance
31
- @@node.connect(@@address, @@username, @@password)
33
+ @@node = Node.instance # rubocop:disable Style/ClassVars
34
+ @@node.connect(address, username, password)
32
35
  @@node.cache_enable = true
33
36
  @@node.cache_auto = true
34
- puts "Node in CiscoTestCase Class: #{@@node}"
37
+ # Record the platform we're running on
38
+ puts "\nNode under test:"
39
+ puts " - name - #{@@node.host_name}"
40
+ puts " - type - #{@@node.product_id}"
41
+ puts " - image - #{@@node.system}\n\n"
35
42
  end
36
43
  @@node
44
+ rescue CiscoNxapi::HTTPUnauthorized
45
+ puts "Unauthorized to connect as #{username}:#{password}@#{address}"
46
+ exit
37
47
  end
38
48
 
39
- def process_arguments
49
+ def setup
40
50
  super
41
- node # Connect to device
42
- # Record the platform we're running on
43
- puts "Platform:"
44
- puts " - name - #{@@node.host_name}"
45
- puts " - type - #{@@node.product_id}"
46
- puts " - image - #{@@node.system}\n\n"
51
+ node
47
52
  end
48
53
 
49
54
  def cmd_ref
50
55
  node.cmd_ref
51
56
  end
52
57
 
58
+ def config(*args)
59
+ result = super
60
+ node.cache_flush
61
+ result
62
+ end
63
+
53
64
  def interfaces
54
65
  unless @@interfaces
55
66
  # Build the platform_info, used for interface lookup
67
+ # rubocop:disable Style/ClassVars
56
68
  begin
57
69
  platform_info = PlatformInfo.new(node.host_name)
58
- @@interfaces = platform_info.get_value_from_key("interfaces")
59
- rescue Exception => e
60
- # If there is a problem reading platform_info.yaml, assign default values
61
- default_interfaces = ["Ethernet1/1", "Ethernet1/2", "Ethernet1/10"]
62
- puts "Caught exception: #{e}, assigning interfaces to default - #{default_interfaces}"
70
+ @@interfaces = platform_info.get_value_from_key('interfaces')
71
+ rescue RuntimeError => e
72
+ # If there is a problem reading platform_info.yaml,
73
+ # assign default values
74
+ default_interfaces = ['Ethernet1/1', 'Ethernet1/2', 'Ethernet1/3']
75
+ puts "Caught exception: #{e}, assigning interfaces to default " \
76
+ "- #{default_interfaces}"
63
77
  @@interfaces = default_interfaces
64
78
  end
79
+ # rubocop:enable Style/ClassVars
65
80
  end
66
81
  @@interfaces
67
82
  end
68
83
 
69
84
  def interfaces_id
70
85
  unless @@interfaces_id
86
+ # rubocop:disable Style/ClassVars
71
87
  @@interfaces_id = []
72
- interfaces.each { |interface|
73
- id = interface.split("Ethernet")[1]
88
+ interfaces.each do |interface|
89
+ id = interface.split('Ethernet')[1]
74
90
  @@interfaces_id << id
75
- }
91
+ end
92
+ # rubocop:enable Style/ClassVars
76
93
  end
77
94
  @@interfaces_id
78
95
  end
79
-
80
- # Class method method to set the class variable 'debug_flag'
81
- # Can be true or false.
82
- def self.debug_flag=(flag)
83
- @@debug_flag = flag
84
- end
85
-
86
- # Class method to set the class variable 'debug_method'
87
- # Can be name of the method or "all"
88
- def self.debug_method=(name)
89
- @@debug_method = name
90
- end
91
-
92
- # Class method to set the class variable 'debug_group'
93
- # Can be the name of the method or "all"
94
- def self.debug_group=(group)
95
- @@debug_group = group
96
- end
97
-
98
- # Class method to set the class variable 'debug_detail'
99
- # Can be true or false
100
- def self.debug_detail=(detail)
101
- @@debug_detail = detail
102
- end
103
-
104
- # Class method to dump debug data.
105
- # The passed in parameters will control what is printed and how.
106
- # Parameters:
107
- # method - Name of the method the debug belongs to.
108
- # group - Name of the group the debug belongs to.
109
- # indent - Indent controls the display of the data.
110
- # detail - Detail controls if detail debugs should be displayed.
111
- # data - Data to be displayed. Must be a fully formatted string.
112
- def self.debug(method, group, indent, data)
113
- if (@@debug_flag) &&
114
- (((@@debug_method == method) || (@@debug_method == "all")) ||
115
- ((@@debug_group == group) || (@@debug_group == "all")))
116
- indent_spaces = " " * indent
117
- puts "#{indent_spaces}#{method} - #{data}"
118
- end
119
- end
120
-
121
- # Class method to dump detailed debug data.
122
- # The passed in parameters will control what is printed and how.
123
- # Parameters:
124
- # method - Name of the method the debug belongs to.
125
- # group - Name of the group the debug belongs to.
126
- # indent - Indent controls the display of the data.
127
- # data - Data to be displayed. Must be a fully formatted string.
128
- def self.debug_detail(method, group, indent, data)
129
- if (@@debug_detail) &&
130
- (((@@debug_method == method) || (@@debug_method == "all")) ||
131
- ((@@debug_group == group) || (@@debug_group == "all")))
132
- indent_spaces = " " * indent
133
- puts "#{indent_spaces}#{method} - #{data}"
134
- end
135
- end
136
96
  end
@@ -15,7 +15,7 @@
15
15
  require 'yaml'
16
16
 
17
17
  # Class: PlatformInfo
18
- # This class reads device specific details from the yaml file - platform_info.yaml
18
+ # This class reads device specific details from platform_info.yaml
19
19
  # These details can be used to customize unit tests for a device
20
20
  class PlatformInfo
21
21
  # Default constructor for the PlatformInfo class. This class
@@ -28,17 +28,21 @@ class PlatformInfo
28
28
  # UTs are to be run
29
29
  #
30
30
  def initialize(device_name)
31
- raise "device name must be specified in PlatformInfo constructor." if device_name.nil? or device_name.empty?
31
+ if device_name.nil? || device_name.empty?
32
+ fail 'device name must be specified in PlatformInfo constructor.'
33
+ end
32
34
  @platform_info_hash = {}
33
35
 
34
36
  begin
35
- project_info_hash = YAML.load_file(File.join(File.dirname(__FILE__), "platform_info.yaml"))
36
- rescue Exception => e
37
- raise "Error - could not open platform file - platform_info.yaml"
37
+ project_info_hash = YAML.load_file(File.join(File.dirname(__FILE__),
38
+ 'platform_info.yaml'))
39
+ rescue RuntimeError
40
+ raise 'Error - could not open platform file - platform_info.yaml'
38
41
  end
39
42
 
40
43
  @platform_info_hash = project_info_hash[device_name]
41
- raise "Error - could not find #{device_name} device specific information in platform_info.yaml" if @platform_info_hash.nil?
44
+ fail "Error - could not find #{device_name} device specific information " \
45
+ 'in platform_info.yaml' if @platform_info_hash.nil?
42
46
  end
43
47
 
44
48
  # The following instance method will return the value associated with
@@ -48,10 +52,10 @@ class PlatformInfo
48
52
  # in @platform_info_hash
49
53
  #
50
54
  def get_value_from_key(key)
51
- raise "key must be specified in the method get_value_from_key" if key.nil?
55
+ fail 'key must be specified in the method get_value_from_key' if key.nil?
52
56
 
53
57
  value = @platform_info_hash[key]
54
- raise "no value exists for the key #{key}" if value.nil?
58
+ fail "no value exists for the key #{key}" if value.nil?
55
59
 
56
60
  value
57
61
  end