smart_proxy_openscap 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rubocop.yml +41 -0
- data/.rubocop_todo.yml +111 -0
- data/.travis.yml +14 -0
- data/COPYING +674 -0
- data/Gemfile +14 -0
- data/README.md +107 -0
- data/Rakefile +16 -0
- data/bin/smart-proxy-arf-html +7 -0
- data/bin/smart-proxy-arf-json +7 -0
- data/bin/smart-proxy-openscap-send +61 -0
- data/bin/smart-proxy-policy-guide +7 -0
- data/bin/smart-proxy-scap-profiles +7 -0
- data/bin/smart-proxy-scap-validation +7 -0
- data/bundler.d/openscap.rb +6 -0
- data/extra/rubygem-smart_proxy_openscap.spec +101 -0
- data/extra/smart-proxy-openscap-send.cron +2 -0
- data/lib/smart_proxy_openscap.rb +14 -0
- data/lib/smart_proxy_openscap/arf_html.rb +22 -0
- data/lib/smart_proxy_openscap/arf_json.rb +114 -0
- data/lib/smart_proxy_openscap/arf_parser.rb +39 -0
- data/lib/smart_proxy_openscap/content_parser.rb +30 -0
- data/lib/smart_proxy_openscap/fetch_file.rb +60 -0
- data/lib/smart_proxy_openscap/fetch_scap_content.rb +17 -0
- data/lib/smart_proxy_openscap/fetch_tailoring_file.rb +17 -0
- data/lib/smart_proxy_openscap/foreman_forwarder.rb +40 -0
- data/lib/smart_proxy_openscap/http_config.ru +20 -0
- data/lib/smart_proxy_openscap/openscap_api.rb +187 -0
- data/lib/smart_proxy_openscap/openscap_exception.rb +9 -0
- data/lib/smart_proxy_openscap/openscap_html_generator.rb +38 -0
- data/lib/smart_proxy_openscap/openscap_import_api.rb +32 -0
- data/lib/smart_proxy_openscap/openscap_lib.rb +67 -0
- data/lib/smart_proxy_openscap/openscap_plugin.rb +27 -0
- data/lib/smart_proxy_openscap/policy_guide.rb +23 -0
- data/lib/smart_proxy_openscap/policy_parser.rb +33 -0
- data/lib/smart_proxy_openscap/profiles_parser.rb +32 -0
- data/lib/smart_proxy_openscap/scap_profiles.rb +52 -0
- data/lib/smart_proxy_openscap/scap_validation.rb +35 -0
- data/lib/smart_proxy_openscap/shell_wrapper.rb +77 -0
- data/lib/smart_proxy_openscap/spool_forwarder.rb +79 -0
- data/lib/smart_proxy_openscap/storage.rb +47 -0
- data/lib/smart_proxy_openscap/storage_fs.rb +102 -0
- data/lib/smart_proxy_openscap/version.rb +15 -0
- data/settings.d/openscap.yml.example +33 -0
- data/smart_proxy_openscap.gemspec +23 -0
- data/test/data/arf_report +0 -0
- data/test/data/corrupted_arf_report +0 -0
- data/test/data/spool/cleanup_spool/arf/2c101b95-033f-4b15-b490-f50bf9090dae/1/1484313035/fa2f68ffb944c917332a284dc63ec7f8fa76990cb815ddcad3318b5d9457f8a1 +0 -0
- data/test/data/spool/cleanup_spool/arf/e20b9695-f655-401a-9dda-8cca7a47a8c0/1/1484309984/fa2f68ffb944c917332a284dc63ec7f8fa76990cb815ddcad3318b5d9457f8a1 +0 -0
- data/test/data/spool/corrupted_spool/arf/e20b9695-f655-401a-9dda-8cca7a47a8c0/1/1484309984/a4dfba5db27b21795e6fa401b8dce7a70faeb25b7963891f07f6f4baaf052afb +0 -0
- data/test/data/spool/corrupted_spool/arf/e20b9695-f655-401a-9dda-8cca7a47a8c0/1/1484313035/fa2f68ffb944c917332a284dc63ec7f8fa76990cb815ddcad3318b5d9457f8a1 +0 -0
- data/test/data/spool/valid_spool/arf/e20b9695-f655-401a-9dda-8cca7a47a8c0/1/1484309984/fa2f68ffb944c917332a284dc63ec7f8fa76990cb815ddcad3318b5d9457f8a1 +0 -0
- data/test/data/spool/valid_spool/arf/e20b9695-f655-401a-9dda-8cca7a47a8c0/1/1484313035/fa2f68ffb944c917332a284dc63ec7f8fa76990cb815ddcad3318b5d9457f8a1 +0 -0
- data/test/data/ssg-rhel7-ds.xml +20271 -0
- data/test/data/tailoring.xml +31 -0
- data/test/fetch_scap_api_test.rb +73 -0
- data/test/fetch_tailoring_api_test.rb +37 -0
- data/test/get_report_xml_html_test.rb +58 -0
- data/test/post_report_api_test.rb +86 -0
- data/test/scap_content_parser_api_test.rb +69 -0
- data/test/script_class_test.rb +96 -0
- data/test/spool_forwarder_test.rb +84 -0
- data/test/test_helper.rb +13 -0
- metadata +180 -0
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'smart_proxy_openscap'
|
3
|
+
require 'smart_proxy_openscap/openscap_lib'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
class SpoolForwarderTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@foreman_url = 'https://foreman.example.com'
|
9
|
+
Proxy::SETTINGS.stubs(:foreman_url).returns(@foreman_url)
|
10
|
+
@base_spool_for_test = ("#{Dir.getwd}/test/data/spool")
|
11
|
+
@results_path = ("#{Dir.getwd}/test/test_run_files")
|
12
|
+
FileUtils.mkdir_p(@results_path)
|
13
|
+
@spooldir = @results_path + "/spool"
|
14
|
+
@loaded_settings = OpenStruct.new(
|
15
|
+
:spooldir => @spooldir,
|
16
|
+
:contentdir => @results_path,
|
17
|
+
:reportsdir => @results_path + "/reports",
|
18
|
+
:corrupted_dir => @results_path + "/corrupted")
|
19
|
+
|
20
|
+
@policy_id = 1
|
21
|
+
@date_1 = 1484309984
|
22
|
+
@date_2 = 1484313035
|
23
|
+
@id_1 = 42
|
24
|
+
@id_2 = 84
|
25
|
+
@valid_digest = "fa2f68ffb944c917332a284dc63ec7f8fa76990cb815ddcad3318b5d9457f8a1"
|
26
|
+
@corrupted_digest = "a4dfba5db27b21795e6fa401b8dce7a70faeb25b7963891f07f6f4baaf052afb"
|
27
|
+
@cname = "e20b9695-f655-401a-9dda-8cca7a47a8c0"
|
28
|
+
@cname_2 = "2c101b95-033f-4b15-b490-f50bf9090dae"
|
29
|
+
|
30
|
+
@arf_dir = File.join(@loaded_settings.spooldir, "/arf")
|
31
|
+
|
32
|
+
stub_request(:post, "#{@foreman_url}/api/v2/compliance/arf_reports/#{@cname}/#{@policy_id}/#{@date_1}")
|
33
|
+
.to_return(:status => 200, :body => "{\"result\":\"OK\",\"id\":\"#{@id_1}\"}")
|
34
|
+
|
35
|
+
stub_request(:post, "#{@foreman_url}/api/v2/compliance/arf_reports/#{@cname}/#{@policy_id}/#{@date_2}")
|
36
|
+
.to_return(:status => 200, :body => "{\"result\":\"OK\",\"id\":\"#{@id_2}\"}")
|
37
|
+
end
|
38
|
+
|
39
|
+
def teardown
|
40
|
+
FileUtils.rm_rf @results_path
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_send_spool_to_foreman
|
44
|
+
test_spool = @base_spool_for_test + "/valid_spool/"
|
45
|
+
FileUtils.cp_r test_spool, @spooldir
|
46
|
+
|
47
|
+
Proxy::OpenSCAP::SpoolForwarder.new(@loaded_settings).post_arf_from_spool(@arf_dir)
|
48
|
+
assert(File.file?("#{@results_path}/reports/arf/#{@cname}/#{@id_1}/#{@date_1}/#{@valid_digest}"), "File should be in reports directory")
|
49
|
+
assert(File.file?("#{@results_path}/reports/arf/#{@cname}/#{@id_2}/#{@date_2}/#{@valid_digest}"), "File should be in reports directory")
|
50
|
+
refute(File.file?("#{@spooldir}/arf/#{@cname}/#{@policy_id}/#{@date_1}/#{@valid_digest}"), "File should not be in spool directory")
|
51
|
+
refute(File.file?("#{@spooldir}/arf/#{@cname}/#{@policy_id}/#{@date_2}/#{@valid_digest}"), "File should not be in spool directory")
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_send_corrupted_spool_to_foreman
|
55
|
+
test_spool = @base_spool_for_test + "/corrupted_spool/"
|
56
|
+
FileUtils.cp_r test_spool, @spooldir
|
57
|
+
|
58
|
+
Proxy::OpenSCAP::SpoolForwarder.new(@loaded_settings).post_arf_from_spool(@arf_dir)
|
59
|
+
|
60
|
+
assert(File.file?("#{@results_path}/corrupted/arf/#{@cname}/#{@policy_id}/#{@date_1}/#{@corrupted_digest}"), "File should be in corrupted directory")
|
61
|
+
assert(File.file?("#{@results_path}/reports/arf/#{@cname}/#{@id_2}/#{@date_2}/#{@valid_digest}"), "File should be in reports directory")
|
62
|
+
|
63
|
+
refute(File.file?("#{@spooldir}/arf/#{@cname}/#{@policy_id}/#{@date_1}/#{@corrupted_digest}"), "File should not be in spool directory")
|
64
|
+
refute(File.file?("#{@spooldir}/arf/#{@cname}/#{@policy_id}/#{@date_2}/#{@valid_digest}"), "File should not be in spool directory")
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_send_spool_cleans_up
|
68
|
+
test_spool = @base_spool_for_test + "/cleanup_spool/"
|
69
|
+
FileUtils.cp_r test_spool, @spooldir
|
70
|
+
|
71
|
+
stub_request(:post, "#{@foreman_url}/api/v2/compliance/arf_reports/#{@cname}/#{@policy_id}/#{@date_1}")
|
72
|
+
.to_return(:status => 200, :body => "{\"result\":\"OK\",\"id\":\"#{@id_1}\"}")
|
73
|
+
|
74
|
+
stub_request(:post, "#{@foreman_url}/api/v2/compliance/arf_reports/#{@cname_2}/#{@policy_id}/#{@date_2}")
|
75
|
+
.to_return(:status => 500)
|
76
|
+
|
77
|
+
Proxy::OpenSCAP::SpoolForwarder.new(@loaded_settings).post_arf_from_spool(@arf_dir)
|
78
|
+
|
79
|
+
assert(File.file?("#{@results_path}/reports/arf/#{@cname}/#{@id_1}/#{@date_1}/#{@valid_digest}"), "File should be in reports directory")
|
80
|
+
assert(File.file?("#{@spooldir}/arf/#{@cname_2}/#{@policy_id}/#{@date_2}/#{@valid_digest}"), "File should be in spool directory")
|
81
|
+
|
82
|
+
refute(File.exist?("#{@spooldir}/arf/#{@cname}"), "Folder should not exist")
|
83
|
+
end
|
84
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rack/test'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'webmock/test_unit'
|
4
|
+
require 'mocha/setup'
|
5
|
+
require 'json'
|
6
|
+
require 'ostruct'
|
7
|
+
require 'tempfile'
|
8
|
+
|
9
|
+
require 'smart_proxy_for_testing'
|
10
|
+
|
11
|
+
# create log directory in our (not smart-proxy) directory
|
12
|
+
FileUtils.mkdir_p File.dirname(Proxy::SETTINGS.log_file)
|
13
|
+
APP_ROOT = "#{File.dirname(__FILE__)}/.."
|
metadata
ADDED
@@ -0,0 +1,180 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: smart_proxy_openscap
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.7.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Šimon Lukašík
|
8
|
+
- Shlomi Zadok
|
9
|
+
- Marek Hulan
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2019-05-09 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - ">="
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: rack-test
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: mocha
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: webmock
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: openscap
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.4.7
|
78
|
+
type: :runtime
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - "~>"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 0.4.7
|
85
|
+
description: |-
|
86
|
+
A plug-in to the Foreman's smart-proxy which receives
|
87
|
+
bzip2ed ARF files and forwards them to the Foreman.
|
88
|
+
email: slukasik@redhat.com
|
89
|
+
executables:
|
90
|
+
- smart-proxy-openscap-send
|
91
|
+
extensions: []
|
92
|
+
extra_rdoc_files: []
|
93
|
+
files:
|
94
|
+
- ".rubocop.yml"
|
95
|
+
- ".rubocop_todo.yml"
|
96
|
+
- ".travis.yml"
|
97
|
+
- COPYING
|
98
|
+
- Gemfile
|
99
|
+
- README.md
|
100
|
+
- Rakefile
|
101
|
+
- bin/smart-proxy-arf-html
|
102
|
+
- bin/smart-proxy-arf-json
|
103
|
+
- bin/smart-proxy-openscap-send
|
104
|
+
- bin/smart-proxy-policy-guide
|
105
|
+
- bin/smart-proxy-scap-profiles
|
106
|
+
- bin/smart-proxy-scap-validation
|
107
|
+
- bundler.d/openscap.rb
|
108
|
+
- extra/rubygem-smart_proxy_openscap.spec
|
109
|
+
- extra/smart-proxy-openscap-send.cron
|
110
|
+
- lib/smart_proxy_openscap.rb
|
111
|
+
- lib/smart_proxy_openscap/arf_html.rb
|
112
|
+
- lib/smart_proxy_openscap/arf_json.rb
|
113
|
+
- lib/smart_proxy_openscap/arf_parser.rb
|
114
|
+
- lib/smart_proxy_openscap/content_parser.rb
|
115
|
+
- lib/smart_proxy_openscap/fetch_file.rb
|
116
|
+
- lib/smart_proxy_openscap/fetch_scap_content.rb
|
117
|
+
- lib/smart_proxy_openscap/fetch_tailoring_file.rb
|
118
|
+
- lib/smart_proxy_openscap/foreman_forwarder.rb
|
119
|
+
- lib/smart_proxy_openscap/http_config.ru
|
120
|
+
- lib/smart_proxy_openscap/openscap_api.rb
|
121
|
+
- lib/smart_proxy_openscap/openscap_exception.rb
|
122
|
+
- lib/smart_proxy_openscap/openscap_html_generator.rb
|
123
|
+
- lib/smart_proxy_openscap/openscap_import_api.rb
|
124
|
+
- lib/smart_proxy_openscap/openscap_lib.rb
|
125
|
+
- lib/smart_proxy_openscap/openscap_plugin.rb
|
126
|
+
- lib/smart_proxy_openscap/policy_guide.rb
|
127
|
+
- lib/smart_proxy_openscap/policy_parser.rb
|
128
|
+
- lib/smart_proxy_openscap/profiles_parser.rb
|
129
|
+
- lib/smart_proxy_openscap/scap_profiles.rb
|
130
|
+
- lib/smart_proxy_openscap/scap_validation.rb
|
131
|
+
- lib/smart_proxy_openscap/shell_wrapper.rb
|
132
|
+
- lib/smart_proxy_openscap/spool_forwarder.rb
|
133
|
+
- lib/smart_proxy_openscap/storage.rb
|
134
|
+
- lib/smart_proxy_openscap/storage_fs.rb
|
135
|
+
- lib/smart_proxy_openscap/version.rb
|
136
|
+
- settings.d/openscap.yml.example
|
137
|
+
- smart_proxy_openscap.gemspec
|
138
|
+
- test/data/arf_report
|
139
|
+
- test/data/corrupted_arf_report
|
140
|
+
- test/data/spool/cleanup_spool/arf/2c101b95-033f-4b15-b490-f50bf9090dae/1/1484313035/fa2f68ffb944c917332a284dc63ec7f8fa76990cb815ddcad3318b5d9457f8a1
|
141
|
+
- test/data/spool/cleanup_spool/arf/e20b9695-f655-401a-9dda-8cca7a47a8c0/1/1484309984/fa2f68ffb944c917332a284dc63ec7f8fa76990cb815ddcad3318b5d9457f8a1
|
142
|
+
- test/data/spool/corrupted_spool/arf/e20b9695-f655-401a-9dda-8cca7a47a8c0/1/1484309984/a4dfba5db27b21795e6fa401b8dce7a70faeb25b7963891f07f6f4baaf052afb
|
143
|
+
- test/data/spool/corrupted_spool/arf/e20b9695-f655-401a-9dda-8cca7a47a8c0/1/1484313035/fa2f68ffb944c917332a284dc63ec7f8fa76990cb815ddcad3318b5d9457f8a1
|
144
|
+
- test/data/spool/valid_spool/arf/e20b9695-f655-401a-9dda-8cca7a47a8c0/1/1484309984/fa2f68ffb944c917332a284dc63ec7f8fa76990cb815ddcad3318b5d9457f8a1
|
145
|
+
- test/data/spool/valid_spool/arf/e20b9695-f655-401a-9dda-8cca7a47a8c0/1/1484313035/fa2f68ffb944c917332a284dc63ec7f8fa76990cb815ddcad3318b5d9457f8a1
|
146
|
+
- test/data/ssg-rhel7-ds.xml
|
147
|
+
- test/data/tailoring.xml
|
148
|
+
- test/fetch_scap_api_test.rb
|
149
|
+
- test/fetch_tailoring_api_test.rb
|
150
|
+
- test/get_report_xml_html_test.rb
|
151
|
+
- test/post_report_api_test.rb
|
152
|
+
- test/scap_content_parser_api_test.rb
|
153
|
+
- test/script_class_test.rb
|
154
|
+
- test/spool_forwarder_test.rb
|
155
|
+
- test/test_helper.rb
|
156
|
+
homepage: https://github.com/theforeman/smart_proxy_openscap
|
157
|
+
licenses:
|
158
|
+
- GPL-3.0-or-later
|
159
|
+
metadata: {}
|
160
|
+
post_install_message:
|
161
|
+
rdoc_options: []
|
162
|
+
require_paths:
|
163
|
+
- lib
|
164
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '0'
|
169
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
requirements: []
|
175
|
+
rubyforge_project:
|
176
|
+
rubygems_version: 2.6.8
|
177
|
+
signing_key:
|
178
|
+
specification_version: 4
|
179
|
+
summary: OpenSCAP plug-in for Foreman's smart-proxy.
|
180
|
+
test_files: []
|