foreman_discovery 5.0.0 → 5.0.1
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/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
         |