foreman_discovery 5.0.0 → 5.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/api/v2/discovered_hosts_controller.rb +41 -51
- data/app/controllers/concerns/foreman/controller/discovered_extensions.rb +20 -23
- data/app/controllers/discovered_hosts_controller.rb +50 -46
- data/app/helpers/concerns/foreman_discovery/settings_helper_extensions.rb +34 -0
- data/app/helpers/discovery_rules_helper.rb +5 -6
- data/app/mailers/discovered_mailer.rb +19 -0
- data/app/models/discovery_rule.rb +3 -3
- data/app/models/host/discovered.rb +33 -11
- data/app/models/host/managed_extensions.rb +10 -0
- data/app/models/hostgroup_extensions.rb +1 -1
- data/app/models/setting/discovered.rb +17 -11
- data/app/services/foreman_discovery/fact_parser.rb +16 -0
- data/app/services/foreman_discovery/host_converter.rb +0 -4
- data/app/services/foreman_discovery/node_api/power.rb +3 -3
- data/app/views/discovered_hosts/_discovered_host.html.erb +4 -2
- data/app/views/discovered_hosts/_discovered_hosts_list.html.erb +1 -1
- data/app/views/discovered_mailer/_discovered_host.html.erb +10 -0
- data/app/views/discovered_mailer/discovered_summary.html.erb +35 -0
- data/app/views/discovered_mailer/discovered_summary.text.erb +24 -0
- data/config/routes.rb +3 -3
- data/db/seeds.d/70_discovery_mail_notification.rb +9 -0
- data/lib/foreman_discovery/engine.rb +12 -9
- data/lib/foreman_discovery/version.rb +1 -1
- data/locale/ca/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ca/foreman_discovery.edit.po +780 -0
- data/locale/ca/foreman_discovery.po +358 -261
- data/locale/de/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/de/foreman_discovery.edit.po +774 -0
- data/locale/de/foreman_discovery.po +418 -311
- data/locale/en_GB/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/en_GB/foreman_discovery.edit.po +779 -0
- data/locale/en_GB/foreman_discovery.po +423 -313
- data/locale/es/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/es/foreman_discovery.edit.po +781 -0
- data/locale/es/foreman_discovery.po +425 -313
- data/locale/foreman_discovery.pot +496 -159
- data/locale/fr/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/fr/foreman_discovery.edit.po +778 -0
- data/locale/fr/foreman_discovery.po +458 -322
- data/locale/gl/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/gl/foreman_discovery.edit.po +757 -0
- data/locale/gl/foreman_discovery.po +306 -215
- data/locale/it/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/it/foreman_discovery.edit.po +771 -0
- data/locale/it/foreman_discovery.po +411 -301
- data/locale/ja/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ja/foreman_discovery.edit.po +770 -0
- data/locale/ja/foreman_discovery.po +395 -300
- data/locale/ko/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ko/foreman_discovery.edit.po +768 -0
- data/locale/ko/foreman_discovery.po +393 -299
- data/locale/pt_BR/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/pt_BR/foreman_discovery.edit.po +780 -0
- data/locale/pt_BR/foreman_discovery.po +438 -309
- data/locale/ru/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ru/foreman_discovery.edit.po +775 -0
- data/locale/ru/foreman_discovery.po +413 -308
- data/locale/sv_SE/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/sv_SE/foreman_discovery.edit.po +766 -0
- data/locale/sv_SE/foreman_discovery.po +321 -232
- data/locale/zh_CN/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/zh_CN/foreman_discovery.edit.po +769 -0
- data/locale/zh_CN/foreman_discovery.po +393 -302
- data/locale/zh_TW/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/zh_TW/foreman_discovery.edit.po +769 -0
- data/locale/zh_TW/foreman_discovery.po +395 -302
- data/test/functional/api/v2/discovered_hosts_controller_test.rb +8 -0
- data/test/functional/api/v2/discovery_rules_controller_test.rb +9 -0
- data/test/functional/discovered_hosts_controller_test.rb +26 -17
- data/test/functional/discovery_rules_controller_test.rb +9 -8
- data/test/test_helper.rb +0 -4
- data/test/test_helper_discovery.rb +24 -0
- data/test/unit/discovered_extensions_test.rb +31 -0
- data/test/unit/discovered_mailer_test.rb +44 -0
- data/test/unit/discovery_attribute_set_test.rb +12 -0
- data/test/unit/discovery_rule_test.rb +20 -0
- data/test/unit/{puppet_fact_parser_extensions_test.rb → fact_parser_test.rb} +3 -16
- data/test/unit/host_discovered_test.rb +56 -11
- metadata +29 -5
- data/app/lib/puppet_fact_parser_extensions.rb +0 -29
@@ -29,6 +29,14 @@ class Api::V2::DiscoveredHostsControllerTest < ActionController::TestCase
|
|
29
29
|
:name => 'discovery_reboot',
|
30
30
|
:value => true,
|
31
31
|
:category => 'Setting::Discovered')
|
32
|
+
FactoryGirl.create(:setting,
|
33
|
+
:name => 'discovery_hostname',
|
34
|
+
:value => 'discovery_bootif',
|
35
|
+
:category => 'Setting::Discovered')
|
36
|
+
FactoryGirl.create(:setting,
|
37
|
+
:name => 'discovery_prefix',
|
38
|
+
:value => 'mac',
|
39
|
+
:category => 'Setting::Discovered')
|
32
40
|
::ForemanDiscovery::NodeAPI::PowerService.any_instance.stubs(:reboot).returns(true)
|
33
41
|
end
|
34
42
|
|
@@ -4,6 +4,15 @@ class Api::V2::DiscoveryRulesControllerTest < ActionController::TestCase
|
|
4
4
|
|
5
5
|
setup do
|
6
6
|
User.current = User.find_by_login "admin"
|
7
|
+
|
8
|
+
FactoryGirl.create(:setting,
|
9
|
+
:name => 'discovery_hostname',
|
10
|
+
:value => 'discovery_bootif',
|
11
|
+
:category => 'Setting::Discovered')
|
12
|
+
FactoryGirl.create(:setting,
|
13
|
+
:name => 'discovery_prefix',
|
14
|
+
:value => 'mac',
|
15
|
+
:category => 'Setting::Discovered')
|
7
16
|
end
|
8
17
|
|
9
18
|
test "should get index" do
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'test_plugin_helper'
|
2
|
+
require 'test_helper_discovery'
|
2
3
|
|
3
4
|
class DiscoveredHostsControllerTest < ActionController::TestCase
|
4
5
|
setup :initialize_host
|
@@ -18,11 +19,19 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
18
19
|
:name => 'discovery_reboot',
|
19
20
|
:value => true,
|
20
21
|
:category => 'Setting::Discovered')
|
22
|
+
FactoryGirl.create(:setting,
|
23
|
+
:name => 'discovery_hostname',
|
24
|
+
:value => 'discovery_bootif',
|
25
|
+
:category => 'Setting::Discovered')
|
26
|
+
FactoryGirl.create(:setting,
|
27
|
+
:name => 'discovery_prefix',
|
28
|
+
:value => 'mac',
|
29
|
+
:category => 'Setting::Discovered')
|
21
30
|
::ForemanDiscovery::NodeAPI::PowerService.any_instance.stubs(:reboot).returns(true)
|
22
31
|
end
|
23
32
|
|
24
33
|
def test_index
|
25
|
-
get :index, {},
|
34
|
+
get :index, {}, set_session_user_default_reader
|
26
35
|
assert_response :success
|
27
36
|
end
|
28
37
|
|
@@ -33,14 +42,14 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
33
42
|
:category => 'Setting::Discovered')
|
34
43
|
facts = @facts.merge({"bios_vendor" => "QEMU"})
|
35
44
|
Host::Discovered.import_host_and_facts(facts).first
|
36
|
-
get :index, {},
|
45
|
+
get :index, {}, set_session_user_default_reader
|
37
46
|
assert_select "td", /QEMU/
|
38
47
|
assert_response :success
|
39
48
|
end
|
40
49
|
|
41
50
|
def test_edit_form_elements
|
42
51
|
host = Host::Discovered.import_host_and_facts(@facts).first
|
43
|
-
get :edit, {:id => host.id},
|
52
|
+
get :edit, {:id => host.id}, set_session_user_default_manager
|
44
53
|
assert_select "select" do |elements|
|
45
54
|
elements.each do |element|
|
46
55
|
assert_match(/^host_/, element.attributes['id'])
|
@@ -51,9 +60,7 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
51
60
|
|
52
61
|
def test_edit_form_attributes
|
53
62
|
host = Host::Discovered.import_host_and_facts(@facts).first
|
54
|
-
|
55
|
-
get :edit, {:id => host.id}, set_session_user
|
56
|
-
end
|
63
|
+
get :edit, {:id => host.id}, set_session_user_default_reader
|
57
64
|
assert_not_nil host.cpu_count
|
58
65
|
end
|
59
66
|
|
@@ -67,7 +74,7 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
67
74
|
@request.env["HTTP_REFERER"] = discovered_hosts_url
|
68
75
|
host = Host::Discovered.import_host_and_facts(@facts).first
|
69
76
|
::ForemanDiscovery::NodeAPI::PowerService.any_instance.expects(:reboot).returns(true)
|
70
|
-
post "reboot", { :id => host.id },
|
77
|
+
post "reboot", { :id => host.id }, set_session_user_default_manager
|
71
78
|
assert_redirected_to discovered_hosts_url
|
72
79
|
assert_nil flash[:error]
|
73
80
|
assert_equal "Rebooting host #{host.name}", flash[:notice]
|
@@ -80,7 +87,9 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
80
87
|
Host::Discovered::any_instance.stubs(:proxied?).returns(false)
|
81
88
|
Host::Discovered::any_instance.stubs(:proxy_url).returns("http://1.2.3.4:8443")
|
82
89
|
::ForemanDiscovery::NodeAPI::PowerLegacyDirectService.any_instance.expects(:reboot).returns(true)
|
83
|
-
|
90
|
+
ActiveSupport::Deprecation.silence do
|
91
|
+
post "reboot", { :id => host.id }, set_session_user
|
92
|
+
end
|
84
93
|
assert_redirected_to discovered_hosts_url
|
85
94
|
assert_nil flash[:error]
|
86
95
|
assert_equal "Rebooting host #{host.name}", flash[:notice]
|
@@ -90,7 +99,7 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
90
99
|
@request.env["HTTP_REFERER"] = discovered_hosts_url
|
91
100
|
host = Host::Discovered.import_host_and_facts(@facts).first
|
92
101
|
::ForemanDiscovery::NodeAPI::PowerService.any_instance.expects(:reboot).returns(false)
|
93
|
-
post "reboot", { :id => host.id },
|
102
|
+
post "reboot", { :id => host.id }, set_session_user_default_manager
|
94
103
|
assert_redirected_to discovered_hosts_url
|
95
104
|
assert_equal "Failed to reboot host #{host.name}", flash[:error]
|
96
105
|
end
|
@@ -99,7 +108,7 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
99
108
|
@request.env["HTTP_REFERER"] = discovered_hosts_url
|
100
109
|
host = Host::Discovered.import_host_and_facts(@facts).first
|
101
110
|
::ForemanDiscovery::NodeAPI::PowerService.any_instance.expects(:reboot).raises("request failed")
|
102
|
-
post "reboot", { :id => host.id },
|
111
|
+
post "reboot", { :id => host.id }, set_session_user_default_manager
|
103
112
|
assert_redirected_to discovered_hosts_url
|
104
113
|
assert_match(/ERF50-4973/, flash[:error])
|
105
114
|
end
|
@@ -109,7 +118,7 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
109
118
|
facts = @facts.merge({"somefact" => "abc"})
|
110
119
|
host = Host::Discovered.import_host_and_facts(facts).first
|
111
120
|
FactoryGirl.create(:discovery_rule, :priority => 1, :search => "facts.somefact = abc", :hostgroup => hostgroups(:common))
|
112
|
-
post :auto_provision, { :id => host.id },
|
121
|
+
post :auto_provision, { :id => host.id }, set_session_user_default_manager
|
113
122
|
assert_response :redirect
|
114
123
|
assert_nil flash[:error]
|
115
124
|
end
|
@@ -118,7 +127,7 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
118
127
|
disable_orchestration
|
119
128
|
facts = @facts.merge({"somefact" => "abc"})
|
120
129
|
host = Host::Discovered.import_host_and_facts(facts).first
|
121
|
-
post :auto_provision, { :id => host.id },
|
130
|
+
post :auto_provision, { :id => host.id }, set_session_user_default_manager
|
122
131
|
assert_response :redirect
|
123
132
|
assert_nil flash[:error]
|
124
133
|
end
|
@@ -128,7 +137,7 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
128
137
|
facts = @facts.merge({"somefact" => "abc"})
|
129
138
|
Host::Discovered.import_host_and_facts(facts).first
|
130
139
|
FactoryGirl.create(:discovery_rule, :priority => 1, :search => "facts.somefact = abc", :hostgroup => hostgroups(:common))
|
131
|
-
post :auto_provision_all, {},
|
140
|
+
post :auto_provision_all, {}, set_session_user_default_manager
|
132
141
|
assert_response :redirect
|
133
142
|
assert_nil flash[:error]
|
134
143
|
end
|
@@ -138,7 +147,7 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
138
147
|
facts = @facts.merge({"somefact" => "abc"})
|
139
148
|
Host::Discovered.import_host_and_facts(facts).first
|
140
149
|
FactoryGirl.create(:discovery_rule, :priority => 1, :search => "facts.somefact = abc", :hostgroup => hostgroups(:common))
|
141
|
-
post :auto_provision_all, {},
|
150
|
+
post :auto_provision_all, {}, set_session_user_default_manager
|
142
151
|
assert_response :redirect
|
143
152
|
assert_nil flash[:error]
|
144
153
|
end
|
@@ -147,7 +156,7 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
147
156
|
@request.env["HTTP_REFERER"] = discovered_hosts_url
|
148
157
|
host = Host::Discovered.import_host_and_facts(@facts).first
|
149
158
|
::ForemanDiscovery::NodeAPI::PowerService.any_instance.expects(:reboot).returns(true)
|
150
|
-
post "reboot", { :id => host.id },
|
159
|
+
post "reboot", { :id => host.id }, set_session_user_default_manager
|
151
160
|
assert_redirected_to discovered_hosts_url
|
152
161
|
assert_equal "Rebooting host #{host.name}", flash[:notice]
|
153
162
|
end
|
@@ -156,7 +165,7 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
156
165
|
@request.env["HTTP_REFERER"] = discovered_hosts_url
|
157
166
|
host = Host::Discovered.import_host_and_facts(@facts).first
|
158
167
|
::ForemanDiscovery::NodeAPI::PowerService.any_instance.expects(:reboot).returns(false)
|
159
|
-
post "reboot_all", { },
|
168
|
+
post "reboot_all", { }, set_session_user_default_manager
|
160
169
|
assert_redirected_to discovered_hosts_url
|
161
170
|
assert_equal "Errors during reboot: #{host.name}: failed to reboot", flash[:error]
|
162
171
|
end
|
@@ -165,7 +174,7 @@ class DiscoveredHostsControllerTest < ActionController::TestCase
|
|
165
174
|
@request.env["HTTP_REFERER"] = discovered_hosts_url
|
166
175
|
host = Host::Discovered.import_host_and_facts(@facts).first
|
167
176
|
::ForemanDiscovery::NodeAPI::PowerService.any_instance.expects(:reboot).raises("request failed")
|
168
|
-
post "reboot_all", { },
|
177
|
+
post "reboot_all", { }, set_session_user_default_manager
|
169
178
|
assert_redirected_to discovered_hosts_url
|
170
179
|
assert_match(/ERF50-4973/, flash[:error])
|
171
180
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'test_helper'
|
2
|
+
require 'test_helper_discovery'
|
2
3
|
|
3
4
|
class DiscoveryRulesControllerTest < ActionController::TestCase
|
4
5
|
setup :initialize_host
|
@@ -8,14 +9,14 @@ class DiscoveryRulesControllerTest < ActionController::TestCase
|
|
8
9
|
assert_tag :tag => 'a', :attributes => {:href => '/discovery_rules'}
|
9
10
|
end
|
10
11
|
|
11
|
-
test "should get index" do
|
12
|
-
get :index, {},
|
12
|
+
test "reader role should get index" do
|
13
|
+
get :index, {}, set_session_user_default_reader
|
13
14
|
assert_response :success
|
14
15
|
assert_not_nil assigns(:discovery_rules)
|
15
16
|
end
|
16
17
|
|
17
18
|
test "should get new" do
|
18
|
-
get :new, {},
|
19
|
+
get :new, {}, set_session_user_default_manager
|
19
20
|
assert_response :success
|
20
21
|
end
|
21
22
|
|
@@ -26,7 +27,7 @@ class DiscoveryRulesControllerTest < ActionController::TestCase
|
|
26
27
|
:search => "bar",
|
27
28
|
:hostgroup_id => 1,
|
28
29
|
:hostname => "",
|
29
|
-
:priority => 1}},
|
30
|
+
:priority => 1}}, set_session_user_default_manager
|
30
31
|
end
|
31
32
|
|
32
33
|
assert_redirected_to discovery_rules_path
|
@@ -34,25 +35,25 @@ class DiscoveryRulesControllerTest < ActionController::TestCase
|
|
34
35
|
|
35
36
|
test "should get edit" do
|
36
37
|
rule = FactoryGirl.create(:discovery_rule)
|
37
|
-
get :edit, {:id => rule.to_param},
|
38
|
+
get :edit, {:id => rule.to_param}, set_session_user_default_manager
|
38
39
|
assert_response :success
|
39
40
|
end
|
40
41
|
|
41
42
|
test "should update discovery rule" do
|
42
43
|
rule = FactoryGirl.create(:discovery_rule)
|
43
|
-
put :update, {:id => rule.to_param, :discovery_rule => {}},
|
44
|
+
put :update, {:id => rule.to_param, :discovery_rule => {}}, set_session_user_default_manager
|
44
45
|
assert_redirected_to discovery_rules_path
|
45
46
|
end
|
46
47
|
|
47
48
|
test "should destroy discovery rule" do
|
48
49
|
rule = FactoryGirl.create(:discovery_rule)
|
49
50
|
assert_difference('DiscoveryRule.count', -1) do
|
50
|
-
delete :destroy, {:id => rule.to_param},
|
51
|
+
delete :destroy, {:id => rule.to_param}, set_session_user_default_manager
|
51
52
|
end
|
52
53
|
|
53
54
|
assert_redirected_to discovery_rules_path
|
54
55
|
end
|
55
|
-
|
56
|
+
|
56
57
|
private
|
57
58
|
|
58
59
|
def initialize_host
|
data/test/test_helper.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
def set_session_user_with_perms perms
|
2
|
+
perms = perms.collect{|p| Permission.find_by_name(p) || Permission.create(:name => p) }
|
3
|
+
perms.each do |p|
|
4
|
+
p.resource_type = 'Host' if p.name =~ /discovered_hosts$/
|
5
|
+
p.resource_type = 'DiscoveryRule' if p.name =~ /discovery_rules$/
|
6
|
+
p.save!
|
7
|
+
end
|
8
|
+
role = FactoryGirl.create :role
|
9
|
+
perms.each do |perm|
|
10
|
+
FactoryGirl.create(:filter, :role => role, :permissions => [perm])
|
11
|
+
end
|
12
|
+
user = FactoryGirl.create :user, :with_mail, :admin => false
|
13
|
+
user.roles << role
|
14
|
+
user.save!
|
15
|
+
SETTINGS[:login] ? {:user => user, :expires_at => 5.minutes.from_now} : {}
|
16
|
+
end
|
17
|
+
|
18
|
+
def set_session_user_default_reader
|
19
|
+
set_session_user_with_perms Foreman::Plugin.find('foreman_discovery').default_roles['Discovery Reader']
|
20
|
+
end
|
21
|
+
|
22
|
+
def set_session_user_default_manager
|
23
|
+
set_session_user_with_perms Foreman::Plugin.find('foreman_discovery').default_roles['Discovery Manager']
|
24
|
+
end
|
@@ -11,6 +11,15 @@ class FindDiscoveryRulesTest < ActiveSupport::TestCase
|
|
11
11
|
"macaddress_eth0" => "AA:BB:CC:DD:EE:FF",
|
12
12
|
"discovery_bootif" => "AA:BB:CC:DD:EE:FF",
|
13
13
|
}
|
14
|
+
|
15
|
+
FactoryGirl.create(:setting,
|
16
|
+
:name => 'discovery_hostname',
|
17
|
+
:value => 'discovery_bootif',
|
18
|
+
:category => 'Setting::Discovered')
|
19
|
+
FactoryGirl.create(:setting,
|
20
|
+
:name => 'discovery_prefix',
|
21
|
+
:value => 'mac',
|
22
|
+
:category => 'Setting::Discovered')
|
14
23
|
end
|
15
24
|
|
16
25
|
test "no rule is found for empty rule set" do
|
@@ -89,6 +98,28 @@ class FindDiscoveryRulesTest < ActiveSupport::TestCase
|
|
89
98
|
assert_equal host.discovery_rule_id, r1.id
|
90
99
|
end
|
91
100
|
|
101
|
+
test "auto provisioning fails for rule without a hostgroup" do
|
102
|
+
facts = @facts.merge({"somefact" => "abc"})
|
103
|
+
host = Host::Discovered.import_host_and_facts(facts).first
|
104
|
+
r1 = FactoryGirl.create(:discovery_rule, :priority => 1, :search => "facts.somefact = abc",
|
105
|
+
:organizations => [host.organization], :locations => [host.location])
|
106
|
+
r1.hostgroup = nil
|
107
|
+
exception = assert_raises(::Foreman::Exception) do
|
108
|
+
perform_auto_provision host, r1
|
109
|
+
end
|
110
|
+
assert_match /No hostgroup associated with rule/, exception.message
|
111
|
+
end
|
112
|
+
|
113
|
+
test "existing rule revent from hostgroup deletion" do
|
114
|
+
facts = @facts.merge({"somefact" => "abc"})
|
115
|
+
host = Host::Discovered.import_host_and_facts(facts).first
|
116
|
+
r1 = FactoryGirl.create(:discovery_rule, :priority => 1, :search => "facts.somefact = abc",
|
117
|
+
:organizations => [host.organization], :locations => [host.location])
|
118
|
+
assert_raises(ActiveRecord::RecordNotDestroyed) do
|
119
|
+
r1.hostgroup.destroy!
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
92
123
|
test "rules with incorrect syntax are skipped" do
|
93
124
|
facts = @facts.merge({"somefact" => "abc"})
|
94
125
|
host = Host::Discovered.import_host_and_facts(facts).first
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'test_plugin_helper'
|
2
|
+
|
3
|
+
class DiscoveredMailerTest < ActiveSupport::TestCase
|
4
|
+
setup do
|
5
|
+
@user = User.current = users :admin
|
6
|
+
|
7
|
+
FactoryGirl.create(:mail_notification,
|
8
|
+
:name => :discovered_summary,
|
9
|
+
:description => N_('A summary of discovered hosts'),
|
10
|
+
:mailer => 'DiscoveredMailer',
|
11
|
+
:method => 'discovered_summary',
|
12
|
+
:subscription_type => 'report',
|
13
|
+
)
|
14
|
+
|
15
|
+
@user.mail_notifications << MailNotification[:discovered_summary]
|
16
|
+
|
17
|
+
ActionMailer::Base.deliveries = []
|
18
|
+
@user.user_mail_notifications.first.deliver
|
19
|
+
@email = ActionMailer::Base.deliveries.first
|
20
|
+
end
|
21
|
+
|
22
|
+
test 'discovery mailer should deliver summary' do
|
23
|
+
assert @email.to.include?("admin@someware.com")
|
24
|
+
end
|
25
|
+
|
26
|
+
test 'discovery mailer should contain body' do
|
27
|
+
refute @email.body.nil?
|
28
|
+
end
|
29
|
+
|
30
|
+
test 'discovery mailer should have a correct subject' do
|
31
|
+
refute @email.subject.empty?
|
32
|
+
assert @email.subject.include? Setting[:email_subject_prefix].first
|
33
|
+
end
|
34
|
+
|
35
|
+
test 'discovery mailer sends Foreman URL in body' do
|
36
|
+
assert @email.body.parts.first.body.raw_source.include? Setting[:foreman_url]
|
37
|
+
end
|
38
|
+
|
39
|
+
test 'discovery mailer sends both html and text emails' do
|
40
|
+
assert_equal(2, @email.body.parts.size)
|
41
|
+
refute(@email.body.parts.first.body.raw_source.start_with?('<!DOCTYPE')) # text email
|
42
|
+
assert(@email.body.parts.last.body.raw_source.start_with?('<!DOCTYPE')) # html email
|
43
|
+
end
|
44
|
+
end
|
@@ -1,6 +1,18 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class DiscoveryAttributeSetTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
setup do
|
6
|
+
FactoryGirl.create(:setting,
|
7
|
+
:name => 'discovery_hostname',
|
8
|
+
:value => 'discovery_bootif',
|
9
|
+
:category => 'Setting::Discovered')
|
10
|
+
FactoryGirl.create(:setting,
|
11
|
+
:name => 'discovery_prefix',
|
12
|
+
:value => 'mac',
|
13
|
+
:category => 'Setting::Discovered')
|
14
|
+
end
|
15
|
+
|
4
16
|
test "can search discovered hosts by cpu" do
|
5
17
|
raw = parse_json_fixture('/facts.json')
|
6
18
|
host = Host::Discovered.import_host_and_facts(raw['facts']).first
|
@@ -35,6 +35,26 @@ class DiscoveryRuleTest < ActiveSupport::TestCase
|
|
35
35
|
assert_equal "can't be blank", rule.errors[:hostgroup_id].first
|
36
36
|
end
|
37
37
|
|
38
|
+
test "should not be able to create a rule with priority bigger than 2^31" do
|
39
|
+
rule = DiscoveryRule.new :name => "myrule",
|
40
|
+
:search => "cpu_count > 1",
|
41
|
+
:priority => 2**31 + 1,
|
42
|
+
:hostgroup_id => @hostgroup.id,
|
43
|
+
:organization_ids => [@hg_org.id]
|
44
|
+
refute_valid rule
|
45
|
+
assert_equal "must be less than 2147483648", rule.errors[:priority].first
|
46
|
+
end
|
47
|
+
|
48
|
+
test "should not be able to create a rule with max count bigger than 2^31" do
|
49
|
+
rule = DiscoveryRule.new :name => "myrule",
|
50
|
+
:search => "cpu_count > 1",
|
51
|
+
:max_count => 2**31 + 1,
|
52
|
+
:hostgroup_id => @hostgroup.id,
|
53
|
+
:organization_ids => [@hg_org.id]
|
54
|
+
refute_valid rule
|
55
|
+
assert_equal "must be less than 2147483648", rule.errors[:max_count].first
|
56
|
+
end
|
57
|
+
|
38
58
|
test "should enforce hostgroup organizations" do
|
39
59
|
skip unless SETTINGS[:organizations_enabled]
|
40
60
|
rule = DiscoveryRule.new :name => "myrule",
|
@@ -1,20 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class
|
4
|
-
attr_reader :interfaces, :facts
|
5
|
-
|
6
|
-
def initialize(interfaces, facts)
|
7
|
-
@interfaces = interfaces
|
8
|
-
@facts = facts
|
9
|
-
end
|
10
|
-
|
11
|
-
def suggested_primary_interface(_); end
|
12
|
-
def parse_interfaces?; end
|
13
|
-
|
14
|
-
include PuppetFactParserExtensions
|
15
|
-
end
|
16
|
-
|
17
|
-
class PuppetFactParserTest < ActiveSupport::TestCase
|
3
|
+
class FactParserTest < ActiveSupport::TestCase
|
18
4
|
setup do
|
19
5
|
interfaces = {
|
20
6
|
'eth0' => {'macaddress' => 'aa:bb:cc:dd:ee:f1', 'ipaddress' => '192.168.1.1'},
|
@@ -32,7 +18,8 @@ class PuppetFactParserTest < ActiveSupport::TestCase
|
|
32
18
|
:macaddress => 'aa:bb:cc:dd:ee:f2',
|
33
19
|
:discovery_bootif => 'aa:bb:cc:dd:ee:f3'
|
34
20
|
}.with_indifferent_access
|
35
|
-
@parser =
|
21
|
+
@parser = ::ForemanDiscovery::FactParser.new(facts)
|
22
|
+
@parser.stubs(:interfaces).returns(interfaces)
|
36
23
|
@host = Host::Discovered.new(:name => 'dummy')
|
37
24
|
end
|
38
25
|
|
@@ -6,6 +6,10 @@ class HostDiscoveredTest < ActiveSupport::TestCase
|
|
6
6
|
:name => 'discovery_fact',
|
7
7
|
:value => 'discovery_bootif',
|
8
8
|
:category => 'Setting::Discovered')
|
9
|
+
FactoryGirl.create(:setting,
|
10
|
+
:name => 'discovery_hostname',
|
11
|
+
:value => 'discovery_bootif',
|
12
|
+
:category => 'Setting::Discovered')
|
9
13
|
FactoryGirl.create(:setting,
|
10
14
|
:name => 'discovery_prefix',
|
11
15
|
:value => 'mac',
|
@@ -65,9 +69,19 @@ class HostDiscoveredTest < ActiveSupport::TestCase
|
|
65
69
|
assert host.refresh_facts
|
66
70
|
end
|
67
71
|
|
72
|
+
test "should create discovered host with hostname if a fact was supplied" do
|
73
|
+
raw = parse_json_fixture('/facts.json')
|
74
|
+
Setting[:discovery_hostname] = 'somefact'
|
75
|
+
facts = raw['facts'].merge({"somefact" => "somename"})
|
76
|
+
host = Host::Discovered.import_host_and_facts(facts).first
|
77
|
+
assert_equal 'macsomename', host.name
|
78
|
+
refute_equal 'e4:1f:13:cc:36:5a', host.mac
|
79
|
+
end
|
80
|
+
|
68
81
|
test "should create discovered host with fact_name as a name if it is a valid mac" do
|
69
82
|
raw = parse_json_fixture('/facts.json')
|
70
83
|
Setting[:discovery_fact] = 'somefact'
|
84
|
+
Setting[:discovery_hostname] = 'somefact'
|
71
85
|
facts = raw['facts'].merge({"somefact" => "E4:1F:13:CC:36:5A"})
|
72
86
|
host = Host::Discovered.import_host_and_facts(facts).first
|
73
87
|
assert_equal 'mace41f13cc365a', host.name
|
@@ -90,25 +104,31 @@ class HostDiscoveredTest < ActiveSupport::TestCase
|
|
90
104
|
assert_equal 'teste41f13cc3658', host.name
|
91
105
|
end
|
92
106
|
|
93
|
-
test "should
|
107
|
+
test "should create discovered host without prefix" do
|
94
108
|
raw = parse_json_fixture('/facts.json')
|
95
|
-
Setting[:discovery_prefix] = '
|
109
|
+
Setting[:discovery_prefix] = ''
|
96
110
|
host = Host::Discovered.import_host_and_facts(raw['facts']).first
|
97
|
-
|
111
|
+
assert_equal 'e41f13cc3658',host.name
|
98
112
|
end
|
99
113
|
|
100
|
-
test "should
|
114
|
+
test "should raise when hostname fact cannot be found" do
|
101
115
|
raw = parse_json_fixture('/facts.json')
|
102
|
-
Setting[:
|
103
|
-
|
104
|
-
|
116
|
+
Setting[:discovery_hostname] = 'macaddress_foo'
|
117
|
+
exception = assert_raises(::Foreman::Exception) do
|
118
|
+
Host::Discovered.import_host_and_facts(raw['facts'])
|
119
|
+
end
|
120
|
+
assert_match(/Invalid facts: hash does not contain a valid value for any of the facts in the discovery_hostname setting:/, exception.message)
|
105
121
|
end
|
106
122
|
|
107
|
-
test "should
|
123
|
+
test "should raise when hostname cannot be computed due to normlization and no prefix" do
|
108
124
|
raw = parse_json_fixture('/facts.json')
|
109
|
-
|
110
|
-
|
111
|
-
|
125
|
+
raw['facts']['invalidhostnamefact'] = '...'
|
126
|
+
Setting[:discovery_hostname] = 'invalidhostnamefact'
|
127
|
+
Setting[:discovery_prefix] = ''
|
128
|
+
exception = assert_raises(::Foreman::Exception) do
|
129
|
+
Host::Discovered.import_host_and_facts(raw['facts'])
|
130
|
+
end
|
131
|
+
assert_match(/Invalid hostname: Could not normalize the hostname/, exception.message)
|
112
132
|
end
|
113
133
|
|
114
134
|
test 'discovered host can be searched in multiple taxonomies' do
|
@@ -148,6 +168,31 @@ class HostDiscoveredTest < ActiveSupport::TestCase
|
|
148
168
|
assert Token.where(:host_id => h.id).empty?
|
149
169
|
end
|
150
170
|
|
171
|
+
test "normalization of MAC into a discovered host hostname" do
|
172
|
+
assert_equal Host::Discovered.normalize_string_for_hostname("90:B1:1C:54:D5:82"),"90b11c54d582"
|
173
|
+
end
|
174
|
+
|
175
|
+
test "normalization of a string containing multiple non-alphabetical characters" do
|
176
|
+
assert_equal Host::Discovered.normalize_string_for_hostname(".-_Test::Host.name_-."),"testhostname"
|
177
|
+
end
|
178
|
+
|
179
|
+
test "normalization of a valid hostname" do
|
180
|
+
assert_equal Host::Discovered.normalize_string_for_hostname("testhostname"),"testhostname"
|
181
|
+
end
|
182
|
+
|
183
|
+
test "empty string after hostname normalization should raise an error" do
|
184
|
+
exception = assert_raises(::Foreman::Exception) do
|
185
|
+
Host::Discovered.normalize_string_for_hostname(".-_")
|
186
|
+
end
|
187
|
+
assert_match(/Invalid hostname: Could not normalize the hostname/, exception.message)
|
188
|
+
end
|
189
|
+
|
190
|
+
test "chooshing the first valid fact from array of fact names" do
|
191
|
+
facts = {"custom_hostname" => "testhostname","notmyfact" => "notusedfactvalue"}
|
192
|
+
discovery_hostname_fact_array = ['macaddress','custom_hostname','someotherfact']
|
193
|
+
assert_equal Host::Discovered.return_first_valid_fact(discovery_hostname_fact_array,facts),"testhostname"
|
194
|
+
end
|
195
|
+
|
151
196
|
def parse_json_fixture(relative_path)
|
152
197
|
return JSON.parse(File.read(File.expand_path(File.dirname(__FILE__) + relative_path)))
|
153
198
|
end
|