foreman_openscap 0.6.3 → 0.6.4

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -0
  3. data/app/assets/javascripts/foreman_openscap/openscap_proxy.js +7 -0
  4. data/app/assets/javascripts/foreman_openscap/policy_edit.js +15 -0
  5. data/app/controllers/api/v2/compliance/arf_reports_controller.rb +2 -2
  6. data/app/controllers/api/v2/compliance/policies_controller.rb +16 -4
  7. data/app/controllers/api/v2/compliance/scap_contents_controller.rb +2 -2
  8. data/app/controllers/api/v2/compliance/tailoring_files_controller.rb +92 -0
  9. data/app/controllers/concerns/foreman/controller/parameters/policy_api.rb +2 -2
  10. data/app/controllers/concerns/foreman/controller/parameters/tailoring_file.rb +15 -0
  11. data/app/controllers/openscap_proxies_controller.rb +31 -0
  12. data/app/controllers/policies_controller.rb +14 -15
  13. data/app/controllers/scap_contents_controller.rb +0 -10
  14. data/app/controllers/tailoring_files_controller.rb +75 -0
  15. data/app/helpers/compliance_dashboard_helper.rb +2 -2
  16. data/app/helpers/policies_helper.rb +29 -1
  17. data/app/helpers/tailoring_files_helper.rb +5 -0
  18. data/app/lib/proxy_api/openscap.rb +18 -2
  19. data/app/models/concerns/foreman_openscap/data_stream_content.rb +43 -0
  20. data/app/models/concerns/foreman_openscap/host_extensions.rb +1 -1
  21. data/app/models/concerns/foreman_openscap/hostgroup_extensions.rb +8 -0
  22. data/app/models/foreman_openscap/policy.rb +28 -3
  23. data/app/models/foreman_openscap/scap_content.rb +4 -72
  24. data/app/models/foreman_openscap/scap_content_profile.rb +2 -0
  25. data/app/models/foreman_openscap/tailoring_file.rb +19 -0
  26. data/app/services/foreman_openscap/openscap_proxy_version_check.rb +63 -0
  27. data/app/validators/foreman_openscap/data_stream_validator.rb +44 -0
  28. data/app/views/api/v2/compliance/policies/base.json.rabl +2 -1
  29. data/app/views/api/v2/compliance/tailoring_files/base.json.rabl +6 -0
  30. data/app/views/api/v2/compliance/tailoring_files/index.json.rabl +3 -0
  31. data/app/views/api/v2/compliance/tailoring_files/main.json.rabl +5 -0
  32. data/app/views/api/v2/compliance/tailoring_files/show.json.rabl +7 -0
  33. data/app/views/arf_reports/_list.html.erb +3 -2
  34. data/app/views/dashboard/_compliance_host_reports_widget.html.erb +3 -3
  35. data/app/views/policies/_form.html.erb +9 -0
  36. data/app/views/policies/_list.html.erb +16 -4
  37. data/app/views/policies/_tailoring_file_selected.html.erb +3 -0
  38. data/app/views/policies/steps/_scap_content_form.html.erb +8 -0
  39. data/app/views/policies/welcome.html.erb +12 -13
  40. data/app/views/scap_contents/_list.html.erb +1 -1
  41. data/app/views/scap_contents/welcome.html.erb +14 -13
  42. data/app/views/smart_proxies/_openscap_spool.html.erb +9 -0
  43. data/app/views/smart_proxies/plugins/_openscap.html.erb +12 -0
  44. data/app/views/tailoring_files/_form.html.erb +25 -0
  45. data/app/views/tailoring_files/_list.html.erb +29 -0
  46. data/app/views/tailoring_files/edit.html.erb +3 -0
  47. data/app/views/tailoring_files/index.html.erb +3 -0
  48. data/app/views/tailoring_files/new.html.erb +3 -0
  49. data/app/views/tailoring_files/welcome.html.erb +21 -0
  50. data/config/routes.rb +22 -0
  51. data/db/migrate/20161109155255_create_tailoring_files.rb +23 -0
  52. data/db/migrate/20161223153249_add_permissions_to_arf_report.rb +11 -0
  53. data/lib/foreman_openscap/engine.rb +30 -5
  54. data/lib/foreman_openscap/version.rb +1 -1
  55. data/test/factories/policy_factory.rb +2 -0
  56. data/test/factories/scap_content_related.rb +7 -0
  57. data/test/files/tailoring_files/ssg-firefox-ds-tailoring-2.xml +23 -0
  58. data/test/files/tailoring_files/ssg-firefox-ds-tailoring.xml +31 -0
  59. data/test/functional/api/v2/compliance/policies_controller_test.rb +35 -8
  60. data/test/functional/api/v2/compliance/scap_contents_controller_test.rb +1 -1
  61. data/test/functional/api/v2/compliance/tailoring_files_controller_test.rb +63 -0
  62. data/test/functional/openscap_proxies_controller_test.rb +14 -0
  63. data/test/functional/tailoring_files_controller_test.rb +38 -0
  64. data/test/test_plugin_helper.rb +18 -24
  65. data/test/unit/openscap_host_test.rb +11 -1
  66. data/test/unit/policy_test.rb +26 -0
  67. data/test/unit/services/tailoring_files_proxy_check_test.rb +27 -0
  68. data/test/unit/tailoring_file_test.rb +26 -0
  69. metadata +59 -20
@@ -1,3 +1,3 @@
1
1
  module ForemanOpenscap
2
- VERSION = "0.6.3"
2
+ VERSION = "0.6.4"
3
3
  end
@@ -5,6 +5,8 @@ FactoryGirl.define do
5
5
  weekday 'monday'
6
6
  scap_content
7
7
  scap_content_profile
8
+ tailoring_file nil
9
+ tailoring_file_profile nil
8
10
  day_of_month nil
9
11
  cron_line nil
10
12
  hosts []
@@ -12,4 +12,11 @@ FactoryGirl.define do
12
12
  f.profile_id 'xccdf_org.test.common_test_profile'
13
13
  f.title 'test Profile for testing'
14
14
  end
15
+
16
+ factory :tailoring_file, :class => ForemanOpenscap::TailoringFile do |f|
17
+ f.sequence(:name) { |n| "tailoring_file_#{n}" }
18
+ f.original_filename 'original tailoring filename'
19
+ f.scap_file { File.new("#{ForemanOpenscap::Engine.root}/test/files/tailoring_files/ssg-firefox-ds-tailoring.xml", 'rb').read }
20
+ f.scap_content_profiles []
21
+ end
15
22
  end
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xccdf:Tailoring xmlns:xccdf="http://checklists.nist.gov/xccdf/1.2" id="xccdf_scap-workbench_tailoring_default">
3
+ <xccdf:benchmark href="/usr/share/xml/scap/ssg/content/ssg-firefox-ds.xml"/>
4
+ <xccdf:version time="2016-11-23T11:15:52">1</xccdf:version>
5
+ <xccdf:Profile id="xccdf_org.ssgproject.content_profile_stig-firefox-upstream_customized_again" extends="xccdf_org.ssgproject.content_profile_stig-firefox-upstream">
6
+ <xccdf:title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">Upstream Firefox STIG [CUSTOMIZED AGAIN]</xccdf:title>
7
+ <xccdf:description xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">This profile is developed under the DoD consensus model and DISA FSO Vendor STIG process,
8
+ serving as the upstream development environment for the Firefox STIG.
9
+
10
+ As a result of the upstream/downstream relationship between the SCAP Security Guide project
11
+ and the official DISA FSO STIG baseline, users should expect variance between SSG and DISA FSO content.
12
+ For official DISA FSO STIG content, refer to http://iase.disa.mil/stigs/app-security/browser-guidance/Pages/index.aspx.
13
+
14
+ While this profile is packaged by Red Hat as part of the SCAP Security Guide package, please note
15
+ that commercial support of this SCAP content is NOT available. This profile is provided as example
16
+ SCAP content with no endorsement for suitability or production readiness. Support for this
17
+ profile is provided by the upstream SCAP Security Guide community on a best-effort basis. The
18
+ upstream project homepage is https://fedorahosted.org/scap-security-guide/.
19
+ </xccdf:description>
20
+ <xccdf:select idref="xccdf_org.ssgproject.content_rule_firefox_preferences-javascript_context_menus" selected="false"/>
21
+ <xccdf:select idref="xccdf_org.ssgproject.content_rule_firefox_preferences-auto-download_actions" selected="false"/>
22
+ </xccdf:Profile>
23
+ </xccdf:Tailoring>
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xccdf:Tailoring xmlns:xccdf="http://checklists.nist.gov/xccdf/1.2" id="xccdf_scap-workbench_tailoring_default">
3
+ <xccdf:benchmark href="/usr/share/xml/scap/ssg/content/ssg-firefox-ds.xml"/>
4
+ <xccdf:version time="2016-11-10T11:24:26">1</xccdf:version>
5
+ <xccdf:Profile id="xccdf_org.ssgproject.content_profile_stig-firefox-upstream_customized" extends="xccdf_org.ssgproject.content_profile_stig-firefox-upstream">
6
+ <xccdf:title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">Upstream Firefox STIG [CUSTOMIZED]</xccdf:title>
7
+ <xccdf:description xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">This profile is developed under the DoD consensus model and DISA FSO Vendor STIG process,
8
+ serving as the upstream development environment for the Firefox STIG.
9
+
10
+ As a result of the upstream/downstream relationship between the SCAP Security Guide project
11
+ and the official DISA FSO STIG baseline, users should expect variance between SSG and DISA FSO content.
12
+ For official DISA FSO STIG content, refer to http://iase.disa.mil/stigs/app-security/browser-guidance/Pages/index.aspx.
13
+
14
+ While this profile is packaged by Red Hat as part of the SCAP Security Guide package, please note
15
+ that commercial support of this SCAP content is NOT available. This profile is provided as example
16
+ SCAP content with no endorsement for suitability or production readiness. Support for this
17
+ profile is provided by the upstream SCAP Security Guide community on a best-effort basis. The
18
+ upstream project homepage is https://fedorahosted.org/scap-security-guide/.
19
+ </xccdf:description>
20
+ <xccdf:select idref="xccdf_org.ssgproject.content_rule_firefox_preferences-non-secure_page_warning" selected="true"/>
21
+ <xccdf:select idref="xccdf_org.ssgproject.content_rule_firefox_preferences-javascript_status_bar_text" selected="true"/>
22
+ <xccdf:select idref="xccdf_org.ssgproject.content_rule_firefox_preferences-javascript_context_menus" selected="true"/>
23
+ <xccdf:select idref="xccdf_org.ssgproject.content_rule_firefox_preferences-javascript_status_bar_changes" selected="true"/>
24
+ <xccdf:select idref="xccdf_org.ssgproject.content_rule_firefox_preferences-javascript_window_resizing" selected="true"/>
25
+ <xccdf:select idref="xccdf_org.ssgproject.content_rule_firefox_preferences-javascript_window_changes" selected="true"/>
26
+ <xccdf:select idref="xccdf_org.ssgproject.content_rule_firefox_preferences-auto-update_of_firefox" selected="false"/>
27
+ <xccdf:select idref="xccdf_org.ssgproject.content_rule_firefox_preferences-autofill_passwords" selected="false"/>
28
+ <xccdf:select idref="xccdf_org.ssgproject.content_rule_firefox_preferences-autofill_forms" selected="false"/>
29
+ <xccdf:select idref="xccdf_org.ssgproject.content_rule_firefox_preferences-addons_plugin_updates" selected="false"/>
30
+ </xccdf:Profile>
31
+ </xccdf:Tailoring>
@@ -3,6 +3,12 @@ require 'test_plugin_helper'
3
3
  class Api::V2::Compliance::PoliciesControllerTest < ActionController::TestCase
4
4
  setup do
5
5
  ::ForemanOpenscap::Policy.any_instance.stubs(:ensure_needed_puppetclasses).returns(true)
6
+ @scap_content_profile = FactoryGirl.create(:scap_content_profile)
7
+ @attributes = { :policy => { :name => 'my_policy',
8
+ :scap_content_profile_id => @scap_content_profile.id,
9
+ :scap_content_id => @scap_content_profile.scap_content_id,
10
+ :period => 'weekly',
11
+ :weekday => 'friday' }}
6
12
  end
7
13
 
8
14
  test "should get index" do
@@ -36,18 +42,30 @@ class Api::V2::Compliance::PoliciesControllerTest < ActionController::TestCase
36
42
  end
37
43
 
38
44
  test "should create a policy" do
39
- scap_content_profile = FactoryGirl.create(:scap_content_profile)
40
- attributes = { :policy => { :name => 'my_policy',
41
- :scap_content_profile_id => scap_content_profile.id,
42
- :scap_content_id => scap_content_profile.scap_content_id,
43
- :period => 'weekly',
44
- :weekday => 'friday' }}
45
- post :create, attributes, set_session_user
45
+ post :create, @attributes, set_session_user
46
46
  response = ActiveSupport::JSON.decode(@response.body)
47
- assert response['scap_content_profile_id'], scap_content_profile.to_param
47
+ assert response['scap_content_profile_id'], @scap_content_profile.to_param
48
48
  assert_response :created
49
49
  end
50
50
 
51
+ test "should not create a policy with tailoring file profile and without the actual file" do
52
+ tailoring_profile = FactoryGirl.create(:scap_content_profile, :profile_id => 'xccdf_org.test.tailoring_profile')
53
+ @attributes[:policy][:tailoring_file_profile_id] = tailoring_profile.id
54
+ post :create, @attributes, set_session_user
55
+ response = ActiveSupport::JSON.decode(@response.body)
56
+ assert_not_nil response['error']['errors']['tailoring_file_id']
57
+ assert_response :unprocessable_entity
58
+ end
59
+
60
+ test "should not create a policy with tailoring file and without tailoring profile" do
61
+ tailoring_file = FactoryGirl.create(:tailoring_file)
62
+ @attributes[:policy][:tailoring_file_id] = tailoring_file.id
63
+ post :create, @attributes, set_session_user
64
+ response = ActiveSupport::JSON.decode(@response.body)
65
+ assert_not_nil response['error']['errors']['tailoring_file_profile_id']
66
+ assert_response :unprocessable_entity
67
+ end
68
+
51
69
  test "should not create invalid policy" do
52
70
  post :create, {}, set_session_user
53
71
  assert_response :unprocessable_entity
@@ -66,4 +84,13 @@ class Api::V2::Compliance::PoliciesControllerTest < ActionController::TestCase
66
84
  assert(@response.header['Content-Type'], 'application/xml')
67
85
  assert_response :success
68
86
  end
87
+
88
+ test "should return xml of a tailoring file" do
89
+ tailoring_profile = FactoryGirl.create(:scap_content_profile)
90
+ policy = FactoryGirl.create(:policy, :tailoring_file => FactoryGirl.create(:tailoring_file, :scap_content_profiles => [tailoring_profile]),
91
+ :tailoring_file_profile => tailoring_profile)
92
+ get :tailoring, { :id => policy.id }, set_session_user
93
+ assert(@response.header['Content-Type'], 'application/xml')
94
+ assert_response :success
95
+ end
69
96
  end
@@ -17,7 +17,7 @@ class Api::V2::Compliance::ScapContentsControllerTest < ActionController::TestCa
17
17
  assert_response :success
18
18
  end
19
19
 
20
- test "should create invalid scap content" do
20
+ test "should not create invalid scap content" do
21
21
  post :create, {}, set_session_user
22
22
  assert_response :unprocessable_entity
23
23
  end
@@ -0,0 +1,63 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class Api::V2::Compliance::TailoringFilesControllerTest < ActionController::TestCase
4
+
5
+ test "should get index" do
6
+ FactoryGirl.create(:tailoring_file)
7
+ get :index, {}, set_session_user
8
+ response = ActiveSupport::JSON.decode(@response.body)
9
+ assert response['results'].any?
10
+ assert_response :success
11
+ end
12
+
13
+ test "should return xml of tailoring_file" do
14
+ tailoring_file = FactoryGirl.create(:tailoring_file)
15
+ get :show, { :id => tailoring_file.id }, set_session_user
16
+ assert(@response.header['Content-Type'], 'application/xml')
17
+ assert_response :success
18
+ end
19
+
20
+ test "should not create invalid tailoring_file" do
21
+ post :create, {}, set_session_user
22
+ assert_response :unprocessable_entity
23
+ end
24
+
25
+ test "should create tailoring_file" do
26
+ tf = FactoryGirl.build(:tailoring_file)
27
+ tf_params = { :name => tf.name, :original_filename => tf.original_filename, :scap_file => tf.scap_file }
28
+ ForemanOpenscap::OpenscapProxyVersionCheck.any_instance.stubs(:openscap_proxy_versions).
29
+ returns({})
30
+ post :create, tf_params, set_session_user
31
+ assert_response :success
32
+ end
33
+
34
+ test "should update tailoring_file" do
35
+ tailoring_file = FactoryGirl.create(:tailoring_file)
36
+ put :update, { :id => tailoring_file.id, :tailoring_file => { :name => 'RHEL7 SCAP' }}, set_session_user
37
+ assert_response :success
38
+ assert tailoring_file.name, 'RHEL7 SCAP'
39
+ end
40
+
41
+ test "should not update invalid tailoring_file" do
42
+ tailoring_file = FactoryGirl.create(:tailoring_file)
43
+ ProxyAPI::Openscap.any_instance.stubs(:validate_scap_file).returns({'errors' => ['Invalid file']})
44
+ put :update, { :id => tailoring_file.id, :tailoring_file => { :scap_file => '<xml>blah</xml>' }}, set_session_user
45
+ assert_response :unprocessable_entity
46
+ end
47
+
48
+ test "should destory tailoring_file" do
49
+ tailoring_file = FactoryGirl.create(:tailoring_file)
50
+ delete :destroy, { :id => tailoring_file.id }, set_session_user
51
+ assert_response :ok
52
+ refute ForemanOpenscap::ScapContent.exists?(tailoring_file.id)
53
+ end
54
+
55
+ test "should not create tailoring file when there is outdated proxy version" do
56
+ tf = FactoryGirl.build(:tailoring_file)
57
+ tf_params = { :name => tf.name, :original_filename => tf.original_filename, :scap_file => tf.scap_file }
58
+ ForemanOpenscap::OpenscapProxyVersionCheck.any_instance.stubs(:openscap_proxy_versions).
59
+ returns('test-proxy' => '0.5.4')
60
+ post :create, tf_params, set_session_user
61
+ assert_response :unprocessable_entity
62
+ end
63
+ end
@@ -0,0 +1,14 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class OpenscapProxiesControllerTest < ActionController::TestCase
4
+ include ActionView::Helpers::DateHelper
5
+
6
+ test "should render spool error" do
7
+ spool_error = { "timestamp" => 1_487_144_633.951_368, "level" => "ERROR", "message"=> "Failed to parse Arf Report in test" }
8
+ OpenscapProxiesController.any_instance.stubs(:find_spool_error).returns(spool_error)
9
+ proxy = FactoryGirl.create(:openscap_proxy)
10
+ get :openscap_spool, { :id => proxy.id }, set_session_user
11
+ assert_template :partial => 'smart_proxies/_openscap_spool'
12
+ assert @response.body.match(time_ago_in_words(Time.at(spool_error["timestamp"])))
13
+ end
14
+ end
@@ -0,0 +1,38 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class TailoringFilesControllerTest < ActionController::TestCase
4
+ setup do
5
+ @tailoring_file = FactoryGirl.create(:tailoring_file)
6
+ @scap_file = File.new("#{ForemanOpenscap::Engine.root}/test/files/tailoring_files/ssg-firefox-ds-tailoring.xml", 'rb')
7
+ end
8
+
9
+ test 'index' do
10
+ get :index, {}, set_session_user
11
+ assert_template 'index'
12
+ end
13
+
14
+ test 'new' do
15
+ get :new, {}, set_session_user
16
+ assert_template 'new'
17
+ end
18
+
19
+ test 'edit' do
20
+ get :edit, { :id => @tailoring_file.id }, set_session_user
21
+ assert_template 'edit'
22
+ end
23
+
24
+ test 'create' do
25
+ uploaded_file = ActionDispatch::Http::UploadedFile.new(:tempfile => @scap_file,
26
+ :content_type => 'text/xml')
27
+ uploaded_file.original_filename = 'uploaded-tailoring-file.xml'
28
+ post :create, { :tailoring_file => { :name => 'some_file', :scap_file => uploaded_file } }, set_session_user
29
+ assert_redirected_to tailoring_files_url
30
+ end
31
+
32
+ test 'destroy' do
33
+ tf = ForemanOpenscap::TailoringFile.first
34
+ delete :destroy, { :id => tf.id }, set_session_user
35
+ assert_redirected_to tailoring_files_url
36
+ refute ForemanOpenscap::TailoringFile.exists?(tf.id)
37
+ end
38
+ end
@@ -13,6 +13,22 @@ module ScapClientPuppetclass
13
13
  end
14
14
  end
15
15
 
16
+ module ScapTestProxy
17
+ private
18
+
19
+ def add_smart_proxy
20
+ FactoryGirl.create(:smart_proxy, :url => 'http://localhost:8443', :features => [FactoryGirl.create(:feature, :name => 'Openscap')])
21
+ ProxyAPI::Features.any_instance.stubs(:features).returns(%w(puppet openscap))
22
+ versions = { "version" => "1.11.0", "modules" => { "openscap" => "0.5.3" } }
23
+ ProxyAPI::Version.any_instance.stubs(:proxy_versions).returns(versions)
24
+ ProxyAPI::Openscap.any_instance.stubs(:validate_scap_file).returns({'errors' => []})
25
+ ProxyAPI::Openscap.any_instance.stubs(:fetch_policies_for_scap_content).
26
+ returns({'xccdf_org.ssgproject.content_profile_common' => 'Common Profile for General-Purpose Fedora Systems'})
27
+ ProxyAPI::Openscap.any_instance.stubs(:fetch_profiles_for_tailoring_file).
28
+ returns({'xccdf_org.ssgproject.test_profile_common' => 'Stubbed test profile'})
29
+ end
30
+ end
31
+
16
32
  class ActionMailer::TestCase
17
33
  include ScapClientPuppetclass
18
34
  setup :skip_scap_callback
@@ -20,36 +36,14 @@ end
20
36
 
21
37
  class ActionController::TestCase
22
38
  include ScapClientPuppetclass
39
+ include ScapTestProxy
23
40
 
24
41
  setup :add_smart_proxy, :skip_scap_callback
25
-
26
- private
27
-
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'})
36
- end
37
42
  end
38
43
 
39
44
  class ActiveSupport::TestCase
40
45
  include ScapClientPuppetclass
46
+ include ScapTestProxy
41
47
 
42
48
  setup :add_smart_proxy, :skip_scap_callback
43
-
44
- private
45
-
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'})
54
- end
55
49
  end
@@ -20,7 +20,17 @@ class OpenscapHostTest < ActiveSupport::TestCase
20
20
  test 'Host has policies via its hostgroup' do
21
21
  host = FactoryGirl.create(:host, :with_hostgroup)
22
22
  hostgroup = host.hostgroup
23
- @policy.hostgroup_ids = ["#{hostgroup.id}"]
23
+ @policy.hostgroup_ids = [ hostgroup.id ]
24
+ assert @policy.save
25
+ refute_empty(host.combined_policies)
26
+ assert_includes(host.combined_policies, @policy)
27
+ end
28
+
29
+ test 'Host has policies via its host group and its parent host groups' do
30
+ host = FactoryGirl.create(:host, :with_hostgroup)
31
+ hostgroup = host.hostgroup
32
+ hostgroup.parent = FactoryGirl.create(:hostgroup)
33
+ @policy.hostgroup_ids = [ hostgroup.parent.id ]
24
34
  assert @policy.save
25
35
  refute_empty(host.combined_policies)
26
36
  assert_includes(host.combined_policies, @policy)
@@ -3,6 +3,8 @@ require 'test_plugin_helper'
3
3
  class PolicyTest < ActiveSupport::TestCase
4
4
  setup do
5
5
  ForemanOpenscap::Policy.any_instance.stubs(:ensure_needed_puppetclasses).returns(true)
6
+ ForemanOpenscap::DataStreamValidator.any_instance.stubs(:validate)
7
+ ForemanOpenscap::ScapContent.any_instance.stubs(:fetch_profiles).returns({ 'test_profile_key' => 'test_profile_title' })
6
8
  @scap_content = FactoryGirl.create(:scap_content)
7
9
  @scap_profile = FactoryGirl.create(:scap_content_profile)
8
10
  end
@@ -140,4 +142,28 @@ class PolicyTest < ActiveSupport::TestCase
140
142
  refute p.save
141
143
  assert p.errors[:scap_content_profile_id].include?("can't be blank")
142
144
  end
145
+
146
+ test "should have correct scap profile in enc" do
147
+ p = FactoryGirl.create(:policy)
148
+ profile_id = p.scap_content_profile.profile_id
149
+ assert_equal profile_id, p.to_enc['profile_id']
150
+ tailoring_profile = FactoryGirl.create(:scap_content_profile, :profile_id => 'xccdf_org.test.tailoring_test_profile')
151
+ p.tailoring_file_profile = tailoring_profile
152
+ assert_equal tailoring_profile.profile_id, p.to_enc['profile_id']
153
+ end
154
+
155
+ test "should not create policy with incorrect tailoring profile" do
156
+ tailoring_profile = FactoryGirl.create(:scap_content_profile, :profile_id => 'xccdf_org.test.common_tailoring_profile')
157
+ tailoring_file = FactoryGirl.create(:tailoring_file, :scap_content_profiles => [tailoring_profile])
158
+ p = ForemanOpenscap::Policy.create(:name => "custom_policy",
159
+ :period => 'monthly',
160
+ :day_of_month => '5',
161
+ :scap_content => @scap_content,
162
+ :scap_content_profile => @scap_profile,
163
+ :tailoring_file => tailoring_file,
164
+ :tailoring_file_profile => @scap_profile)
165
+ refute p.valid?
166
+ p.tailoring_file_profile = tailoring_profile
167
+ assert p.save
168
+ end
143
169
  end
@@ -0,0 +1,27 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class TailoringFilesProxyCheckTest < ActiveSupport::TestCase
4
+ test 'should find proxies with old versions' do
5
+ ForemanOpenscap::OpenscapProxyVersionCheck.any_instance.stubs(:openscap_proxy_versions).
6
+ returns('old-proxy.test.com' => "0.5.4", "outdate-proxy.test.com" => "0.6.0")
7
+ check = ForemanOpenscap::OpenscapProxyVersionCheck.new.run
8
+ refute check.pass?
9
+ refute check.message.empty?
10
+ end
11
+
12
+ test 'should not find any outdated proxies' do
13
+ ForemanOpenscap::OpenscapProxyVersionCheck.any_instance.stubs(:openscap_proxy_versions).
14
+ returns({})
15
+ check = ForemanOpenscap::OpenscapProxyVersionCheck.new.run
16
+ assert check.pass?
17
+ assert check.message.empty?
18
+ end
19
+
20
+ test 'should fail when proxy cannot be reached' do
21
+ ProxyStatus::Version.any_instance.stubs(:version).raises(Foreman::WrappedException.new(nil, 'test message'))
22
+ ForemanOpenscap::OpenscapProxyVersionCheck.any_instance.stubs(:get_openscap_proxies).returns([FactoryGirl.create(:openscap_proxy)])
23
+ check = ForemanOpenscap::OpenscapProxyVersionCheck.new.run
24
+ refute check.pass?
25
+ refute check.message.empty?
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class TailoringFileTest < ActiveSupport::TestCase
4
+ setup do
5
+ @scap_file = File.new("#{ForemanOpenscap::Engine.root}/test/files/tailoring_files/ssg-firefox-ds-tailoring.xml", 'rb').read
6
+ end
7
+
8
+ test 'should create tailoring file' do
9
+ tailoring_file = ForemanOpenscap::TailoringFile.create(:name => 'test_file', :scap_file => @scap_file, :original_filename => 'original name')
10
+ assert tailoring_file.valid?
11
+ end
12
+
13
+ test 'should not create tailoring_file without scap file' do
14
+ tailoring_file = ForemanOpenscap::TailoringFile.create(:name => 'test_file', :original_filename => 'original name')
15
+ refute tailoring_file.valid?
16
+ end
17
+
18
+ test 'should redigist when scap file changed' do
19
+ scap_file = File.new("#{ForemanOpenscap::Engine.root}/test/files/tailoring_files/ssg-firefox-ds-tailoring-2.xml", 'rb').read
20
+ tailoring_file = ForemanOpenscap::TailoringFile.create(:name => 'test_file', :scap_file => @scap_file, :original_filename => 'original name')
21
+ original_digest = tailoring_file.digest
22
+ tailoring_file.scap_file = scap_file
23
+ assert tailoring_file.save
24
+ refute_equal original_digest, tailoring_file.digest
25
+ end
26
+ end