@@ -115,6 +115,63 @@ def setup
115115 parse_set_values @arf_result_file
116116 end
117117 end
118+
119+ context 'fixes' do
120+ test 'should parse fixes for xccdf report' do
121+ parse_fixes @test_result_file
122+ end
123+
124+ test 'should parse fixes for arf report' do
125+ parse_fixes @arf_result_file
126+ end
127+
128+ test 'should parse multiple fixes for one rule' do
129+ rule = @arf_result_file . benchmark . rules . find { |rule | rule . id == "xccdf_org.ssgproject.content_rule_ensure_gpgcheck_globally_activated" }
130+ fixes = rule . fixes
131+ assert_equal 2 , fixes . count
132+ assert fixes . map ( &:id ) . all? { |id | id == 'ensure_gpgcheck_globally_activated' }
133+ refute_equal fixes . first . system , fixes . last . system
134+ end
135+
136+ test "should parse one sub for fix" do
137+ rule = @arf_result_file . benchmark . rules . find { |rule | rule . id == "xccdf_org.ssgproject.content_rule_ensure_gpgcheck_globally_activated" }
138+ fix = rule . fixes . find { |fix | !fix . subs . empty? }
139+ assert_equal 1 , fix . subs . count
140+ assert fix . subs . first . id
141+ assert fix . subs . first . text
142+ end
143+
144+ test "should parse attributes for fix" do
145+ rule = @arf_result_file . benchmark . rules . find { |rule | rule . id == "xccdf_org.ssgproject.content_rule_enable_selinux_bootloader" }
146+ fix = rule . fixes . find { |fx | fx . system == "urn:xccdf:fix:script:sh" }
147+ assert_empty fix . subs
148+ assert fix . text
149+ assert fix . complexity
150+ assert fix . disruption
151+ assert fix . strategy
152+ end
153+
154+ test "should parse multiple subs for fix" do
155+ rule = @arf_result_file . benchmark . rules . find { |rule | rule . id == "xccdf_org.ssgproject.content_rule_selinux_state" }
156+ fix = rule . fixes . find { |fix | !fix . subs . empty? }
157+ assert_equal 2 , fix . subs . count
158+ sub = fix . subs . last
159+ assert sub . id
160+ assert sub . text
161+ assert sub . use
162+ end
163+ end
164+ end
165+
166+ private
167+
168+ def parse_fixes ( result_file )
169+ fixes = result_file . benchmark . rules . flat_map ( &:fixes ) . map ( &:to_h )
170+ ids = fixes . map { |fix | fix [ :id ] }
171+ systems = fixes . map { |fix | fix [ :system ] }
172+ refute_empty fixes
173+ assert_equal ids , ids . compact
174+ assert_equal systems , systems . compact
118175 end
119176
120177 def parse_set_values ( result_file )
0 commit comments