boris 1.0.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.md +9 -0
- data/README.md +94 -0
- data/boris.gemspec +28 -0
- data/doc/Array.html +437 -0
- data/doc/Boris.html +230 -0
- data/doc/Boris/ConnectionAlreadyActive.html +123 -0
- data/doc/Boris/ConnectionFailed.html +127 -0
- data/doc/Boris/Connector.html +794 -0
- data/doc/Boris/InvalidCredentials.html +131 -0
- data/doc/Boris/InvalidOption.html +123 -0
- data/doc/Boris/InvalidTargetName.html +123 -0
- data/doc/Boris/Lumberjack.html +466 -0
- data/doc/Boris/MissingCredentials.html +123 -0
- data/doc/Boris/NoActiveConnection.html +123 -0
- data/doc/Boris/NoProfileDetected.html +123 -0
- data/doc/Boris/Options.html +783 -0
- data/doc/Boris/Profiles.html +117 -0
- data/doc/Boris/Profiles/Linux.html +1151 -0
- data/doc/Boris/Profiles/RedHat.html +875 -0
- data/doc/Boris/Profiles/Solaris.html +1230 -0
- data/doc/Boris/Profiles/Structure.html +2050 -0
- data/doc/Boris/Profiles/UNIX.html +893 -0
- data/doc/Boris/Profiles/Windows.html +1846 -0
- data/doc/Boris/Profiles/Windows/Windows2003.html +304 -0
- data/doc/Boris/Profiles/Windows/Windows2008.html +379 -0
- data/doc/Boris/Profiles/Windows/Windows2012.html +304 -0
- data/doc/Boris/SNMPConnector.html +512 -0
- data/doc/Boris/SSHConnector.html +633 -0
- data/doc/Boris/Target.html +2002 -0
- data/doc/Boris/WMIConnector.html +1134 -0
- data/doc/BorisLogger.html +217 -0
- data/doc/Hash.html +195 -0
- data/doc/String.html +1246 -0
- data/doc/_index.html +420 -0
- data/doc/class_list.html +53 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +328 -0
- data/doc/file.README.html +183 -0
- data/doc/file_list.html +55 -0
- data/doc/frames.html +28 -0
- data/doc/index.html +183 -0
- data/doc/js/app.js +214 -0
- data/doc/js/full_list.js +173 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +1468 -0
- data/doc/top-level-namespace.html +126 -0
- data/lib/boris.rb +30 -0
- data/lib/boris/connectors.rb +47 -0
- data/lib/boris/connectors/snmp.rb +56 -0
- data/lib/boris/connectors/ssh.rb +110 -0
- data/lib/boris/connectors/wmi.rb +186 -0
- data/lib/boris/errors.rb +17 -0
- data/lib/boris/helpers/array.rb +63 -0
- data/lib/boris/helpers/constants.rb +20 -0
- data/lib/boris/helpers/hash.rb +8 -0
- data/lib/boris/helpers/scrubber.rb +51 -0
- data/lib/boris/helpers/string.rb +130 -0
- data/lib/boris/lumberjack.rb +47 -0
- data/lib/boris/options.rb +86 -0
- data/lib/boris/profiles/linux/redhat.rb +77 -0
- data/lib/boris/profiles/linux_core.rb +216 -0
- data/lib/boris/profiles/unix/solaris.rb +307 -0
- data/lib/boris/profiles/unix_core.rb +85 -0
- data/lib/boris/profiles/windows/windows2003.rb +15 -0
- data/lib/boris/profiles/windows/windows2008.rb +23 -0
- data/lib/boris/profiles/windows/windows2012.rb +15 -0
- data/lib/boris/profiles/windows_core.rb +530 -0
- data/lib/boris/structure.rb +167 -0
- data/lib/boris/target.rb +340 -0
- data/test/connector_tests/test_snmp.rb +35 -0
- data/test/connector_tests/test_ssh.rb +51 -0
- data/test/connector_tests/test_wmi.rb +129 -0
- data/test/helper_tests/test_array.rb +25 -0
- data/test/helper_tests/test_hash.rb +10 -0
- data/test/helper_tests/test_string.rb +136 -0
- data/test/profile_tests/test_core_skeleton +107 -0
- data/test/profile_tests/test_linux_core.rb +331 -0
- data/test/profile_tests/test_redhat.rb +134 -0
- data/test/profile_tests/test_solaris.rb +523 -0
- data/test/profile_tests/test_unix_core.rb +117 -0
- data/test/profile_tests/test_windows.rb +536 -0
- data/test/setup_tests.rb +14 -0
- data/test/test_all.rb +8 -0
- data/test/test_options.rb +44 -0
- data/test/test_structure.rb +136 -0
- data/test/test_target.rb +146 -0
- metadata +241 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'setup_tests'
|
3
|
+
|
4
|
+
class SNMPTest < Test::Unit::TestCase
|
5
|
+
context 'a target listening for SNMP requests' do
|
6
|
+
setup do
|
7
|
+
@target_name = '0.0.0.0'
|
8
|
+
@cred = {:user=>'someuser', :password=>'somepass'}
|
9
|
+
@connector = SNMPConnector.new(@target_name, @cred, Options.new)
|
10
|
+
|
11
|
+
@transport = mock('SNMP')
|
12
|
+
|
13
|
+
SNMP::Manager.stubs(:new).returns(@transport)
|
14
|
+
|
15
|
+
@expected_value = {:name=>'sysDescr.0', :value=>'string'}
|
16
|
+
|
17
|
+
@transport.stubs(:walk).with('sysDescr').yields([OpenStruct.new(@expected_value)])
|
18
|
+
end
|
19
|
+
|
20
|
+
should 'allow us to connect to it' do
|
21
|
+
assert_kind_of(SNMPConnector, @connector.establish_connection)
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'to which we have already connected' do
|
25
|
+
setup do
|
26
|
+
@connector.establish_connection
|
27
|
+
end
|
28
|
+
|
29
|
+
should 'allow us to perform a simple SNMP GET' do
|
30
|
+
assert_equal(@expected_value, @connector.value_at('sysDescr'))
|
31
|
+
assert_equal([@expected_value], @connector.values_at('sysDescr'))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'setup_tests'
|
2
|
+
|
3
|
+
class SSHTest < Test::Unit::TestCase
|
4
|
+
context 'a target listening for SSH connections' do
|
5
|
+
setup do
|
6
|
+
@target_name = '0.0.0.0'
|
7
|
+
@cred = {:user=>'someuser', :password=>'somepass'}
|
8
|
+
@connector = SSHConnector.new(@target_name, @cred, Options.new)
|
9
|
+
|
10
|
+
@transport = mock('SSHConnector')
|
11
|
+
|
12
|
+
Net::SSH.stubs(:start).returns(@transport)
|
13
|
+
|
14
|
+
@expected_data = 'SunOS'
|
15
|
+
end
|
16
|
+
|
17
|
+
should 'allow us to connect to it via SSH' do
|
18
|
+
assert_kind_of(SSHConnector, @connector.establish_connection)
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'to which we have already connected' do
|
22
|
+
setup do
|
23
|
+
@connector.establish_connection
|
24
|
+
|
25
|
+
@channel = mock('channel')
|
26
|
+
@transport.stubs(:open_channel).returns(@channel).then.yields(@channel)
|
27
|
+
@channel.stubs(:on_data).yields(@channel, @expected_data)
|
28
|
+
@channel.stubs(:on_extended_data).returns(@channel)
|
29
|
+
@channel.stubs(:on_close).returns
|
30
|
+
@channel.expects(:exec).at_least_once
|
31
|
+
@channel.expects(:wait).at_least_once
|
32
|
+
end
|
33
|
+
|
34
|
+
should 'allow us to retrieve data' do
|
35
|
+
assert_equal(@expected_data, @connector.value_at('uname'))
|
36
|
+
assert_equal([@expected_data], @connector.values_at('uname'))
|
37
|
+
end
|
38
|
+
|
39
|
+
# should 'reconnect if a channel was closed prematurely' do
|
40
|
+
# @connector.expects(:establish_connection).once #more
|
41
|
+
# @channel.stubs(:on_close).yields(@channel)
|
42
|
+
# assert_equal(@expected_data, @connector.value_at('uname'))
|
43
|
+
# end
|
44
|
+
|
45
|
+
should 'request pty if needed' do
|
46
|
+
@channel.expects(:request_pty).once
|
47
|
+
assert_equal(@expected_data, @connector.value_at('uname', true))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'setup_tests'
|
2
|
+
|
3
|
+
class WMITest < Test::Unit::TestCase
|
4
|
+
context 'a target listening for WMI connections' do
|
5
|
+
setup do
|
6
|
+
skip("test relies on WIN32OLE")
|
7
|
+
|
8
|
+
@target_name = '0.0.0.0'
|
9
|
+
@cred = {:user=>'someuser', :password=>'somepass'}
|
10
|
+
@connector = WMIConnector.new(@target_name, @cred, Options.new)
|
11
|
+
|
12
|
+
@win32ole = mock('WIN32OLE')
|
13
|
+
|
14
|
+
WIN32OLE.stubs(:new).with('WbemScripting.SWbemLocator').returns(@win32ole)
|
15
|
+
|
16
|
+
['root\cimv2', 'root\WMI', 'root\default'].each do |namespace|
|
17
|
+
@win32ole.stubs(:ConnectServer).with(@target_name, namespace, @cred[:user], @cred[:password], nil, nil, 128).returns(@win32ole)
|
18
|
+
end
|
19
|
+
@win32ole.stubs(:Get).with('StdRegProv').returns(@win32ole)
|
20
|
+
|
21
|
+
@connector.establish_connection
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'to which we have already connected' do
|
25
|
+
setup do
|
26
|
+
@row = mock('row')
|
27
|
+
|
28
|
+
@property = mock('property')
|
29
|
+
|
30
|
+
@win32ole.stubs(:ExecQuery).returns([@row])
|
31
|
+
@row.stubs(:Properties_).returns([@property])
|
32
|
+
end
|
33
|
+
|
34
|
+
should 'allow us to get property values with a wmi query from the cimv2 namespace via #execute' do
|
35
|
+
@property.stubs(:Name).returns('Name')
|
36
|
+
@property.stubs(:Value).returns('Windows Server 2008')
|
37
|
+
assert_equal({:name=>'Windows Server 2008'}, @connector.value_at('SELECT Name FROM Win32_OperatingSystem'))
|
38
|
+
end
|
39
|
+
|
40
|
+
should 'allow us to get property values with a wmi query from the root wmi namespace via #execute' do
|
41
|
+
@property.stubs(:Name).returns('InstanceName')
|
42
|
+
@property.stubs(:Value).returns('VMware Accelerated AMD PCNet Adapter')
|
43
|
+
assert_equal([:instancename=>'VMware Accelerated AMD PCNet Adapter'], @connector.values_at('SELECT * FROM MSNdis_HardwareStatus', :root_wmi))
|
44
|
+
end
|
45
|
+
|
46
|
+
should 'allow us to get attribute values from a wmi query via #execute' do
|
47
|
+
attribute = mock('attribute')
|
48
|
+
@row.stubs(:Attributes).returns(attribute)
|
49
|
+
attribute.stubs(:Properties_).returns([@property])
|
50
|
+
|
51
|
+
@property.stubs(:Name).returns('PortType')
|
52
|
+
@property.stubs(:Value).returns(1)
|
53
|
+
|
54
|
+
assert_equal([:porttype=>1], @connector.values_at('SELECT * FROM MSFC_FibrePortHBAAttributes', :root_wmi))
|
55
|
+
end
|
56
|
+
|
57
|
+
should 'error if an invalid limit for query is specified' do
|
58
|
+
assert_raise(ArgumentError) {@connector.values_at('select * from something', nil, '5')}
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'to which we want to connect via the registry namespace' do
|
63
|
+
setup do
|
64
|
+
#@target.connect
|
65
|
+
|
66
|
+
win32ole = mock('win32ole')
|
67
|
+
|
68
|
+
@registry = @connector.registry = win32ole
|
69
|
+
@registry.stubs(:Methods_).returns(win32ole)
|
70
|
+
@registry.stubs(:inParameters).returns(win32ole)
|
71
|
+
@registry.stubs(:SpawnInstance_).returns(win32ole)
|
72
|
+
@registry.stubs(:ExecMethod_).returns(win32ole)
|
73
|
+
@registry.stubs(:hDefKey=)
|
74
|
+
@registry.stubs(:sSubKeyName=)
|
75
|
+
end
|
76
|
+
|
77
|
+
should 'allow us to see if we have permissions to read certain registry keys via #has_access_for' do
|
78
|
+
@registry.stubs(:uRequired=)
|
79
|
+
@registry.stubs(:bGranted).returns(true)
|
80
|
+
|
81
|
+
assert(@connector.has_access_for('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT'))
|
82
|
+
end
|
83
|
+
|
84
|
+
should 'allow us to access registry keys via #subkeys_at' do
|
85
|
+
@connector.stubs(:has_access_for).returns(true)
|
86
|
+
|
87
|
+
@registry.stubs(:sNames).returns(['CurrentVersion'])
|
88
|
+
|
89
|
+
expected_data = ['HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion']
|
90
|
+
|
91
|
+
assert_equal(expected_data, @connector.registry_subkeys_at('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT'))
|
92
|
+
end
|
93
|
+
|
94
|
+
context 'and read values' do
|
95
|
+
setup do
|
96
|
+
@key_path = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
|
97
|
+
@connector.stubs(:has_access_for).returns(true)
|
98
|
+
@registry.stubs(:sValueName=)
|
99
|
+
@expected_data = {}
|
100
|
+
end
|
101
|
+
|
102
|
+
should 'return an empty hash from #values_at when the path does not exist' do
|
103
|
+
@registry.stubs(:sNames).returns([])
|
104
|
+
|
105
|
+
@expected_data[:key_path] = 'HKEY_LOCAL_MACHINE\i\dont\exist'
|
106
|
+
assert_equal({}, @connector.registry_values_at(@expected_data[:key_path]))
|
107
|
+
end
|
108
|
+
|
109
|
+
should 'allow us to access string values from the registry via #values_at' do
|
110
|
+
@registry.stubs(:sNames).returns(['ProductName'])
|
111
|
+
@registry.stubs(:sValue).returns('Microsoft Windows Server 2008 R2')
|
112
|
+
@registry.stubs(:uValue).returns(nil)
|
113
|
+
|
114
|
+
@expected_data = {:productname=>'Microsoft Windows Server 2008 R2'}
|
115
|
+
assert_equal(@expected_data, @connector.registry_values_at(@key_path))
|
116
|
+
end
|
117
|
+
|
118
|
+
should 'allow us to access other values from the registry via #values_at' do
|
119
|
+
@registry.stubs(:sNames).returns(['InstallDate'])
|
120
|
+
@registry.stubs(:sValue).returns(nil)
|
121
|
+
@registry.stubs(:uValue).returns(123456)
|
122
|
+
|
123
|
+
@expected_data = {:installdate=>123456}
|
124
|
+
assert_equal(@expected_data, @connector.registry_values_at(@key_path))
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'setup_tests'
|
2
|
+
|
3
|
+
class ArrayTest < Test::Unit::TestCase
|
4
|
+
context 'the Array class' do
|
5
|
+
should 'return the product key for a microsoft product via #to_ms_product_key' do
|
6
|
+
product_key_binary = [164, 1, 1, 0, 3, 0, 0, 0, 53, 53, 48, 52, 49, 45, 49, 56, 54, 45, 48, 49, 51, 51, 48,
|
7
|
+
51, 53, 45, 55, 53, 55, 54, 51, 0, 151, 0, 0, 0, 88, 49, 52, 45, 50, 51, 56, 57, 54, 0, 0, 0, 0, 0, 0, 0,
|
8
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
9
|
+
|
10
|
+
assert_equal('BBBBB-BBBBB-BBBBB-BBBBB-BBBBB', product_key_binary.to_ms_product_key)
|
11
|
+
end
|
12
|
+
|
13
|
+
should 'return each item of an array as a nil-values key-value pair via #to_nil_hash' do
|
14
|
+
assert_equal({:value_one=>nil, :value_two=>nil}, ['value_one', 'value_two'].to_nil_hash)
|
15
|
+
end
|
16
|
+
|
17
|
+
should 'return the wwn of an array via #to_wwn' do
|
18
|
+
assert_equal('00000000aaaaaaaa', [0, 0, 0, 0, 170, 170, 170, 170].to_wwn)
|
19
|
+
end
|
20
|
+
|
21
|
+
should 'recursively strip the string values within an array via #strip_string_values_in_array' do
|
22
|
+
assert_equal([1, 'a', 'c', ['x', 'y']], [1, 'a ', ' c ', [' x ', ' y ']].strip_string_values_in_array)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'setup_tests'
|
2
|
+
|
3
|
+
class HashTest < Test::Unit::TestCase
|
4
|
+
context 'the Hash class' do
|
5
|
+
should 'recursivley strip the string values inside of a Hash via #strip_string_values_in_hash' do
|
6
|
+
assert_equal({:someval=>'strip this', :somearray=>['this too!']},
|
7
|
+
{:someval=>' strip this ', :somearray=>[' this too!']}.strip_string_values_in_hash)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require 'setup_tests'
|
2
|
+
|
3
|
+
class StringTest < Test::Unit::TestCase
|
4
|
+
context 'the String class' do
|
5
|
+
should 'return the last chunk of text after a colon via #after_colon' do
|
6
|
+
assert_equal('C', 'AB:C'.after_colon)
|
7
|
+
assert_equal('C', 'A:B:C'.after_colon)
|
8
|
+
assert_equal(nil, 'ABC'.after_colon)
|
9
|
+
end
|
10
|
+
|
11
|
+
should 'return the last chunk of text after a period via #after_period' do
|
12
|
+
assert_equal('C', 'AB.C'.after_period)
|
13
|
+
assert_equal('C', 'A.B.C'.after_period)
|
14
|
+
assert_equal(nil, 'ABC'.after_period)
|
15
|
+
end
|
16
|
+
|
17
|
+
should 'return the last chunk of text after a pipe via #after_pipe' do
|
18
|
+
assert_equal('C', 'AB|C'.after_pipe)
|
19
|
+
assert_equal('C', 'A|B|C'.after_pipe)
|
20
|
+
assert_equal(nil, 'ABC'.after_pipe)
|
21
|
+
end
|
22
|
+
|
23
|
+
should 'return the last chunk of text after a slash via #after_slash' do
|
24
|
+
assert_equal('C', 'A/B/C'.after_slash)
|
25
|
+
assert_equal('C', 'A\B\C'.after_slash)
|
26
|
+
assert_equal(nil, 'ABCD'.after_slash)
|
27
|
+
end
|
28
|
+
|
29
|
+
should 'return the first chunk of text before a colon via #before_colon' do
|
30
|
+
assert_equal('AB', 'AB:C'.before_colon)
|
31
|
+
assert_equal('A', 'A:B:C'.before_colon)
|
32
|
+
assert_equal(nil, 'ABC'.before_colon)
|
33
|
+
end
|
34
|
+
|
35
|
+
should 'return the first chunk of text before a period via #before_period' do
|
36
|
+
assert_equal('AB', 'AB.C'.before_period)
|
37
|
+
assert_equal('A', 'A.B.C'.before_period)
|
38
|
+
assert_equal(nil, 'ABC'.before_period)
|
39
|
+
end
|
40
|
+
|
41
|
+
should 'return the first chunk of text after a pipe via #before_pipe' do
|
42
|
+
assert_equal('AB', 'AB|C'.before_pipe)
|
43
|
+
assert_equal('A', 'A|B|C'.before_pipe)
|
44
|
+
assert_equal(nil, 'ABC'.before_pipe)
|
45
|
+
end
|
46
|
+
|
47
|
+
should 'return the first chunk of text after a slash via #before_slash' do
|
48
|
+
assert_equal('A', 'A/B/C'.before_slash)
|
49
|
+
assert_equal('A', 'A\B\C'.before_slash)
|
50
|
+
assert_equal(nil, 'ABCD'.before_slash)
|
51
|
+
end
|
52
|
+
|
53
|
+
should 'return the value between a pair of parenthesis via #between_parenthesis' do
|
54
|
+
assert_equal('a test string', 'this is (a test string)'.between_parenthesis)
|
55
|
+
assert_equal('', 'this is a test () string'.between_parenthesis)
|
56
|
+
assert_equal(nil, 'this is a test'.between_parenthesis)
|
57
|
+
end
|
58
|
+
|
59
|
+
should 'return the proper name of a model via #format_model' do
|
60
|
+
assert_equal('Product X 1000', 'Product X 1000 server'.format_model)
|
61
|
+
assert_equal('SunBlade 100', 'sun blade 100'.format_model)
|
62
|
+
assert_equal('SunFire 100', 'sun fire 100'.format_model)
|
63
|
+
assert_equal('SPARC Enterprise T1000', 'T1000'.format_model)
|
64
|
+
assert_equal('BIG-IP 1000', 'bigip 1000'.format_model)
|
65
|
+
assert_equal('Catalyst 1000', 'WSC1000'.format_model)
|
66
|
+
assert_equal('Catalyst 1000-E', 'WSC1000E'.format_model)
|
67
|
+
assert_equal('Catalyst 1000-E', 'WSC1000-E'.format_model)
|
68
|
+
assert_equal('System x1000 M3', 'IBM System x1000 M3'.format_model)
|
69
|
+
assert_equal('System x1000 M3', 'IBM System x1000 M3 -[123456]-'.format_model)
|
70
|
+
end
|
71
|
+
|
72
|
+
should 'return the proper serial number via #format_serial' do
|
73
|
+
assert_equal('ABC123', 'abc123'.format_serial)
|
74
|
+
assert_equal(nil, 'None'.format_serial)
|
75
|
+
end
|
76
|
+
|
77
|
+
should 'return the proper name of a vendor via #format_vendor' do
|
78
|
+
assert_equal(VENDOR_AMD, 'amd'.format_vendor)
|
79
|
+
assert_equal(VENDOR_AMD, 'authenticamd'.format_vendor)
|
80
|
+
assert_equal(VENDOR_BROCADE, 'brocade communications'.format_vendor)
|
81
|
+
assert_equal(VENDOR_CITRIX, 'citrix'.format_vendor)
|
82
|
+
assert_equal(VENDOR_DELL, 'dell'.format_vendor)
|
83
|
+
assert_equal(VENDOR_EMULEX, 'emulex'.format_vendor)
|
84
|
+
assert_equal(VENDOR_HP, 'compaq'.format_vendor)
|
85
|
+
assert_equal(VENDOR_HP, 'hp'.format_vendor)
|
86
|
+
assert_equal(VENDOR_HP, 'hp inc'.format_vendor)
|
87
|
+
assert_equal(VENDOR_HP, 'hewlett packard'.format_vendor)
|
88
|
+
assert_equal(VENDOR_IBM, 'ibm'.format_vendor)
|
89
|
+
assert_equal(VENDOR_INTEL, 'genuineintel'.format_vendor)
|
90
|
+
assert_equal(VENDOR_INTEL, 'intel corp'.format_vendor)
|
91
|
+
assert_equal(VENDOR_MICROSOFT, 'microsoft'.format_vendor)
|
92
|
+
assert_equal(VENDOR_ORACLE, 'oracle'.format_vendor)
|
93
|
+
assert_equal(VENDOR_ORACLE, 'sun'.format_vendor)
|
94
|
+
assert_equal(VENDOR_ORACLE, 'sunw'.format_vendor)
|
95
|
+
assert_equal(VENDOR_ORACLE, 'sun microsystems'.format_vendor)
|
96
|
+
assert_equal(VENDOR_QLOGIC, 'qlogic'.format_vendor)
|
97
|
+
assert_equal(VENDOR_REDHAT, 'redhat'.format_vendor)
|
98
|
+
assert_equal(VENDOR_REDHAT, 'red hat'.format_vendor)
|
99
|
+
assert_equal(VENDOR_SUSE, 'suse linux'.format_vendor)
|
100
|
+
assert_equal(VENDOR_VMWARE, 'vmware'.format_vendor)
|
101
|
+
|
102
|
+
assert_equal('Some other vendor', 'Some other vendor'.format_vendor)
|
103
|
+
assert_equal(nil, ''.format_vendor)
|
104
|
+
end
|
105
|
+
|
106
|
+
should 'return the ip-formatted value from a string of hex values via #hex_to_address' do
|
107
|
+
assert_equal('255.255.255.0', 'ffffff00'.hex_to_address)
|
108
|
+
end
|
109
|
+
|
110
|
+
should 'remove the architecture from a string via #remove_arch' do
|
111
|
+
assert_equal('Microsoft SQL Server 2008', 'Microsoft SQL Server 2008 32 bit'.remove_arch)
|
112
|
+
assert_equal('Microsoft SQL Server 2008', 'Microsoft SQL Server 2008 32-bit'.remove_arch)
|
113
|
+
assert_equal('Microsoft SQL Server 2008', 'Microsoft SQL Server 2008 (32-bit)'.remove_arch)
|
114
|
+
assert_equal('Microsoft SQL Server 2008', 'Microsoft SQL Server 2008 (64-bit)'.remove_arch)
|
115
|
+
assert_equal('Microsoft SQL Server 2008', 'Microsoft SQL Server 2008'.remove_arch)
|
116
|
+
|
117
|
+
test_string = 'Microsoft SQL Server 2008 32 bit'
|
118
|
+
test_string.remove_arch!
|
119
|
+
assert_equal('Microsoft SQL Server 2008', test_string)
|
120
|
+
end
|
121
|
+
|
122
|
+
should 'remove unnecessary characters from a string via #string_clean' do
|
123
|
+
assert_equal('this has an invalid character', "this has an invalid\u00A0 character".string_clean)
|
124
|
+
assert_equal('this should be stripped', ' this should be stripped '.string_clean)
|
125
|
+
assert_equal('this should be stripped', ' this should be stripped '.string_clean)
|
126
|
+
assert_equal('registered', 'registered(r)'.string_clean)
|
127
|
+
end
|
128
|
+
|
129
|
+
should 'return the value(s) found between at least one pair of single or double quotes via #within_quotes' do
|
130
|
+
assert_equal(['C'], 'AB"C"'.within_quotes)
|
131
|
+
assert_equal(['A', 'C'], '"A" B "C"'.within_quotes)
|
132
|
+
assert_equal(['A', 'C'], "'A' B 'C'".within_quotes)
|
133
|
+
assert_equal(nil, 'ABC'.within_quotes)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'setup_tests'
|
2
|
+
|
3
|
+
class WindowsCoreTest < Test::Unit::TestCase
|
4
|
+
context 'a Windows target' do
|
5
|
+
setup do
|
6
|
+
@target_name = '0.0.0.0'
|
7
|
+
@target = Target.new(@target_name)
|
8
|
+
@connector = @target.connector = instance_of(WMIConnector)
|
9
|
+
|
10
|
+
@target.detect_profile
|
11
|
+
end
|
12
|
+
|
13
|
+
should 'detect when a target should use the Win2008 profile' do
|
14
|
+
assert_equal(Profiles::Win2008, @target.target_profile)
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'being scanned' do
|
18
|
+
setup do
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'for file system information' do
|
22
|
+
setup do
|
23
|
+
end
|
24
|
+
|
25
|
+
should 'return file system information via #get_file_systems' do
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'for hardware information' do
|
30
|
+
setup do
|
31
|
+
end
|
32
|
+
|
33
|
+
should 'return hardware information via #get_hardware' do
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'for hosted shares' do
|
38
|
+
setup do
|
39
|
+
end
|
40
|
+
|
41
|
+
should 'return hosted share information via #get_hosted_shares' do
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'for installed applications' do
|
46
|
+
setup do
|
47
|
+
end
|
48
|
+
|
49
|
+
should 'return installed applications via #get_installed_applications' do
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'for installed patches' do
|
54
|
+
should 'parse out the patches from the registry location for applications' do
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'for installed services' do
|
59
|
+
setup do
|
60
|
+
end
|
61
|
+
|
62
|
+
should 'return service information via #get_installed_services' do
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'for local users and groups' do
|
67
|
+
should 'allow us to detect the user name of an account from its guid via #get_username' do
|
68
|
+
end
|
69
|
+
|
70
|
+
should 'return local user groups and accounts via #get_local_user_groups if the server is not a domain controller' do
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context 'for network identification' do
|
75
|
+
setup do
|
76
|
+
end
|
77
|
+
|
78
|
+
should 'return the network identification via #get_network_id' do
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'for network interfaces' do
|
83
|
+
setup do
|
84
|
+
end
|
85
|
+
|
86
|
+
should 'return ethernet interface information via #get_network_interfaces' do
|
87
|
+
end
|
88
|
+
|
89
|
+
should 'return fibre channel interface information via #get_network_interfaces' do
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'for operating system information' do
|
94
|
+
setup do
|
95
|
+
end
|
96
|
+
|
97
|
+
should 'return operating system information via #get_operating_system' do
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
context 'for system roles' do
|
102
|
+
should 'return a list of system roles via #get_system_roles' do
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|