Skip to content

Commit 0d956bb

Browse files
xprazak2akofink
authored andcommitted
Validate ds file content (#5)
Makes a basic check to see if file format corresponds to tailoring file or scap content. File namespaces are kept in a separate instance variable so that they are available even after they are removed from the xml file.
1 parent 40cfcfc commit 0d956bb

3 files changed

Lines changed: 33 additions & 0 deletions

File tree

lib/openscap_parser/ds.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ def profiles
1313
@profiles ||= profile_nodes
1414
end
1515

16+
def valid?
17+
return true if @report_xml.root.name == 'data-stream-collection' && namespaces.keys.include?('xmlns:ds')
18+
return true if @report_xml.root.name == 'Tailoring' && namespaces.keys.include?('xmlns:xccdf')
19+
false
20+
end
21+
1622
private
1723

1824
def profile_nodes

lib/openscap_parser/xml_file.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33

44
module OpenscapParser
55
module XmlFile
6+
attr_reader :namespaces
7+
68
def report_xml(report_contents = '')
79
@report_xml ||= ::Nokogiri::XML.parse(
810
report_contents, nil, nil, Nokogiri::XML::ParseOptions.new.norecover)
11+
@namespaces = @report_xml.namespaces.clone
912
@report_xml.remove_namespaces!
1013
end
1114
end

test/ds_test.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,30 @@ class DsTest < MiniTest::Test
3333
end
3434
end
3535

36+
context 'format validations' do
37+
should 'remember the namespaces after removing them' do
38+
refute_empty(create_parser('ssg-rhel7-ds.xml').namespaces)
39+
end
40+
41+
should 'recognize scap content as valid' do
42+
assert(create_parser('ssg-rhel7-ds.xml').valid?)
43+
end
44+
45+
should 'recognize tailoring file as valid' do
46+
assert(create_parser('ssg-rhel7-ds-tailoring.xml').valid?)
47+
end
48+
49+
should 'not recognize random file as valid' do
50+
assert_raises Nokogiri::XML::SyntaxError do
51+
create_parser('invalid_report.xml')
52+
end
53+
end
54+
55+
should 'not recognize xccdf report as valid ds file' do
56+
refute(create_parser('rhel-xccdf-report.xml').valid?)
57+
end
58+
end
59+
3660
def create_parser(file)
3761
scap_content = file_fixture(file).read
3862
::OpenscapParser::Ds.new(scap_content)

0 commit comments

Comments
 (0)