Skip to content

Commit 1198710

Browse files
xprazak2akofink
authored andcommitted
Parse set values (#25)
* Parse set values * Add selectors module
1 parent 932a8a1 commit 1198710

File tree

9 files changed

+213778
-7
lines changed

9 files changed

+213778
-7
lines changed

lib/openscap_parser/profile.rb

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,6 @@ def selected_rule_ids
2424
@parsed_xml.xpath("select[@selected='true']/@idref").map(&:text)
2525
end
2626

27-
def set_values
28-
@set_values ||= @parsed_xml.xpath("set-value") &&
29-
@parsed_xml.xpath("set-value").map do |set_value|
30-
[set_value['idref'], set_value.text]
31-
end.to_h
32-
end
33-
3427
def to_h
3528
{ :id => id, :title => title, :description => description }
3629
end

lib/openscap_parser/rule.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,17 @@ def rule_identifier
5454
def identifier_node
5555
@identifier_node ||= parsed_xml.at_xpath('ident')
5656
end
57+
58+
def to_h
59+
{
60+
:id => id,
61+
:selected => selected,
62+
:severity => severity,
63+
:title => title,
64+
:description => description,
65+
:rationale => rationale,
66+
:identifier => rule_identifier.to_h
67+
}
68+
end
5769
end
5870
end

lib/openscap_parser/rule_identifier.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,12 @@ def label
1010
def system
1111
@system ||= @parsed_xml && @parsed_xml['system']
1212
end
13+
14+
def to_h
15+
{
16+
:label => label,
17+
:system => system
18+
}
19+
end
1320
end
1421
end

lib/openscap_parser/selectors.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# frozen_string_literal: true
2+
3+
require 'openscap_parser/set_values'
4+
5+
module OpenscapParser
6+
module Selectors
7+
include OpenscapParser::SetValues
8+
end
9+
end

lib/openscap_parser/set_value.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# frozen_string_literal: true
2+
require 'openscap_parser/xml_node'
3+
4+
module OpenscapParser
5+
class SetValue < XmlNode
6+
def id
7+
@id ||= @parsed_xml['idref']
8+
end
9+
10+
def text
11+
@text ||= @parsed_xml.text
12+
end
13+
14+
def to_h
15+
{ :id => id, :text => text }
16+
end
17+
end
18+
end

lib/openscap_parser/set_values.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# frozen_string_literal: true
2+
3+
require 'openscap_parser/set_value'
4+
5+
module OpenscapParser
6+
module SetValues
7+
def self.included(base)
8+
base.class_eval do
9+
def set_values
10+
@set_values ||= set_value_nodes.map do |set_value_node|
11+
OpenscapParser::SetValue.new(parsed_xml: set_value_node)
12+
end
13+
end
14+
15+
def set_value_nodes(xpath = ".//set-value")
16+
xpath_nodes(xpath)
17+
end
18+
end
19+
end
20+
end
21+
end

lib/openscap_parser/test_result.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
# frozen_string_literal: true
22

33
require 'openscap_parser/rule_results'
4+
require 'openscap_parser/selectors'
45

56
module OpenscapParser
67
class TestResult < XmlNode
78
include OpenscapParser::RuleResults
9+
include OpenscapParser::Selectors
810

911
def target
1012
@target ||= parsed_xml.at_xpath('target') &&

test/fixtures/files/arf_report_cs2.xml

Lines changed: 213668 additions & 0 deletions
Large diffs are not rendered by default.

test/openscap_parser/test_result_file_test.rb

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ def setup
77
@test_result_file = OpenscapParser::TestResultFile.new(
88
file_fixture('xccdf_report.xml').read
99
)
10+
11+
@arf_result_file = OpenscapParser::TestResultFile.new(
12+
file_fixture('arf_report_cs2.xml').read
13+
)
1014
end
1115

1216
context 'benchmark' do
@@ -93,6 +97,43 @@ def setup
9397
end
9498

9599
context 'rules' do
100+
test 'should parse rules for xccdf report' do
101+
parse_rules @test_result_file
102+
end
103+
104+
test 'should parse rules for arf report' do
105+
parse_rules @arf_result_file
106+
end
107+
end
108+
109+
context 'set values' do
110+
test 'should parse set values for xccdf report' do
111+
parse_set_values @test_result_file
112+
end
113+
114+
test 'should parse set values for arf report' do
115+
parse_set_values @arf_result_file
116+
end
96117
end
97118
end
119+
120+
def parse_set_values(result_file)
121+
set_values = result_file.test_result.set_values.map(&:to_h)
122+
idrefs = set_values.map { |val| val[:id] }
123+
texts = set_values.map { | val| val[:text] }
124+
refute_empty set_values
125+
assert_equal idrefs, idrefs.compact
126+
assert_equal texts, texts.compact
127+
end
128+
129+
def parse_rules(result_file)
130+
rules = result_file.benchmark.rules.map(&:to_h)
131+
ids = rules.map { |rule| rule[:id] }
132+
titles = rules.map { |rule| rule[:title] }
133+
selected = rules.map { |rule| rule[:selected] }
134+
refute_empty rules
135+
assert_equal ids, ids.compact
136+
assert_equal titles, titles.compact
137+
assert_equal selected, selected.compact
138+
end
98139
end

0 commit comments

Comments
 (0)