foreman_openscap 0.10.0 → 0.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: caa574656df74e25c0475002df05b229193b872e
4
- data.tar.gz: 307217d077f8f6ab73c167fa0a48105d12145d32
3
+ metadata.gz: 57a91e2bc0562de60ea4959460a9afe2029dddcc
4
+ data.tar.gz: 5b1ed88b9b0d29381eccff2d5349c965b99c65d5
5
5
  SHA512:
6
- metadata.gz: 350cb9657d7ac2939208c7264076c08da48004345666085df5260246e60aa45817d05667a258825993e76bf1369670187f7a847dd2b156c447dbadd56a1c3bdd
7
- data.tar.gz: 20fd5f82f889557c8c14df2b5afc1d8f79535ee9b2846ab13c549f7748a836260554f561e90ea5f61e69b00c132dc0d180bd8e81851f60878aec6ca71c3aea72
6
+ metadata.gz: 199215c239ad13dd1e5ed6c971bd324f9dad62f138c5c0d42689dfa85050c71020514d247610e3c81d3acad4420927dc25d3e22cfe84355576b7067ecef914ab
7
+ data.tar.gz: 51af4f9460056312001d0b7edec878a28adc6aba39876682f36825fe9decb9f206acaff598981958704699497d0aebb3282912d60dd8b6ea5f25f9499f79d770
@@ -15,11 +15,9 @@ module ForemanOpenscap
15
15
  end
16
16
 
17
17
  def search_by_policy_name(_key, _operator, policy_name)
18
- cond = sanitize_policy_name(policy_name)
19
- { :conditions => ArfReport.arel_table[:id].in(
20
- PolicyArfReport.select(PolicyArfReport.arel_table[:arf_report_id])
21
- .of_policy(Policy.find_by(name: cond).id).ast
22
- ).to_sql }
18
+ query = PolicyArfReport.of_policy(Policy.find_by(:name => policy_name))
19
+ .select(PolicyArfReport.arel_table[:arf_report_id]).to_sql
20
+ query_conditions query
23
21
  end
24
22
 
25
23
  def search_by_comply_with(_key, _operator, policy_name)
@@ -35,11 +33,9 @@ module ForemanOpenscap
35
33
  end
36
34
 
37
35
  def search_by_policy_results(policy_name, &selection)
38
- cond = sanitize_policy_name(policy_name)
39
- { :conditions => ArfReport.arel_table[:id].in(
40
- ArfReport.select(ArfReport.arel_table[:id])
41
- .latest_of_policy(Policy.find_by(name: cond)).instance_eval(&selection).ast
42
- ).to_sql }
36
+ query = ArfReport.of_policy(Policy.find_by(:name => policy_name).id)
37
+ .instance_eval(&selection).select(ArfReport.arel_table[:id]).to_sql
38
+ query_conditions query
43
39
  end
44
40
 
45
41
  def search_by_last_for(key, operator, by)
@@ -66,8 +62,8 @@ module ForemanOpenscap
66
62
 
67
63
  private
68
64
 
69
- def sanitize_policy_name(policy_name)
70
- sanitize_sql_for_conditions('foreman_openscap_policies.name' => policy_name)
65
+ def query_conditions(query)
66
+ { :conditions => "reports.id IN (#{query})" }
71
67
  end
72
68
  end
73
69
 
@@ -0,0 +1,9 @@
1
+ object @policy
2
+
3
+ child :hosts => :hosts do |host|
4
+ attributes :id, :name
5
+ end
6
+
7
+ child :hostgroups => :hostgroups do |hostgroup|
8
+ attributes :id, :name, :title
9
+ end
@@ -1,5 +1,6 @@
1
1
  object @policy
2
2
 
3
3
  extends "api/v2/compliance/policies/base"
4
+ extends "api/v2/compliance/policies/children"
4
5
 
5
6
  attributes :created_at, :updated_at
@@ -1,7 +1,4 @@
1
1
  object @policy
2
2
 
3
- child :hostgroups => :hostgroups do |hostgroup|
4
- attributes :id, :name, :title
5
- end
6
-
7
3
  extends "api/v2/compliance/policies/main"
4
+ extends "api/v2/compliance/policies/children"
@@ -1,3 +1,3 @@
1
1
  module ForemanOpenscap
2
- VERSION = "0.10.0".freeze
2
+ VERSION = "0.10.1".freeze
3
3
  end
@@ -14,6 +14,7 @@ class Api::V2::Compliance::ArfReportsControllerTest < ActionController::TestCase
14
14
 
15
15
  @from_json = arf_from_json "#{ForemanOpenscap::Engine.root}/test/files/arf_report/arf_report.json"
16
16
  @cname = '9521a5c5-8f44-495f-b087-20e86b30bf67'
17
+ @proxy = FactoryBot.create(:smart_proxy, :url => "http://smart-proxy.org:8000")
17
18
  end
18
19
 
19
20
  test "should get index" do
@@ -144,6 +145,99 @@ class Api::V2::Compliance::ArfReportsControllerTest < ActionController::TestCase
144
145
  assert_equal new_msgs.first.digest, Digest::SHA1.hexdigest("Disable Firefox Configuration File ROT-13 Encoding Changed For Test")
145
146
  end
146
147
 
148
+ test "should find reports by policy name" do
149
+ reports_cleanup
150
+ report_a = create_arf_report
151
+ report_b = create_arf_report
152
+ policy = FactoryBot.create(:policy)
153
+ FactoryBot.create(:policy_arf_report, :policy_id => @policy.id, :arf_report_id => report_a.id)
154
+ FactoryBot.create(:policy_arf_report, :policy_id => policy.id, :arf_report_id => report_b.id)
155
+
156
+ get :index, :params => { :search => "compliance_policy=#{policy.name}" }, :session => set_session_user
157
+ response = ActiveSupport::JSON.decode(@response.body)
158
+ assert_response :success
159
+ assert_equal 1, response['results'].count
160
+ end
161
+
162
+ test "should find reports compliant with policy" do
163
+ reports_cleanup
164
+ policy = FactoryBot.create(:policy)
165
+ create_arf_report_for_search({ "passed" => 1, "othered" => 2, "failed" => 3 }, @policy)
166
+ create_arf_report_for_search({ "passed" => 1, "othered" => 0, "failed" => 0 }, @policy)
167
+ create_arf_report_for_search({ "passed" => 1, "othered" => 2, "failed" => 0 }, @policy)
168
+ create_arf_report_for_search({ "passed" => 3, "othered" => 0, "failed" => 0 }, @policy)
169
+ create_arf_report_for_search({ "passed" => 5, "othered" => 0, "failed" => 0 }, policy)
170
+
171
+ get :index, :params => { :search => "comply_with=#{@policy.name}" }, :session => set_session_user
172
+ response = ActiveSupport::JSON.decode(@response.body)
173
+ assert_response :success
174
+ assert_equal 2, response['results'].count
175
+ end
176
+
177
+ test "should find reports inconclusive for policy" do
178
+ reports_cleanup
179
+ policy = FactoryBot.create(:policy)
180
+ create_arf_report_for_search({ "passed" => 1, "othered" => 5, "failed" => 0 }, @policy)
181
+ create_arf_report_for_search({ "passed" => 1, "othered" => 2, "failed" => 3 }, @policy)
182
+ create_arf_report_for_search({ "passed" => 1, "othered" => 0, "failed" => 0 }, @policy)
183
+ create_arf_report_for_search({ "passed" => 1, "othered" => 2, "failed" => 0 }, @policy)
184
+ create_arf_report_for_search({ "passed" => 2, "othered" => 3, "failed" => 0 }, policy)
185
+
186
+ get :index, :params => { :search => "inconclusive_with=#{@policy.name}" }, :session => set_session_user
187
+ response = ActiveSupport::JSON.decode(@response.body)
188
+ assert_response :success
189
+ assert_equal 2, response['results'].count
190
+ end
191
+
192
+ test "should find reports failing for policy" do
193
+ reports_cleanup
194
+ policy = FactoryBot.create(:policy)
195
+ create_arf_report_for_search({ "passed" => 0, "othered" => 0, "failed" => 1 }, @policy)
196
+ create_arf_report_for_search({ "passed" => 1, "othered" => 0, "failed" => 0 }, @policy)
197
+ create_arf_report_for_search({ "passed" => 1, "othered" => 2, "failed" => 0 }, @policy)
198
+ create_arf_report_for_search({ "passed" => 1, "othered" => 2, "failed" => 4 }, @policy)
199
+ create_arf_report_for_search({ "passed" => 2, "othered" => 3, "failed" => 7 }, policy)
200
+
201
+ get :index, :params => { :search => "not_comply_with=#{@policy.name}" }, :session => set_session_user
202
+ response = ActiveSupport::JSON.decode(@response.body)
203
+ assert_response :success
204
+ assert_equal 2, response['results'].count
205
+ end
206
+
207
+ test "should find last report for policy" do
208
+ reports_cleanup
209
+ policy = FactoryBot.create(:policy)
210
+ create_arf_report_for_search({ "passed" => 1, "othered" => 0, "failed" => 0 }, @policy)
211
+ create_arf_report_for_search({ "passed" => 1, "othered" => 0, "failed" => 4 }, @policy)
212
+ create_arf_report_for_search({ "passed" => 1, "othered" => 0, "failed" => 0 }, policy)
213
+ create_arf_report_for_search({ "passed" => 2, "othered" => 3, "failed" => 7 }, policy)
214
+
215
+ get :index, :params => { :search => "last_for=policy" }, :session => set_session_user
216
+ response = ActiveSupport::JSON.decode(@response.body)
217
+ assert_response :success
218
+ assert_equal 2, response['results'].count
219
+ assert_equal 7, response['results'].find { |hash| hash["policy"]["name"] == policy.name }["failed"]
220
+ assert_equal 4, response['results'].find { |hash| hash["policy"]["name"] == @policy.name }["failed"]
221
+ end
222
+
223
+ test "should find last report for hosts" do
224
+ reports_cleanup
225
+ host_a = FactoryBot.create(:compliance_host)
226
+ host_b = FactoryBot.create(:compliance_host)
227
+ policy = FactoryBot.create(:policy)
228
+ create_arf_report_for_search({ "passed" => 1, "othered" => 0, "failed" => 0 }, policy, host_a)
229
+ create_arf_report_for_search({ "passed" => 1, "othered" => 0, "failed" => 4 }, policy, host_a)
230
+ create_arf_report_for_search({ "passed" => 1, "othered" => 0, "failed" => 0 }, policy, host_b)
231
+ create_arf_report_for_search({ "passed" => 2, "othered" => 3, "failed" => 7 }, policy, host_b)
232
+
233
+ get :index, :params => { :search => "last_for=host" }, :session => set_session_user
234
+ response = ActiveSupport::JSON.decode(@response.body)
235
+ assert_response :success
236
+ assert_equal 2, response['results'].count
237
+ assert_equal 4, response['results'].find { |hash| hash["host"]["name"] == host_a.name }["failed"]
238
+ assert_equal 7, response['results'].find { |hash| hash["host"]["name"] == host_b.name }["failed"]
239
+ end
240
+
147
241
  private
148
242
 
149
243
  def reports_cleanup
@@ -161,9 +255,19 @@ class Api::V2::Compliance::ArfReportsControllerTest < ActionController::TestCase
161
255
  JSON.parse file_content
162
256
  end
163
257
 
258
+ def create_arf_report_for_search(status, policy, host = @host)
259
+ report = FactoryBot.create(:arf_report,
260
+ :host_id => host.id,
261
+ :status => status,
262
+ :metrics => status,
263
+ :openscap_proxy => @proxy)
264
+ FactoryBot.create(:policy_arf_report, :policy_id => policy.id, :arf_report_id => report.id)
265
+ report
266
+ end
267
+
164
268
  def create_arf_report
165
269
  FactoryBot.create(:arf_report,
166
270
  :host_id => @host.id,
167
- :openscap_proxy => FactoryBot.create(:smart_proxy, :url => "http://smart-proxy.org:8000"))
271
+ :openscap_proxy => @proxy)
168
272
  end
169
273
  end
@@ -19,6 +19,39 @@ class Api::V2::Compliance::PoliciesControllerTest < ActionController::TestCase
19
19
  assert_response :success
20
20
  end
21
21
 
22
+ test "should get index without hosts and hostgroups" do
23
+ FactoryBot.create(:policy)
24
+ get :index, :session => set_session_user
25
+ response = ActiveSupport::JSON.decode(@response.body)
26
+ assert response['results'][0]['hosts'].empty?
27
+ assert response['results'][0]['hostgroups'].empty?
28
+ assert_response :success
29
+ end
30
+
31
+ test "should get index and show hosts" do
32
+ host = FactoryBot.create(:host)
33
+ asset = FactoryBot.create(:asset, :assetable_id => host.id, :assetable_type => 'Host::Base')
34
+ policy = FactoryBot.create(:policy, :assets => [asset])
35
+ get :index, :session => set_session_user
36
+ response = ActiveSupport::JSON.decode(@response.body)
37
+ assert !response['results'].empty?
38
+ assert !response['results'][0]['hosts'].empty?
39
+ assert_response :success
40
+ end
41
+
42
+ test "should get index and show hostgroups" do
43
+ ForemanOpenscap::Policy.any_instance.stubs(:find_scap_puppetclass).returns(FactoryBot.create(:puppetclass, :name => 'foreman_scap_client'))
44
+ ForemanOpenscap::Policy.any_instance.stubs(:populate_overrides)
45
+ hostgroup = FactoryBot.create(:hostgroup)
46
+ asset = FactoryBot.create(:asset, :assetable_id => hostgroup.id, :assetable_type => 'Hostgroup')
47
+ policy = FactoryBot.create(:policy, :assets => [asset])
48
+ get :index, :session => set_session_user
49
+ response = ActiveSupport::JSON.decode(@response.body)
50
+ assert !response['results'].empty?
51
+ assert !response['results'][0]['hostgroups'].empty?
52
+ assert_response :success
53
+ end
54
+
22
55
  test "should show a policy" do
23
56
  policy = FactoryBot.create(:policy)
24
57
  get :show, :params => { :id => policy.to_param }, :session => set_session_user
@@ -27,6 +60,21 @@ class Api::V2::Compliance::PoliciesControllerTest < ActionController::TestCase
27
60
  assert_response :success
28
61
  end
29
62
 
63
+ test "should show a policy hosts and hostgroups" do
64
+ ForemanOpenscap::Policy.any_instance.stubs(:find_scap_puppetclass).returns(FactoryBot.create(:puppetclass, :name => 'foreman_scap_client'))
65
+ ForemanOpenscap::Policy.any_instance.stubs(:populate_overrides)
66
+ hostgroup = FactoryBot.create(:hostgroup)
67
+ host = FactoryBot.create(:host)
68
+ hostgroup_asset = FactoryBot.create(:asset, :assetable_id => hostgroup.id, :assetable_type => 'Hostgroup')
69
+ host_asset = FactoryBot.create(:asset, :assetable_id => host.id, :assetable_type => 'Host::Base')
70
+ policy = FactoryBot.create(:policy, :assets => [hostgroup_asset, host_asset])
71
+ get :show, :params => { :id => policy.to_param }, :session => set_session_user
72
+ response = ActiveSupport::JSON.decode(@response.body)
73
+ assert !response['hosts'].empty?
74
+ assert !response['hostgroups'].empty?
75
+ assert_response :success
76
+ end
77
+
30
78
  test "should update a policy" do
31
79
  policy = FactoryBot.create(:policy)
32
80
  put :update, :params => { :id => policy.id, :policy => { :period => 'monthly', :day_of_month => 15 } }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_openscap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - slukasik@redhat.com
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-31 00:00:00.000000000 Z
11
+ date: 2018-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deface
@@ -106,6 +106,7 @@ files:
106
106
  - app/views/api/v2/compliance/common/_loc.json.rabl
107
107
  - app/views/api/v2/compliance/common/_org.json.rabl
108
108
  - app/views/api/v2/compliance/policies/base.json.rabl
109
+ - app/views/api/v2/compliance/policies/children.json.rabl
109
110
  - app/views/api/v2/compliance/policies/create.json.rabl
110
111
  - app/views/api/v2/compliance/policies/index.json.rabl
111
112
  - app/views/api/v2/compliance/policies/main.json.rabl