foreman_openscap 0.5.4 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +7 -7
  2. data/README.md +14 -0
  3. data/app/assets/javascripts/foreman_openscap/policy_edit.js +1 -1
  4. data/app/controllers/api/v2/compliance/policies_controller.rb +12 -9
  5. data/app/controllers/api/v2/compliance/scap_contents_controller.rb +4 -2
  6. data/app/controllers/concerns/foreman/controller/parameters/policy.rb +12 -0
  7. data/app/controllers/concerns/foreman/controller/parameters/policy_api.rb +21 -0
  8. data/app/controllers/concerns/foreman/controller/parameters/scap_content.rb +15 -0
  9. data/app/controllers/policies_controller.rb +7 -3
  10. data/app/controllers/scap_contents_controller.rb +4 -2
  11. data/app/helpers/{dashboard_helper.rb → compliance_dashboard_helper.rb} +2 -2
  12. data/app/helpers/policy_dashboard_helper.rb +9 -4
  13. data/app/models/concerns/foreman_openscap/host_extensions.rb +3 -5
  14. data/app/models/concerns/foreman_openscap/hostgroup_extensions.rb +1 -1
  15. data/app/models/concerns/foreman_openscap/log_extensions.rb +0 -1
  16. data/app/models/concerns/foreman_openscap/openscap_proxy_core_extensions.rb +1 -1
  17. data/app/models/concerns/foreman_openscap/openscap_proxy_extensions.rb +1 -2
  18. data/app/models/foreman_openscap/arf_report.rb +6 -4
  19. data/app/models/foreman_openscap/compliance_status.rb +3 -1
  20. data/app/models/foreman_openscap/policy.rb +62 -33
  21. data/app/models/foreman_openscap/scap_content.rb +1 -3
  22. data/app/views/arf_reports/_list.html.erb +1 -1
  23. data/app/views/arf_reports/show.html.erb +4 -4
  24. data/app/views/compliance_hosts/show.html.erb +1 -1
  25. data/app/views/dashboard/_compliance_host_reports_widget.html.erb +6 -6
  26. data/app/views/policies/index.html.erb +2 -2
  27. data/app/views/policies/steps/_schedule_form.html.erb +1 -1
  28. data/app/views/policies/steps/_step_form.html.erb +1 -0
  29. data/app/views/policies/welcome.html.erb +1 -1
  30. data/app/views/policy_dashboard/index.html.erb +2 -2
  31. data/app/views/scap_contents/index.html.erb +2 -2
  32. data/app/views/scap_contents/welcome.html.erb +1 -1
  33. data/db/migrate/20160830113437_remove_deleted_policy.rb +10 -0
  34. data/db/seeds.d/openscap_policy_notification.rb +2 -0
  35. data/lib/foreman_openscap/data_migration.rb +1 -1
  36. data/lib/foreman_openscap/engine.rb +11 -1
  37. data/lib/foreman_openscap/helper.rb +4 -8
  38. data/lib/foreman_openscap/version.rb +1 -1
  39. data/locale/Makefile +60 -0
  40. data/locale/de/LC_MESSAGES/foreman_openscap.mo +0 -0
  41. data/locale/de/foreman_openscap.po +616 -0
  42. data/locale/en_GB/LC_MESSAGES/foreman_openscap.mo +0 -0
  43. data/locale/en_GB/foreman_openscap.po +616 -0
  44. data/locale/es/LC_MESSAGES/foreman_openscap.mo +0 -0
  45. data/locale/es/foreman_openscap.po +616 -0
  46. data/locale/foreman_openscap.pot +873 -0
  47. data/locale/fr/LC_MESSAGES/foreman_openscap.mo +0 -0
  48. data/locale/fr/foreman_openscap.po +616 -0
  49. data/locale/gl/LC_MESSAGES/foreman_openscap.mo +0 -0
  50. data/locale/gl/foreman_openscap.po +616 -0
  51. data/locale/it/LC_MESSAGES/foreman_openscap.mo +0 -0
  52. data/locale/it/foreman_openscap.po +616 -0
  53. data/locale/ja/LC_MESSAGES/foreman_openscap.mo +0 -0
  54. data/locale/ja/foreman_openscap.po +616 -0
  55. data/locale/ko/LC_MESSAGES/foreman_openscap.mo +0 -0
  56. data/locale/ko/foreman_openscap.po +616 -0
  57. data/locale/pt_BR/LC_MESSAGES/foreman_openscap.mo +0 -0
  58. data/locale/pt_BR/foreman_openscap.po +616 -0
  59. data/locale/ru/LC_MESSAGES/foreman_openscap.mo +0 -0
  60. data/locale/ru/foreman_openscap.po +617 -0
  61. data/locale/sv_SE/LC_MESSAGES/foreman_openscap.mo +0 -0
  62. data/locale/sv_SE/foreman_openscap.po +616 -0
  63. data/locale/zanata.xml +29 -0
  64. data/locale/zh_CN/LC_MESSAGES/foreman_openscap.mo +0 -0
  65. data/locale/zh_CN/foreman_openscap.po +616 -0
  66. data/locale/zh_TW/LC_MESSAGES/foreman_openscap.mo +0 -0
  67. data/locale/zh_TW/foreman_openscap.po +616 -0
  68. data/test/factories/policy_factory.rb +2 -2
  69. data/test/functional/api/v2/compliance/policies_controller_test.rb +7 -3
  70. data/test/test_plugin_helper.rb +35 -37
  71. data/test/unit/concerns/openscap_proxy_extenstions_test.rb +21 -0
  72. data/test/unit/openscap_host_test.rb +3 -1
  73. data/test/unit/policy_test.rb +125 -0
  74. data/test/unit/scap_content_test.rb +5 -0
  75. metadata +231 -198
@@ -5,53 +5,51 @@ require 'test_helper'
5
5
  FactoryGirl.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
6
6
  FactoryGirl.reload
7
7
 
8
- Spork.each_run do
9
- module ScapClientPuppetclass
10
- def skip_scap_callback
11
- Host::Managed.any_instance.stubs(:update_scap_client).returns(nil)
12
- Host::Managed.any_instance.stubs(:scap_client_class_present).returns(nil)
13
- Hostgroup.any_instance.stubs(:update_scap_client).returns(nil)
14
- end
8
+ module ScapClientPuppetclass
9
+ def skip_scap_callback
10
+ Host::Managed.any_instance.stubs(:update_scap_client).returns(nil)
11
+ Host::Managed.any_instance.stubs(:scap_client_class_present).returns(nil)
12
+ Hostgroup.any_instance.stubs(:update_scap_client).returns(nil)
15
13
  end
14
+ end
16
15
 
17
- class ActionMailer::TestCase
18
- include ScapClientPuppetclass
19
- setup :skip_scap_callback
20
- end
16
+ class ActionMailer::TestCase
17
+ include ScapClientPuppetclass
18
+ setup :skip_scap_callback
19
+ end
21
20
 
22
- class ActionController::TestCase
23
- include ScapClientPuppetclass
21
+ class ActionController::TestCase
22
+ include ScapClientPuppetclass
24
23
 
25
- setup :add_smart_proxy, :skip_scap_callback
24
+ setup :add_smart_proxy, :skip_scap_callback
26
25
 
27
- private
26
+ private
28
27
 
29
- def add_smart_proxy
30
- FactoryGirl.create(:smart_proxy, :url => 'http://localhost:8443', :features => [FactoryGirl.create(:feature, :name => 'Openscap')])
31
- ::ProxyAPI::Features.any_instance.stubs(:features).returns(%w(puppet openscap))
32
- versions = { "version" => "1.11.0", "modules" => { "openscap" => "0.5.3" } }
33
- ::ProxyAPI::Version.any_instance.stubs(:proxy_versions).returns(versions)
34
- ProxyAPI::Openscap.any_instance.stubs(:validate_scap_content).returns({'errors' => []})
35
- ProxyAPI::Openscap.any_instance.stubs(:fetch_policies_for_scap_content)
36
- .returns({'xccdf_org.ssgproject.content_profile_common' => 'Common Profile for General-Purpose Fedora Systems'})
37
- end
28
+ def add_smart_proxy
29
+ FactoryGirl.create(:smart_proxy, :url => 'http://localhost:8443', :features => [FactoryGirl.create(:feature, :name => 'Openscap')])
30
+ ::ProxyAPI::Features.any_instance.stubs(:features).returns(%w(puppet openscap))
31
+ versions = { "version" => "1.11.0", "modules" => { "openscap" => "0.5.3" } }
32
+ ::ProxyAPI::Version.any_instance.stubs(:proxy_versions).returns(versions)
33
+ ProxyAPI::Openscap.any_instance.stubs(:validate_scap_content).returns({'errors' => []})
34
+ ProxyAPI::Openscap.any_instance.stubs(:fetch_policies_for_scap_content)
35
+ .returns({'xccdf_org.ssgproject.content_profile_common' => 'Common Profile for General-Purpose Fedora Systems'})
38
36
  end
37
+ end
39
38
 
40
- class ActiveSupport::TestCase
41
- include ScapClientPuppetclass
39
+ class ActiveSupport::TestCase
40
+ include ScapClientPuppetclass
42
41
 
43
- setup :add_smart_proxy, :skip_scap_callback
42
+ setup :add_smart_proxy, :skip_scap_callback
44
43
 
45
- private
44
+ private
46
45
 
47
- def add_smart_proxy
48
- FactoryGirl.create(:smart_proxy, :url => 'http://localhost:8443', :features => [FactoryGirl.create(:feature, :name => 'Openscap')])
49
- ::ProxyAPI::Features.any_instance.stubs(:features).returns(%w(puppet openscap))
50
- versions = { "version" => "1.11.0", "modules" => { "openscap" => "0.5.3" } }
51
- ::ProxyAPI::Version.any_instance.stubs(:proxy_versions).returns(versions)
52
- ProxyAPI::Openscap.any_instance.stubs(:validate_scap_content).returns({'errors' => []})
53
- ProxyAPI::Openscap.any_instance.stubs(:fetch_policies_for_scap_content)
54
- .returns({'xccdf_org.ssgproject.content_profile_common' => 'Common Profile for General-Purpose Fedora Systems'})
55
- end
46
+ def add_smart_proxy
47
+ FactoryGirl.create(:smart_proxy, :url => 'http://localhost:8443', :features => [FactoryGirl.create(:feature, :name => 'Openscap')])
48
+ ::ProxyAPI::Features.any_instance.stubs(:features).returns(%w(puppet openscap))
49
+ versions = { "version" => "1.11.0", "modules" => { "openscap" => "0.5.3" } }
50
+ ::ProxyAPI::Version.any_instance.stubs(:proxy_versions).returns(versions)
51
+ ProxyAPI::Openscap.any_instance.stubs(:validate_scap_content).returns({'errors' => []})
52
+ ProxyAPI::Openscap.any_instance.stubs(:fetch_policies_for_scap_content)
53
+ .returns({'xccdf_org.ssgproject.content_profile_common' => 'Common Profile for General-Purpose Fedora Systems'})
56
54
  end
57
55
  end
@@ -0,0 +1,21 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class OpenscapProxyExtensionsTest < ActiveSupport::TestCase
4
+
5
+ setup do
6
+ @host = FactoryGirl.create(:compliance_host)
7
+ end
8
+
9
+ test "should return proxy api for openscap" do
10
+ arf = FactoryGirl.create(:arf_report,
11
+ :host_id => @host.id,
12
+ :openscap_proxy => @host.openscap_proxy)
13
+ api = arf.openscap_proxy_api
14
+ assert_equal (@host.openscap_proxy.url + "/compliance/"), api.url
15
+ end
16
+
17
+ test "should raise exception when no openscap proxy asociated" do
18
+ arf = FactoryGirl.create(:arf_report, :host_id => @host.id)
19
+ assert_raises(Foreman::Exception) { arf.openscap_proxy_api }
20
+ end
21
+ end
@@ -5,6 +5,7 @@ class OpenscapHostTest < ActiveSupport::TestCase
5
5
  disable_orchestration
6
6
  User.current = users :admin
7
7
  ForemanOpenscap::Policy.any_instance.stubs(:ensure_needed_puppetclasses).returns(true)
8
+ ForemanOpenscap::Policy.any_instance.stubs(:find_scap_puppetclass).returns(FactoryGirl.create(:puppetclass, :name => 'foreman_scap_client'))
8
9
  @policy = FactoryGirl.create(:policy)
9
10
  end
10
11
 
@@ -19,7 +20,8 @@ class OpenscapHostTest < ActiveSupport::TestCase
19
20
  test 'Host has policies via its hostgroup' do
20
21
  host = FactoryGirl.create(:host, :with_hostgroup)
21
22
  hostgroup = host.hostgroup
22
- assert(@policy.hostgroup_ids = ["#{hostgroup.id}"])
23
+ @policy.hostgroup_ids = ["#{hostgroup.id}"]
24
+ assert @policy.save
23
25
  refute_empty(host.combined_policies)
24
26
  assert_includes(host.combined_policies, @policy)
25
27
  end
@@ -0,0 +1,125 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class PolicyTest < ActiveSupport::TestCase
4
+ setup do
5
+ ForemanOpenscap::Policy.any_instance.stubs(:ensure_needed_puppetclasses).returns(true)
6
+ @scap_content = FactoryGirl.create(:scap_content)
7
+ @scap_profile = FactoryGirl.create(:scap_content_profile)
8
+ end
9
+
10
+ test "should assign hostgroups by their ids" do
11
+ ForemanOpenscap::Policy.any_instance.stubs(:find_scap_puppetclass).returns(FactoryGirl.create(:puppetclass, :name => 'foreman_scap_client'))
12
+ ForemanOpenscap::Policy.any_instance.stubs(:populate_overrides)
13
+ hg1 = FactoryGirl.create(:hostgroup)
14
+ hg2 = FactoryGirl.create(:hostgroup)
15
+ asset = FactoryGirl.create(:asset, :assetable_id => hg1.id, :assetable_type => 'Hostgroup')
16
+ policy = FactoryGirl.create(:policy, :assets => [asset])
17
+ policy.hostgroup_ids = [hg1, hg2].map(&:id)
18
+ policy.save!
19
+ assert_equal 2, policy.hostgroups.count
20
+ assert policy.hostgroups.include?(hg2)
21
+ end
22
+
23
+ test "should remove associated hostgroup" do
24
+ ForemanOpenscap::Policy.any_instance.stubs(:find_scap_puppetclass).returns(FactoryGirl.create(:puppetclass, :name => 'foreman_scap_client'))
25
+ ForemanOpenscap::Policy.any_instance.stubs(:populate_overrides)
26
+ hg = FactoryGirl.create(:hostgroup)
27
+ asset = FactoryGirl.create(:asset, :assetable_id => hg.id, :assetable_type => 'Hostgroup')
28
+ policy = FactoryGirl.create(:policy, :assets => [asset])
29
+ policy.save!
30
+ hg.hostgroup_classes.destroy_all
31
+ hg.destroy
32
+ assert_equal 0, policy.hostgroups.count
33
+ end
34
+
35
+ test "should create policy with custom period" do
36
+ p = ForemanOpenscap::Policy.new(:name => "custom_policy",
37
+ :scap_content_id => @scap_content.id,
38
+ :scap_content_profile_id => @scap_profile.id,
39
+ :period => 'custom',
40
+ :cron_line => '6 * 15 12 0')
41
+ assert p.save
42
+ end
43
+
44
+ test "should not create policy with custom period" do
45
+ p = ForemanOpenscap::Policy.new(:name => "custom_policy",
46
+ :scap_content_id => @scap_content.id,
47
+ :scap_content_profile_id => @scap_profile.id,
48
+ :period => 'custom',
49
+ :cron_line => 'aaa')
50
+ refute p.save
51
+ assert p.errors[:cron_line].include?("does not consist of 5 parts separated by space")
52
+ end
53
+
54
+ test "should create policy with weekly period" do
55
+ p = ForemanOpenscap::Policy.new(:name => "custom_policy",
56
+ :scap_content_id => @scap_content.id,
57
+ :scap_content_profile_id => @scap_profile.id,
58
+ :period => 'weekly',
59
+ :weekday => 'monday')
60
+ assert p.save
61
+ end
62
+
63
+ test "should not create policy with weekly period" do
64
+ p = ForemanOpenscap::Policy.new(:name => "custom_policy",
65
+ :scap_content_id => @scap_content.id,
66
+ :scap_content_profile_id => @scap_profile.id,
67
+ :period => 'weekly',
68
+ :weekday => 'someday')
69
+ refute p.save
70
+ assert p.errors[:weekday].include?("is not a valid value")
71
+ end
72
+
73
+ test "should create policy with monthly period" do
74
+ p = ForemanOpenscap::Policy.new(:name => "custom_policy",
75
+ :scap_content_id => @scap_content.id,
76
+ :scap_content_profile_id => @scap_profile.id,
77
+ :period => 'monthly',
78
+ :day_of_month => '1')
79
+ assert p.save
80
+ end
81
+
82
+ test "should not create policy with monthly period" do
83
+ p = ForemanOpenscap::Policy.new(:name => "custom_policy",
84
+ :scap_content_id => @scap_content.id,
85
+ :scap_content_profile_id => @scap_profile.id,
86
+ :period => 'monthly',
87
+ :day_of_month => '0')
88
+ refute p.save
89
+ assert p.errors[:day_of_month].include?("must be between 1 and 31")
90
+ end
91
+
92
+ test "should not create policy when attributes do not correspond to selected period in new record" do
93
+ p = ForemanOpenscap::Policy.new(:name => "custom_policy",
94
+ :scap_content_id => @scap_content.id,
95
+ :scap_content_profile_id => @scap_profile.id,
96
+ :period => 'monthly',
97
+ :weekday => 'tuesday',
98
+ :cron_line => "0 0 0 0 0")
99
+ policy = ForemanOpenscap::Policy.new(:name => "test policy",
100
+ :scap_content_id => @scap_content.id,
101
+ :scap_content_profile_id => @scap_profile.id,
102
+ :period => 'custom',
103
+ :weekday => 'tuesday',
104
+ :day_of_month => "15")
105
+ refute p.save
106
+ refute policy.save
107
+ assert p.weekday.empty?
108
+ assert p.cron_line.empty?
109
+ assert policy.weekday.empty?
110
+ assert policy.day_of_month.empty?
111
+ end
112
+
113
+ test "should update policy period" do
114
+ p = ForemanOpenscap::Policy.new(:name => "custom_policy",
115
+ :scap_content_id => @scap_content.id,
116
+ :scap_content_profile_id => @scap_profile.id,
117
+ :period => 'monthly',
118
+ :day_of_month => '5')
119
+ assert p.save
120
+ p.period = 'weekly'
121
+ p.weekday = 'monday'
122
+ p.day_of_month = nil
123
+ assert p.save
124
+ end
125
+ end
@@ -10,6 +10,11 @@ class ScapContentTest < ActiveSupport::TestCase
10
10
  assert(scap_content.valid?)
11
11
  end
12
12
 
13
+ test 'should not allow title.length > 255' do
14
+ scap_content = ForemanOpenscap::ScapContent.new(:title => ("a" * 256), :scap_file => @scap_file)
15
+ refute(scap_content.valid?)
16
+ end
17
+
13
18
  test 'scap content should fail if no openscap proxy' do
14
19
  SmartProxy.stubs(:with_features).returns([])
15
20
  ProxyAPI::AvailableProxy.any_instance.stubs(:available?).returns(false)