foreman_openscap 0.4.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/foreman_openscap/load_report.js +1 -1
  3. data/app/assets/javascripts/foreman_openscap/policy_edit.js +0 -2
  4. data/app/controllers/api/v2/compliance/arf_reports_controller.rb +7 -22
  5. data/app/controllers/api/v2/compliance/policies_controller.rb +5 -5
  6. data/app/controllers/api/v2/compliance/scap_contents_controller.rb +3 -3
  7. data/app/controllers/arf_reports_controller.rb +62 -0
  8. data/app/controllers/{scaptimony_dashboard_controller.rb → compliance_dashboard_controller.rb} +1 -1
  9. data/app/controllers/compliance_hosts_controller.rb +5 -0
  10. data/app/controllers/{scaptimony_policies_controller.rb → policies_controller.rb} +13 -13
  11. data/app/controllers/{scaptimony_policy_dashboard_controller.rb → policy_dashboard_controller.rb} +3 -3
  12. data/app/controllers/{scaptimony_scap_contents_controller.rb → scap_contents_controller.rb} +11 -11
  13. data/app/helpers/{scaptimony_report_dashboard_helper.rb → arf_report_dashboard_helper.rb} +3 -5
  14. data/app/helpers/arf_reports_helper.rb +21 -0
  15. data/app/helpers/compliance_hosts_helper.rb +25 -0
  16. data/app/helpers/concerns/foreman_openscap/hosts_helper_extensions.rb +2 -32
  17. data/app/helpers/{scaptimony_policies_helper.rb → policies_helper.rb} +6 -2
  18. data/app/helpers/{scaptimony_policy_dashboard_helper.rb → policy_dashboard_helper.rb} +8 -8
  19. data/app/lib/proxy_api/available_proxy.rb +26 -0
  20. data/app/lib/proxy_api/openscap.rb +40 -0
  21. data/app/mailers/foreman_openscap/policy_mailer.rb +42 -0
  22. data/app/models/concerns/foreman_openscap/compliance_status_scoped_search.rb +91 -0
  23. data/app/models/concerns/foreman_openscap/host_extensions.rb +73 -17
  24. data/app/models/concerns/foreman_openscap/hostgroup_extensions.rb +3 -5
  25. data/app/models/foreman_openscap/arf_report.rb +165 -0
  26. data/app/models/foreman_openscap/asset.rb +27 -0
  27. data/app/models/foreman_openscap/asset_policy.rb +6 -0
  28. data/app/models/foreman_openscap/compliance_status.rb +50 -0
  29. data/app/models/{concerns/foreman_openscap/policy_extensions.rb → foreman_openscap/policy.rb} +72 -45
  30. data/app/models/foreman_openscap/policy_arf_report.rb +8 -0
  31. data/app/models/foreman_openscap/policy_revision.rb +6 -0
  32. data/app/models/foreman_openscap/scap_content.rb +112 -0
  33. data/app/models/foreman_openscap/scap_content_profile.rb +6 -0
  34. data/app/overrides/hosts/overview/host_compliance_status.rb +4 -4
  35. data/app/services/foreman_openscap/arf_report_status_calculator.rb +45 -0
  36. data/app/services/{scaptimony → foreman_openscap}/host_report_dashboard/data.rb +12 -6
  37. data/app/services/{scaptimony → foreman_openscap}/policy_dashboard/data.rb +5 -5
  38. data/app/services/{scaptimony → foreman_openscap}/report_dashboard/data.rb +4 -4
  39. data/app/views/api/v2/compliance/policies/create.json.rabl +3 -0
  40. data/app/views/{scaptimony_arf_reports → arf_reports}/_list.html.erb +4 -4
  41. data/app/views/arf_reports/_metrics.html.erb +37 -0
  42. data/app/views/arf_reports/_output.html.erb +23 -0
  43. data/app/views/{scaptimony_arf_reports → arf_reports}/index.html.erb +0 -0
  44. data/app/views/arf_reports/show.html.erb +14 -0
  45. data/app/views/{scaptimony_arf_reports/show.html.erb → arf_reports/show_html.html.erb} +2 -3
  46. data/app/views/compliance_hosts/_compliance_status.erb +6 -0
  47. data/app/views/{scaptimony_hosts → compliance_hosts}/show.html.erb +9 -2
  48. data/app/views/dashboard/{_foreman_openscap_host_reports_widget.html.erb → _compliance_host_reports_widget.html.erb} +3 -3
  49. data/app/views/dashboard/{_foreman_openscap_reports_breakdown_widget.html.erb → _compliance_reports_breakdown_widget.html.erb} +1 -1
  50. data/app/views/foreman_openscap/policy_mailer/_dashboard.erb +21 -0
  51. data/app/views/foreman_openscap/policy_mailer/_hosts.erb +44 -0
  52. data/app/views/foreman_openscap/policy_mailer/_list.erb +10 -0
  53. data/app/views/foreman_openscap/policy_mailer/_policy.erb +7 -0
  54. data/app/views/foreman_openscap/policy_mailer/policy_summary.erb +19 -0
  55. data/app/views/{scaptimony_policies → policies}/_form.html.erb +2 -8
  56. data/app/views/{scaptimony_policies → policies}/_list.html.erb +5 -5
  57. data/app/views/policies/_scap_content_results.html.erb +3 -0
  58. data/app/views/policies/create.html.erb +2 -0
  59. data/app/views/{scaptimony_policies → policies}/disassociate_multiple_hosts.html.erb +2 -2
  60. data/app/views/{scaptimony_policies → policies}/edit.html.erb +0 -0
  61. data/app/views/{scaptimony_policies → policies}/index.html.erb +1 -1
  62. data/app/views/policies/new.html.erb +2 -0
  63. data/app/views/{scaptimony_policies → policies}/select_multiple_hosts.html.erb +2 -2
  64. data/app/views/{scaptimony_policies → policies}/show.html.erb +1 -1
  65. data/app/views/{scaptimony_policies → policies}/steps/_create_policy_form.html.erb +0 -0
  66. data/app/views/{scaptimony_policies → policies}/steps/_hostgroups_form.html.erb +0 -0
  67. data/app/views/{scaptimony_policies → policies}/steps/_locations_form.html.erb +0 -0
  68. data/app/views/{scaptimony_policies → policies}/steps/_organizations_form.html.erb +0 -0
  69. data/app/views/policies/steps/_scap_content_form.html.erb +9 -0
  70. data/app/views/{scaptimony_policies → policies}/steps/_schedule_form.html.erb +1 -1
  71. data/app/views/{scaptimony_policies → policies}/steps/_step_form.html.erb +3 -3
  72. data/app/views/{scaptimony_policies → policies}/welcome.html.erb +2 -2
  73. data/app/views/{scaptimony_policy_dashboard → policy_dashboard}/_policy_chart_widget.html.erb +0 -0
  74. data/app/views/{scaptimony_policy_dashboard → policy_dashboard}/_policy_reports.html.erb +2 -2
  75. data/app/views/{scaptimony_policy_dashboard → policy_dashboard}/_policy_status_widget.html.erb +3 -3
  76. data/app/views/{scaptimony_policy_dashboard → policy_dashboard}/index.html.erb +0 -0
  77. data/app/views/{scaptimony_scap_contents → scap_contents}/_form.html.erb +5 -6
  78. data/app/views/{scaptimony_scap_contents → scap_contents}/_list.html.erb +3 -3
  79. data/app/views/{scaptimony_scap_contents → scap_contents}/edit.html.erb +0 -0
  80. data/app/views/{scaptimony_scap_contents → scap_contents}/index.html.erb +1 -1
  81. data/app/views/{scaptimony_scap_contents → scap_contents}/new.html.erb +0 -0
  82. data/app/views/{scaptimony_scap_contents → scap_contents}/welcome.html.erb +2 -2
  83. data/config/routes.rb +15 -11
  84. data/db/migrate/20141013172051_create_scaptimony_policies.rb +9 -0
  85. data/db/migrate/20141014105333_create_scaptimony_assets.rb +10 -0
  86. data/db/migrate/20141015092642_create_scaptimony_arf_reports.rb +13 -0
  87. data/db/migrate/20141015115511_add_arf_report_unique_constraint.rb +6 -0
  88. data/db/migrate/20141104164201_create_scaptimony_scap_contents.rb +7 -0
  89. data/db/migrate/20141104171545_create_scaptimony_policy_revisions.rb +14 -0
  90. data/db/migrate/20141105174625_add_description_to_scaptimony_policy_revisions.rb +5 -0
  91. data/db/migrate/20141105174834_add_columns_to_scaptimony_policies.rb +12 -0
  92. data/db/migrate/20141107091756_add_columns_to_scaptimony_scap_contents.rb +8 -0
  93. data/db/migrate/20141111104519_add_constraint_to_scaptimony_scap_contents.rb +5 -0
  94. data/db/migrate/20141113221054_create_scaptimony_scap_content_profiles.rb +12 -0
  95. data/db/migrate/20141116170632_remove_xccdf_profile_from_scaptimony_policies.rb +5 -0
  96. data/db/migrate/20141116171305_add_profile_to_scaptimony_policies.rb +6 -0
  97. data/db/migrate/20141118142954_add_constraint_to_scaptimony_policies.rb +5 -0
  98. data/db/migrate/20141119164918_create_scaptimony_xccdf_results.rb +8 -0
  99. data/db/migrate/20141119175434_create_scaptimony_xccdf_rules.rb +8 -0
  100. data/db/migrate/20141119182606_create_scaptimony_xccdf_rule_results.rb +9 -0
  101. data/db/migrate/20141121120326_create_scaptimony_arf_report_breakdowns.rb +24 -0
  102. data/db/migrate/20141121164042_replace_arf_report_breakdown_view.rb +25 -0
  103. data/db/migrate/20141206211151_create_scaptimony_assets_policies.rb +9 -0
  104. data/db/migrate/20141214112917_add_scap_file_to_scap_content.rb +5 -0
  105. data/db/migrate/20141216154502_rename_scaptimony_asset_policies.rb +5 -0
  106. data/db/migrate/20150111085317_polymorph_asset.rb +8 -0
  107. data/db/migrate/20150112152944_create_scaptimony_arf_report_raws.rb +10 -0
  108. data/db/migrate/20150114210634_rename_scaptimony_arf_report_raw_raw.rb +5 -0
  109. data/db/migrate/20150115155947_add_scaptimony_scap_content_digest.rb +21 -0
  110. data/db/migrate/20150116083129_add_day_of_month_and_cron_line_to_scaptimony_policy.rb +6 -0
  111. data/db/migrate/20150821100137_migrate_from_scaptimony.rb +59 -0
  112. data/db/migrate/20150827123826_remove_scaptimony_permissions.rb +21 -0
  113. data/db/migrate/20150925124959_create_policy_arf_reports.rb +13 -0
  114. data/db/migrate/20150929124853_add_result_to_logs.rb +9 -0
  115. data/db/migrate/20150929152345_move_arf_reports_to_reports_table.rb +179 -0
  116. data/db/migrate/20151023131950_link_arf_report_directly_to_host.rb +17 -0
  117. data/db/seeds.d/openscap_policy_notification.rb +9 -0
  118. data/lib/foreman_openscap/bulk_upload.rb +3 -1
  119. data/lib/foreman_openscap/engine.rb +53 -42
  120. data/lib/foreman_openscap/helper.rb +8 -0
  121. data/lib/foreman_openscap/version.rb +1 -1
  122. data/lib/tasks/foreman_openscap_tasks.rake +14 -0
  123. data/test/factories/arf_report_factory.rb +9 -6
  124. data/test/factories/asset_factory.rb +1 -1
  125. data/test/factories/compliance_host_factory.rb +9 -0
  126. data/test/factories/compliance_log_factory.rb +11 -0
  127. data/test/factories/policy_arf_report_factory.rb +6 -0
  128. data/test/factories/policy_factory.rb +3 -2
  129. data/test/factories/scap_content_related.rb +2 -2
  130. data/test/functional/api/v2/compliance/arf_reports_controller_test.rb +4 -3
  131. data/test/functional/api/v2/compliance/policies_controller_test.rb +2 -2
  132. data/test/functional/api/v2/compliance/scap_contents_controller_test.rb +3 -1
  133. data/test/lib/foreman_openscap/bulk_upload_test.rb +1 -1
  134. data/test/test_plugin_helper.rb +30 -0
  135. data/test/unit/arf_report_status_calculator_test.rb +11 -0
  136. data/test/unit/arf_report_test.rb +148 -0
  137. data/test/unit/compliance_status_test.rb +71 -0
  138. data/test/unit/openscap_host_test.rb +38 -7
  139. data/test/unit/policy_mailer_test.rb +38 -0
  140. data/test/unit/scap_content_test.rb +32 -0
  141. metadata +130 -74
  142. data/app/controllers/scaptimony_arf_reports_controller.rb +0 -34
  143. data/app/controllers/scaptimony_hosts_controller.rb +0 -5
  144. data/app/models/concerns/foreman_openscap/arf_report_extensions.rb +0 -50
  145. data/app/models/concerns/foreman_openscap/asset_extensions.rb +0 -34
  146. data/app/models/concerns/foreman_openscap/scap_content_extensions.rb +0 -40
  147. data/app/overrides/hosts/index/host_arf_report.rb +0 -5
  148. data/app/views/scaptimony_arf_reports/_host_report.html.erb +0 -8
  149. data/app/views/scaptimony_hosts/_host_status.html.erb +0 -17
  150. data/app/views/scaptimony_policies/_scap_content_results.html.erb +0 -7
  151. data/app/views/scaptimony_policies/create.html.erb +0 -2
  152. data/app/views/scaptimony_policies/new.html.erb +0 -2
  153. data/app/views/scaptimony_policies/steps/_scap_content_form.html.erb +0 -17
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+
3
+ class ArfReportStatusCalculatorTest < ActiveSupport::TestCase
4
+
5
+ test 'it should save metrics as bits' do
6
+ calc = ForemanOpenscap::ArfReportStatusCalculator.new(:counters => { 'passed' => 25, 'othered' => 1024, 'failed' => 10 })
7
+ assert_equal 25, calc.status['passed']
8
+ assert_equal ForemanOpenscap::ArfReport::MAX, calc.status['othered']
9
+ assert_equal 10, calc.status['failed']
10
+ end
11
+ end
@@ -0,0 +1,148 @@
1
+ require 'test_plugin_helper'
2
+
3
+ module ForemanOpenscap
4
+ class ArfReportTest < ActiveSupport::TestCase
5
+ setup do
6
+ disable_orchestration
7
+ User.current = users :admin
8
+ ForemanOpenscap::Policy.any_instance.stubs(:ensure_needed_puppetclasses).returns(true)
9
+ @policy = FactoryGirl.create(:policy)
10
+ @asset = FactoryGirl.create(:asset)
11
+ @host = FactoryGirl.create(:compliance_host)
12
+ @failed_source = FactoryGirl.create(:source)
13
+ @passed_source = FactoryGirl.create(:source)
14
+ @log_1 = FactoryGirl.create(:compliance_log, :result => "pass", :source => @passed_source)
15
+ @log_2 = FactoryGirl.create(:compliance_log, :result => "fail", :source => @failed_source)
16
+ @log_3 = FactoryGirl.create(:compliance_log, :result => "pass", :source => @passed_source)
17
+ @status = {:passed => 5, :failed => 1, :othered => 7}.with_indifferent_access
18
+ end
19
+
20
+ test 'equal? should return true when there is no change in report results' do
21
+ log_4 = FactoryGirl.create(:compliance_log, :result => "fail", :source => @failed_source)
22
+ report_1 = FactoryGirl.create(:arf_report, :policy => @policy, :host_id => @host.id, :logs => [@log_1, @log_2])
23
+ report_2 = FactoryGirl.create(:arf_report, :policy => @policy, :host_id => @host.id, :logs => [@log_3, log_4])
24
+
25
+ assert(report_1.equal? report_2)
26
+ end
27
+
28
+ test 'equal? should return false when there is change in report results' do
29
+ new_source = FactoryGirl.create(:source)
30
+ log_4 = FactoryGirl.build(:compliance_log, :result => "pass", :source => new_source)
31
+ report_1 = FactoryGirl.create(:arf_report, :policy => @policy, :host_id => @host.id, :logs => [@log_1, @log_2])
32
+ report_2 = FactoryGirl.create(:arf_report, :policy => @policy, :host_id => @host.id, :logs => [@log_3, log_4])
33
+
34
+ refute(report_1.equal? report_2)
35
+ end
36
+
37
+ test 'equal? should return false when reports have different sets of rules' do
38
+ report_1 = FactoryGirl.create(:arf_report, :policy => @policy, :host_id => @host.id, :logs => [@log_1, @log_2])
39
+ report_2 = FactoryGirl.create(:arf_report, :policy => @policy, :host_id => @host.id, :logs => [@log_3])
40
+
41
+ refute(report_1.equal? report_2)
42
+ end
43
+
44
+ test 'equal? should return false when reports have different hosts' do
45
+ host = FactoryGirl.create(:compliance_host)
46
+ log_4 = FactoryGirl.create(:compliance_log, :result => "fail", :source => @failed_source)
47
+ report_1 = FactoryGirl.create(:arf_report, :policy => @policy, :host_id => @host.id, :logs => [@log_1, @log_2])
48
+ report_2 = FactoryGirl.create(:arf_report, :policy => @policy, :host_id => host.id, :logs => [@log_3, log_4])
49
+
50
+ refute(report_1.equal? report_2)
51
+ end
52
+
53
+ test 'equal? should return false when reports have different policies' do
54
+ policy = FactoryGirl.create(:policy)
55
+ log_4 = FactoryGirl.create(:compliance_log, :result => "fail", :source => @failed_source)
56
+ report_1 = FactoryGirl.create(:arf_report, :policy => @policy, :host_id => @host.id, :logs => [@log_1, @log_2])
57
+ report_2 = FactoryGirl.create(:arf_report, :policy => policy, :host_id => @host.id, :logs => [@log_3, log_4])
58
+
59
+ refute(report_1.equal? report_2)
60
+ end
61
+
62
+ test 'should recognize report that failed' do
63
+ report = FactoryGirl.create(:arf_report, :host_id => @host.id, :status => @status)
64
+ assert report.failed?
65
+ end
66
+
67
+ test 'should recognize report that othered' do
68
+ @status[:failed] = 0
69
+ report = FactoryGirl.create(:arf_report, :host_id => @host.id, :status => @status)
70
+ assert report.othered?
71
+ end
72
+
73
+ test 'should recognize report that passed' do
74
+ @status[:failed], @status[:othered] = 0, 0
75
+ report = FactoryGirl.create(:arf_report, :host_id => @host.id, :status => @status)
76
+ assert report.passed?
77
+ end
78
+
79
+ test 'should return latest report for each of the hosts' do
80
+ reports = []
81
+ host = FactoryGirl.create(:compliance_host)
82
+ 5.times do
83
+ reports << FactoryGirl.create(:arf_report, :host_id => @host.id, :status => @status)
84
+ FactoryGirl.create(:policy_arf_report, :arf_report_id => reports.last.id)
85
+ reports << FactoryGirl.create(:arf_report, :host_id => host.id, :status => @status)
86
+ FactoryGirl.create(:policy_arf_report, :arf_report_id => reports.last.id)
87
+ end
88
+ assert ForemanOpenscap::ArfReport.latest.include? reports[-2]
89
+ assert ForemanOpenscap::ArfReport.latest.include? reports[-1]
90
+ end
91
+
92
+ test 'should return latest report of policy for each of the hosts' do
93
+ reports = []
94
+ host = FactoryGirl.create(:compliance_host)
95
+ policy = FactoryGirl.create(:policy)
96
+ 3.times do
97
+ reports << FactoryGirl.create(:arf_report, :host_id => @host.id, :status => @status)
98
+ FactoryGirl.create(:policy_arf_report, :arf_report_id => reports.last.id, :policy_id => @policy.id)
99
+
100
+ reports << FactoryGirl.create(:arf_report, :host_id => host.id, :status => @status)
101
+ FactoryGirl.create(:policy_arf_report, :arf_report_id => reports.last.id, :policy_id => @policy.id)
102
+
103
+ reports << FactoryGirl.create(:arf_report, :host_id => @host.id, :status => @status)
104
+ FactoryGirl.create(:policy_arf_report, :arf_report_id => reports.last.id, :policy_id => policy.id)
105
+
106
+ reports << FactoryGirl.create(:arf_report, :host_id => host.id, :status => @status)
107
+ FactoryGirl.create(:policy_arf_report, :arf_report_id => reports.last.id, :policy_id => policy.id)
108
+ end
109
+
110
+ assert ForemanOpenscap::ArfReport.latest_of_policy(policy).include? reports[-1]
111
+ assert ForemanOpenscap::ArfReport.latest_of_policy(policy).include? reports[-2]
112
+ assert ForemanOpenscap::ArfReport.latest_of_policy(@policy).include? reports[-3]
113
+ assert ForemanOpenscap::ArfReport.latest_of_policy(@policy).include? reports[-4]
114
+ assert_equal 2, ForemanOpenscap::ArfReport.latest_of_policy(@policy).count
115
+ assert_equal 2, ForemanOpenscap::ArfReport.latest_of_policy(policy).count
116
+ end
117
+
118
+ context 'retrieving reports by status' do
119
+ setup do
120
+ @passed_status = {:passed => 5, :failed => 0, :othered => 0}.with_indifferent_access
121
+ @othered_status = {:passed => 5, :failed => 0, :othered => 3}.with_indifferent_access
122
+ @failed_reports = []
123
+ @othered_reports = []
124
+ @passed_reports = []
125
+ 3.times do
126
+ @failed_reports << FactoryGirl.create(:arf_report, :host_id => @host.id, :status => @status)
127
+ @passed_reports << FactoryGirl.create(:arf_report, :host_id => @host.id, :status => @passed_status)
128
+ @othered_reports << FactoryGirl.create(:arf_report, :host_id => @host.id, :status => @othered_status)
129
+ end
130
+ end
131
+
132
+ test 'should return failed reports' do
133
+ assert_equal 3, ForemanOpenscap::ArfReport.failed.count
134
+ @failed_reports.each { |failure| assert ForemanOpenscap::ArfReport.failed.include?(failure) }
135
+ end
136
+
137
+ test 'should return othered reports' do
138
+ assert_equal 3, ForemanOpenscap::ArfReport.othered.count
139
+ @othered_reports.each { |other| assert ForemanOpenscap::ArfReport.othered.include?(other) }
140
+ end
141
+
142
+ test 'should return passed reports' do
143
+ assert_equal 3, ForemanOpenscap::ArfReport.passed.count
144
+ @passed_reports.each { |pass| assert ForemanOpenscap::ArfReport.passed.include?(pass) }
145
+ end
146
+ end
147
+ end
148
+ end
@@ -0,0 +1,71 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class ComplianceStatusTest < ActiveSupport::TestCase
4
+ def setup
5
+ disable_orchestration
6
+ User.current = users :admin
7
+ ForemanOpenscap::Policy.any_instance.stubs(:ensure_needed_puppetclasses).returns(true)
8
+ @policy_a = FactoryGirl.create(:policy)
9
+ @policy_b = FactoryGirl.create(:policy)
10
+ @failed_report = FactoryGirl.create(:arf_report)
11
+ @failed_report.stubs(:failed?).returns(true)
12
+ @passed_report = FactoryGirl.create(:arf_report)
13
+ @passed_report.stubs(:failed?).returns(false)
14
+ @passed_report.stubs(:othered?).returns(false)
15
+ @othered_report = FactoryGirl.create(:arf_report)
16
+ @othered_report.stubs(:failed?).returns(false)
17
+ @othered_report.stubs(:othered?).returns(true)
18
+ end
19
+
20
+ test 'status should be incompliant' do
21
+ status = ForemanOpenscap::ComplianceStatus.new
22
+ host = FactoryGirl.create(:compliance_host, :policies => [@policy_a])
23
+ status.host = host
24
+ host.stubs(:last_report_for_policy).returns(@failed_report)
25
+ s = status.to_status
26
+ assert_equal 2, status.to_status
27
+ end
28
+
29
+ test 'status should be inconclusive' do
30
+ status = ForemanOpenscap::ComplianceStatus.new
31
+ host = FactoryGirl.create(:compliance_host, :policies => [@policy_a])
32
+ host.stubs(:last_report_for_policy).returns(@othered_report)
33
+ status.host = host
34
+ assert_equal 1, status.to_status
35
+ end
36
+
37
+ test 'status should be compliant' do
38
+ status = ForemanOpenscap::ComplianceStatus.new
39
+ host = FactoryGirl.create(:compliance_host, :policies => [@policy_a])
40
+ host.stubs(:last_report_for_policy).returns(@passed_report)
41
+ status.host = host
42
+ assert_equal 0, status.to_status
43
+ end
44
+
45
+ test 'status should be incompliant for multiple policies' do
46
+ status = ForemanOpenscap::ComplianceStatus.new
47
+ host = FactoryGirl.create(:compliance_host, :policies => [@policy_a, @policy_b])
48
+ status.host = host
49
+ host.stubs(:last_report_for_policy).returns(@failed_report, @passed_report)
50
+ assert_equal 2, status.to_status
51
+ end
52
+
53
+ test 'status should be inconclusive for multiple policies' do
54
+ status = ForemanOpenscap::ComplianceStatus.new
55
+ host = FactoryGirl.create(:compliance_host, :policies => [@policy_a, @policy_b])
56
+ host.stubs(:last_report_for_policy).returns(@othered_report, @passed_report)
57
+ status.host = host
58
+ assert_equal 1, status.to_status
59
+ end
60
+
61
+ test 'status should be compliant for multiple policies' do
62
+ status = ForemanOpenscap::ComplianceStatus.new
63
+ host = FactoryGirl.create(:compliance_host, :policies => [@policy_a, @policy_b])
64
+ passed_report = FactoryGirl.create(:arf_report)
65
+ passed_report.stubs(:othered?).returns(false)
66
+ passed_report.stubs(:failed?).returns(false)
67
+ host.stubs(:last_report_for_policy).returns(passed_report, @passed_report)
68
+ status.host = host
69
+ assert_equal 0, status.to_status
70
+ end
71
+ end
@@ -4,24 +4,55 @@ class OpenscapHostTest < ActiveSupport::TestCase
4
4
  setup do
5
5
  disable_orchestration
6
6
  User.current = users :admin
7
- Scaptimony::Policy.any_instance.stubs(:ensure_needed_puppetclasses).returns(true)
7
+ ForemanOpenscap::Policy.any_instance.stubs(:ensure_needed_puppetclasses).returns(true)
8
+ @policy = FactoryGirl.create(:policy)
8
9
  end
9
10
 
10
11
  test 'Host has policy' do
11
12
  host = FactoryGirl.create(:host)
12
13
  assert_empty(host.policies)
13
- policy = FactoryGirl.create(:policy)
14
14
 
15
- assert(policy.assign_hosts([host]), 'Host policies should be assigned')
16
- assert_includes(host.policies, policy)
15
+ assert(@policy.assign_hosts([host]), 'Host policies should be assigned')
16
+ assert_includes(host.policies, @policy)
17
17
  end
18
18
 
19
19
  test 'Host has policies via its hostgroup' do
20
20
  host = FactoryGirl.create(:host, :with_hostgroup)
21
21
  hostgroup = host.hostgroup
22
- policy = FactoryGirl.create(:policy)
23
- assert(policy.hostgroup_ids = ["#{hostgroup.id}"])
22
+ assert(@policy.hostgroup_ids = ["#{hostgroup.id}"])
24
23
  refute_empty(host.combined_policies)
25
- assert_includes(host.combined_policies, policy)
24
+ assert_includes(host.combined_policies, @policy)
25
+ end
26
+
27
+ context 'testing scap_status_changed?' do
28
+ setup do
29
+ @host = FactoryGirl.create(:compliance_host)
30
+ @report_1 = FactoryGirl.create(:arf_report, :policy => @policy, :host_id => @host.id)
31
+ @report_2 = FactoryGirl.create(:arf_report, :policy => @policy, :host_id => @host.id)
32
+ @policy_report_1 = FactoryGirl.create(:policy_arf_report, :policy_id => @policy.id, :arf_report_id => @report_1.id)
33
+ @policy_report_2 = FactoryGirl.create(:policy_arf_report, :policy_id => @policy.id, :arf_report_id => @report_2.id)
34
+ end
35
+
36
+ test "reports for policy should return expected reports" do
37
+ reports = @host.reports_for_policy(@policy)
38
+ assert_equal 2, reports.count
39
+ assert reports.include?(@report_1)
40
+ assert reports.include?(@report_2)
41
+ end
42
+
43
+ test 'scap_status_changed should detect status change' do
44
+ ForemanOpenscap::ArfReport.any_instance.stubs(:equal?).returns(false)
45
+ assert @host.scap_status_changed?(@policy)
46
+ end
47
+
48
+ test 'scap_status_changed should not detect status change when there is none' do
49
+ ForemanOpenscap::ArfReport.any_instance.stubs(:equal?).returns(true)
50
+ refute @host.scap_status_changed?(@policy)
51
+ end
52
+
53
+ test 'scap_status_changed should not detect status change when there are reports < 2' do
54
+ @report_2.destroy
55
+ refute @host.scap_status_changed?(@policy)
56
+ end
26
57
  end
27
58
  end
@@ -0,0 +1,38 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class PolicyMailerTest < ActiveSupport::TestCase
4
+ setup do
5
+ @user = User.current = users :admin
6
+
7
+ FactoryGirl.create(:mail_notification,
8
+ :name => :openscap_policy_summary,
9
+ :description => N_('A summary of reports for OpenScap policies'),
10
+ :mailer => 'ForemanOpenscap::PolicyMailer',
11
+ :method => 'policy_summary',
12
+ :subscription_type => 'report',
13
+ )
14
+
15
+ @user.mail_notifications << MailNotification[:openscap_policy_summary]
16
+
17
+ ActionMailer::Base.deliveries = []
18
+ @user.user_mail_notifications.first.deliver
19
+ @email = ActionMailer::Base.deliveries.first
20
+ end
21
+
22
+ test 'policy mailer should deliver summary' do
23
+ assert @email.to.include?("admin@someware.com")
24
+ end
25
+
26
+ test 'policy mailer should contain body' do
27
+ refute @email.body.nil?
28
+ end
29
+
30
+ test 'policy 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 'policy mailer sends Foreman URL in body' do
36
+ assert @email.body.include? Setting[:foreman_url]
37
+ end
38
+ end
@@ -0,0 +1,32 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class ScapContentTest < ActiveSupport::TestCase
4
+ setup do
5
+ @scap_file = File.new('../foreman_openscap/test/files/scap_contents/ssg-fedora-ds.xml', 'rb').read
6
+ end
7
+ context 'validate scap contents' do
8
+ test 'create scap content' do
9
+ scap_content = ForemanOpenscap::ScapContent.new(:title => 'Fedora', :scap_file => @scap_file)
10
+ assert(scap_content.valid?)
11
+ end
12
+
13
+ test 'scap content should fail if no openscap proxy' do
14
+ SmartProxy.stubs(:with_features).returns([])
15
+ ProxyAPI::AvailableProxy.any_instance.stubs(:available?).returns(false)
16
+ scap_content = ForemanOpenscap::ScapContent.new(:title => 'Fedora', :scap_file => @scap_file)
17
+ refute(scap_content.save)
18
+ assert_includes(scap_content.errors.messages[:base], 'No Proxy with OpenScap features')
19
+ end
20
+
21
+ test 'proxy_url should return the first available proxy it finds' do
22
+ available_proxy = SmartProxy.with_features('Openscap').first
23
+ unavailable_proxy = FactoryGirl.create(:smart_proxy, :url => 'http://proxy.example.com:8443', :features => [FactoryGirl.create(:feature, :name => 'Openscap')])
24
+ proxy1_url = ProxyAPI::AvailableProxy.new(:url => available_proxy.url)
25
+ proxy2_url = ProxyAPI::AvailableProxy.new(:url => unavailable_proxy.url)
26
+ proxy1_url.stubs(:available?).returns(available_proxy.url)
27
+ proxy2_url.stubs(:available?).returns(false)
28
+ scap_content = ForemanOpenscap::ScapContent.new(:title => 'Fedora', :scap_file => @scap_file)
29
+ assert_equal(available_proxy.url, scap_content.proxy_url)
30
+ end
31
+ end
32
+ end
metadata CHANGED
@@ -1,43 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_openscap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Šimon Lukašík
8
+ - Shlomi Zadok
9
+ - Marek Hulan
10
+ - Ondrej Prazak
8
11
  autorequire:
9
12
  bindir: bin
10
13
  cert_chain: []
11
- date: 2015-08-19 00:00:00.000000000 Z
14
+ date: 2015-11-01 00:00:00.000000000 Z
12
15
  dependencies:
13
16
  - !ruby/object:Gem::Dependency
14
17
  name: deface
15
18
  requirement: !ruby/object:Gem::Requirement
16
19
  requirements:
17
- - - "<"
20
+ - - <
18
21
  - !ruby/object:Gem::Version
19
22
  version: '2.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "<"
27
+ - - <
25
28
  - !ruby/object:Gem::Version
26
29
  version: '2.0'
27
- - !ruby/object:Gem::Dependency
28
- name: scaptimony
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 0.3.2
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 0.3.2
41
30
  description: Foreman plug-in for managing security compliance reports
42
31
  email:
43
32
  - slukasik@redhat.com
@@ -55,33 +44,44 @@ files:
55
44
  - app/controllers/api/v2/compliance/arf_reports_controller.rb
56
45
  - app/controllers/api/v2/compliance/policies_controller.rb
57
46
  - app/controllers/api/v2/compliance/scap_contents_controller.rb
58
- - app/controllers/scaptimony_arf_reports_controller.rb
59
- - app/controllers/scaptimony_dashboard_controller.rb
60
- - app/controllers/scaptimony_hosts_controller.rb
61
- - app/controllers/scaptimony_policies_controller.rb
62
- - app/controllers/scaptimony_policy_dashboard_controller.rb
63
- - app/controllers/scaptimony_scap_contents_controller.rb
47
+ - app/controllers/arf_reports_controller.rb
48
+ - app/controllers/compliance_dashboard_controller.rb
49
+ - app/controllers/compliance_hosts_controller.rb
50
+ - app/controllers/policies_controller.rb
51
+ - app/controllers/policy_dashboard_controller.rb
52
+ - app/controllers/scap_contents_controller.rb
53
+ - app/helpers/arf_report_dashboard_helper.rb
64
54
  - app/helpers/arf_reports_helper.rb
55
+ - app/helpers/compliance_hosts_helper.rb
65
56
  - app/helpers/concerns/foreman_openscap/hosts_helper_extensions.rb
66
- - app/helpers/scaptimony_policies_helper.rb
67
- - app/helpers/scaptimony_policy_dashboard_helper.rb
68
- - app/helpers/scaptimony_report_dashboard_helper.rb
69
- - app/models/concerns/foreman_openscap/arf_report_extensions.rb
70
- - app/models/concerns/foreman_openscap/asset_extensions.rb
57
+ - app/helpers/policies_helper.rb
58
+ - app/helpers/policy_dashboard_helper.rb
59
+ - app/lib/proxy_api/available_proxy.rb
60
+ - app/lib/proxy_api/openscap.rb
61
+ - app/mailers/foreman_openscap/policy_mailer.rb
62
+ - app/models/concerns/foreman_openscap/compliance_status_scoped_search.rb
71
63
  - app/models/concerns/foreman_openscap/host_extensions.rb
72
64
  - app/models/concerns/foreman_openscap/hostgroup_extensions.rb
73
- - app/models/concerns/foreman_openscap/policy_extensions.rb
74
- - app/models/concerns/foreman_openscap/scap_content_extensions.rb
75
- - app/overrides/hosts/index/host_arf_report.rb
65
+ - app/models/foreman_openscap/arf_report.rb
66
+ - app/models/foreman_openscap/asset.rb
67
+ - app/models/foreman_openscap/asset_policy.rb
68
+ - app/models/foreman_openscap/compliance_status.rb
69
+ - app/models/foreman_openscap/policy.rb
70
+ - app/models/foreman_openscap/policy_arf_report.rb
71
+ - app/models/foreman_openscap/policy_revision.rb
72
+ - app/models/foreman_openscap/scap_content.rb
73
+ - app/models/foreman_openscap/scap_content_profile.rb
76
74
  - app/overrides/hosts/overview/host_compliance_status.rb
77
- - app/services/scaptimony/host_report_dashboard/data.rb
78
- - app/services/scaptimony/policy_dashboard/data.rb
79
- - app/services/scaptimony/report_dashboard/data.rb
75
+ - app/services/foreman_openscap/arf_report_status_calculator.rb
76
+ - app/services/foreman_openscap/host_report_dashboard/data.rb
77
+ - app/services/foreman_openscap/policy_dashboard/data.rb
78
+ - app/services/foreman_openscap/report_dashboard/data.rb
80
79
  - app/views/api/v2/compliance/arf_reports/base.json.rabl
81
80
  - app/views/api/v2/compliance/arf_reports/index.json.rabl
82
81
  - app/views/api/v2/compliance/arf_reports/main.json.rabl
83
82
  - app/views/api/v2/compliance/arf_reports/show.json.rabl
84
83
  - app/views/api/v2/compliance/policies/base.json.rabl
84
+ - app/views/api/v2/compliance/policies/create.json.rabl
85
85
  - app/views/api/v2/compliance/policies/index.json.rabl
86
86
  - app/views/api/v2/compliance/policies/main.json.rabl
87
87
  - app/views/api/v2/compliance/policies/show.json.rabl
@@ -89,44 +89,85 @@ files:
89
89
  - app/views/api/v2/compliance/scap_contents/index.json.rabl
90
90
  - app/views/api/v2/compliance/scap_contents/main.json.rabl
91
91
  - app/views/api/v2/compliance/scap_contents/show.json.rabl
92
- - app/views/dashboard/_foreman_openscap_host_reports_widget.html.erb
93
- - app/views/dashboard/_foreman_openscap_reports_breakdown_widget.html.erb
94
- - app/views/scaptimony_arf_reports/_host_report.html.erb
95
- - app/views/scaptimony_arf_reports/_list.html.erb
96
- - app/views/scaptimony_arf_reports/index.html.erb
97
- - app/views/scaptimony_arf_reports/show.html.erb
98
- - app/views/scaptimony_hosts/_host_status.html.erb
99
- - app/views/scaptimony_hosts/show.html.erb
100
- - app/views/scaptimony_policies/_form.html.erb
101
- - app/views/scaptimony_policies/_list.html.erb
102
- - app/views/scaptimony_policies/_scap_content_results.html.erb
103
- - app/views/scaptimony_policies/create.html.erb
104
- - app/views/scaptimony_policies/disassociate_multiple_hosts.html.erb
105
- - app/views/scaptimony_policies/edit.html.erb
106
- - app/views/scaptimony_policies/index.html.erb
107
- - app/views/scaptimony_policies/new.html.erb
108
- - app/views/scaptimony_policies/select_multiple_hosts.html.erb
109
- - app/views/scaptimony_policies/show.html.erb
110
- - app/views/scaptimony_policies/steps/_create_policy_form.html.erb
111
- - app/views/scaptimony_policies/steps/_hostgroups_form.html.erb
112
- - app/views/scaptimony_policies/steps/_locations_form.html.erb
113
- - app/views/scaptimony_policies/steps/_organizations_form.html.erb
114
- - app/views/scaptimony_policies/steps/_scap_content_form.html.erb
115
- - app/views/scaptimony_policies/steps/_schedule_form.html.erb
116
- - app/views/scaptimony_policies/steps/_step_form.html.erb
117
- - app/views/scaptimony_policies/welcome.html.erb
118
- - app/views/scaptimony_policy_dashboard/_policy_chart_widget.html.erb
119
- - app/views/scaptimony_policy_dashboard/_policy_reports.html.erb
120
- - app/views/scaptimony_policy_dashboard/_policy_status_widget.html.erb
121
- - app/views/scaptimony_policy_dashboard/index.html.erb
122
- - app/views/scaptimony_scap_contents/_form.html.erb
123
- - app/views/scaptimony_scap_contents/_list.html.erb
124
- - app/views/scaptimony_scap_contents/edit.html.erb
125
- - app/views/scaptimony_scap_contents/index.html.erb
126
- - app/views/scaptimony_scap_contents/new.html.erb
127
- - app/views/scaptimony_scap_contents/welcome.html.erb
92
+ - app/views/arf_reports/_list.html.erb
93
+ - app/views/arf_reports/_metrics.html.erb
94
+ - app/views/arf_reports/_output.html.erb
95
+ - app/views/arf_reports/index.html.erb
96
+ - app/views/arf_reports/show.html.erb
97
+ - app/views/arf_reports/show_html.html.erb
98
+ - app/views/compliance_hosts/_compliance_status.erb
99
+ - app/views/compliance_hosts/show.html.erb
100
+ - app/views/dashboard/_compliance_host_reports_widget.html.erb
101
+ - app/views/dashboard/_compliance_reports_breakdown_widget.html.erb
102
+ - app/views/foreman_openscap/policy_mailer/_dashboard.erb
103
+ - app/views/foreman_openscap/policy_mailer/_hosts.erb
104
+ - app/views/foreman_openscap/policy_mailer/_list.erb
105
+ - app/views/foreman_openscap/policy_mailer/_policy.erb
106
+ - app/views/foreman_openscap/policy_mailer/policy_summary.erb
107
+ - app/views/policies/_form.html.erb
108
+ - app/views/policies/_list.html.erb
109
+ - app/views/policies/_scap_content_results.html.erb
110
+ - app/views/policies/create.html.erb
111
+ - app/views/policies/disassociate_multiple_hosts.html.erb
112
+ - app/views/policies/edit.html.erb
113
+ - app/views/policies/index.html.erb
114
+ - app/views/policies/new.html.erb
115
+ - app/views/policies/select_multiple_hosts.html.erb
116
+ - app/views/policies/show.html.erb
117
+ - app/views/policies/steps/_create_policy_form.html.erb
118
+ - app/views/policies/steps/_hostgroups_form.html.erb
119
+ - app/views/policies/steps/_locations_form.html.erb
120
+ - app/views/policies/steps/_organizations_form.html.erb
121
+ - app/views/policies/steps/_scap_content_form.html.erb
122
+ - app/views/policies/steps/_schedule_form.html.erb
123
+ - app/views/policies/steps/_step_form.html.erb
124
+ - app/views/policies/welcome.html.erb
125
+ - app/views/policy_dashboard/_policy_chart_widget.html.erb
126
+ - app/views/policy_dashboard/_policy_reports.html.erb
127
+ - app/views/policy_dashboard/_policy_status_widget.html.erb
128
+ - app/views/policy_dashboard/index.html.erb
129
+ - app/views/scap_contents/_form.html.erb
130
+ - app/views/scap_contents/_list.html.erb
131
+ - app/views/scap_contents/edit.html.erb
132
+ - app/views/scap_contents/index.html.erb
133
+ - app/views/scap_contents/new.html.erb
134
+ - app/views/scap_contents/welcome.html.erb
128
135
  - config/routes.rb
136
+ - db/migrate/20141013172051_create_scaptimony_policies.rb
137
+ - db/migrate/20141014105333_create_scaptimony_assets.rb
138
+ - db/migrate/20141015092642_create_scaptimony_arf_reports.rb
139
+ - db/migrate/20141015115511_add_arf_report_unique_constraint.rb
140
+ - db/migrate/20141104164201_create_scaptimony_scap_contents.rb
141
+ - db/migrate/20141104171545_create_scaptimony_policy_revisions.rb
142
+ - db/migrate/20141105174625_add_description_to_scaptimony_policy_revisions.rb
143
+ - db/migrate/20141105174834_add_columns_to_scaptimony_policies.rb
144
+ - db/migrate/20141107091756_add_columns_to_scaptimony_scap_contents.rb
145
+ - db/migrate/20141111104519_add_constraint_to_scaptimony_scap_contents.rb
146
+ - db/migrate/20141113221054_create_scaptimony_scap_content_profiles.rb
147
+ - db/migrate/20141116170632_remove_xccdf_profile_from_scaptimony_policies.rb
148
+ - db/migrate/20141116171305_add_profile_to_scaptimony_policies.rb
149
+ - db/migrate/20141118142954_add_constraint_to_scaptimony_policies.rb
150
+ - db/migrate/20141119164918_create_scaptimony_xccdf_results.rb
151
+ - db/migrate/20141119175434_create_scaptimony_xccdf_rules.rb
152
+ - db/migrate/20141119182606_create_scaptimony_xccdf_rule_results.rb
153
+ - db/migrate/20141121120326_create_scaptimony_arf_report_breakdowns.rb
154
+ - db/migrate/20141121164042_replace_arf_report_breakdown_view.rb
155
+ - db/migrate/20141206211151_create_scaptimony_assets_policies.rb
156
+ - db/migrate/20141214112917_add_scap_file_to_scap_content.rb
157
+ - db/migrate/20141216154502_rename_scaptimony_asset_policies.rb
158
+ - db/migrate/20150111085317_polymorph_asset.rb
159
+ - db/migrate/20150112152944_create_scaptimony_arf_report_raws.rb
160
+ - db/migrate/20150114210634_rename_scaptimony_arf_report_raw_raw.rb
161
+ - db/migrate/20150115155947_add_scaptimony_scap_content_digest.rb
162
+ - db/migrate/20150116083129_add_day_of_month_and_cron_line_to_scaptimony_policy.rb
163
+ - db/migrate/20150821100137_migrate_from_scaptimony.rb
164
+ - db/migrate/20150827123826_remove_scaptimony_permissions.rb
165
+ - db/migrate/20150925124959_create_policy_arf_reports.rb
166
+ - db/migrate/20150929124853_add_result_to_logs.rb
167
+ - db/migrate/20150929152345_move_arf_reports_to_reports_table.rb
168
+ - db/migrate/20151023131950_link_arf_report_directly_to_host.rb
129
169
  - db/seeds.d/openscap_feature.rb
170
+ - db/seeds.d/openscap_policy_notification.rb
130
171
  - db/seeds.d/openscap_scap_default.rb
131
172
  - lib/foreman_openscap.rb
132
173
  - lib/foreman_openscap/bulk_upload.rb
@@ -136,6 +177,9 @@ files:
136
177
  - lib/tasks/foreman_openscap_tasks.rake
137
178
  - test/factories/arf_report_factory.rb
138
179
  - test/factories/asset_factory.rb
180
+ - test/factories/compliance_host_factory.rb
181
+ - test/factories/compliance_log_factory.rb
182
+ - test/factories/policy_arf_report_factory.rb
139
183
  - test/factories/policy_factory.rb
140
184
  - test/factories/scap_content_related.rb
141
185
  - test/files/scap_contents/ssg-fedora-ds.xml
@@ -144,7 +188,12 @@ files:
144
188
  - test/functional/api/v2/compliance/scap_contents_controller_test.rb
145
189
  - test/lib/foreman_openscap/bulk_upload_test.rb
146
190
  - test/test_plugin_helper.rb
191
+ - test/unit/arf_report_status_calculator_test.rb
192
+ - test/unit/arf_report_test.rb
193
+ - test/unit/compliance_status_test.rb
147
194
  - test/unit/openscap_host_test.rb
195
+ - test/unit/policy_mailer_test.rb
196
+ - test/unit/scap_content_test.rb
148
197
  homepage: https://github.com/OpenSCAP/foreman_openscap
149
198
  licenses:
150
199
  - GPL-3.0
@@ -155,12 +204,12 @@ require_paths:
155
204
  - lib
156
205
  required_ruby_version: !ruby/object:Gem::Requirement
157
206
  requirements:
158
- - - ">="
207
+ - - '>='
159
208
  - !ruby/object:Gem::Version
160
209
  version: '0'
161
210
  required_rubygems_version: !ruby/object:Gem::Requirement
162
211
  requirements:
163
- - - ">="
212
+ - - '>='
164
213
  - !ruby/object:Gem::Version
165
214
  version: '0'
166
215
  requirements: []
@@ -170,15 +219,22 @@ signing_key:
170
219
  specification_version: 4
171
220
  summary: Foreman plug-in for displaying OpenSCAP audit reports
172
221
  test_files:
222
+ - test/factories/policy_arf_report_factory.rb
173
223
  - test/factories/policy_factory.rb
224
+ - test/factories/compliance_log_factory.rb
174
225
  - test/factories/asset_factory.rb
175
226
  - test/factories/scap_content_related.rb
176
227
  - test/factories/arf_report_factory.rb
228
+ - test/factories/compliance_host_factory.rb
177
229
  - test/lib/foreman_openscap/bulk_upload_test.rb
230
+ - test/unit/scap_content_test.rb
178
231
  - test/unit/openscap_host_test.rb
232
+ - test/unit/compliance_status_test.rb
233
+ - test/unit/arf_report_status_calculator_test.rb
234
+ - test/unit/policy_mailer_test.rb
235
+ - test/unit/arf_report_test.rb
179
236
  - test/files/scap_contents/ssg-fedora-ds.xml
180
237
  - test/functional/api/v2/compliance/policies_controller_test.rb
181
238
  - test/functional/api/v2/compliance/scap_contents_controller_test.rb
182
239
  - test/functional/api/v2/compliance/arf_reports_controller_test.rb
183
240
  - test/test_plugin_helper.rb
184
- has_rdoc: