Skip to content

Commit

Permalink
Add Brakeman specific information using namespace
Browse files Browse the repository at this point in the history
  • Loading branch information
naokikimura committed Feb 5, 2020
1 parent 7640a59 commit 00f3daa
Showing 1 changed file with 50 additions and 3 deletions.
53 changes: 50 additions & 3 deletions lib/brakeman/report/report_junit.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,55 @@

class Brakeman::Report::JUnit < Brakeman::Report::Base
def generate_report

io = StringIO.new
doc = REXML::Document.new
doc.add REXML::XMLDecl.new '1.0', 'UTF-8'

test_suites = REXML::Element.new 'testsuites'
test_suites.add_attribute 'xmlns:brakeman', 'https://brakemanscanner.org/'
properties = test_suites.add_element 'brakeman:properties', { 'xml:id' => 'scan_info' }
properties.add_element 'brakeman:property', { 'brakeman:name' => 'app_path', 'brakeman:value' => tracker.app_path }
properties.add_element 'brakeman:property', { 'brakeman:name' => 'rails_version', 'brakeman:value' => rails_version }
properties.add_element 'brakeman:property', { 'brakeman:name' => 'security_warnings', 'brakeman:value' => all_warnings.length }
properties.add_element 'brakeman:property', { 'brakeman:name' => 'start_time', 'brakeman:value' => tracker.start_time.iso8601 }
properties.add_element 'brakeman:property', { 'brakeman:name' => 'end_time', 'brakeman:value' => tracker.end_time.iso8601 }
properties.add_element 'brakeman:property', { 'brakeman:name' => 'duration', 'brakeman:value' => tracker.duration }
properties.add_element 'brakeman:property', { 'brakeman:name' => 'checks_performed', 'brakeman:value' => checks.checks_run.join(',') }
properties.add_element 'brakeman:property', { 'brakeman:name' => 'number_of_controllers', 'brakeman:value' => tracker.controllers.length }
properties.add_element 'brakeman:property', { 'brakeman:name' => 'number_of_models', 'brakeman:value' => tracker.models.length - 1 }
properties.add_element 'brakeman:property', { 'brakeman:name' => 'ruby_version', 'brakeman:value' => number_of_templates(@tracker) }
properties.add_element 'brakeman:property', { 'brakeman:name' => 'number_of_templates', 'brakeman:value' => RUBY_VERSION }
properties.add_element 'brakeman:property', { 'brakeman:name' => 'brakeman_version', 'brakeman:value' => Brakeman::Version }

errors = test_suites.add_element 'brakeman:errors'
tracker.errors.each { |e|
error = errors.add_element 'brakeman:error'
error.add_attribute 'brakeman:message', e[:error]
e[:backtrace].each { |b|
backtrace = error.add_element 'brakeman:backtrace'
backtrace.add_text b
}
}

obsolete = test_suites.add_element 'brakeman:obsolete'
tracker.unused_fingerprints.each { |fingerprint|
obsolete.add_element 'brakeman:warning', { 'brakeman:fingerprint' => fingerprint }
}

ignored = test_suites.add_element 'brakeman:ignored'
ignored_warnings.each { |w|
warning = ignored.add_element 'brakeman:warning'
warning.add_attribute 'brakeman:message', w.message
warning.add_attribute 'brakeman:category', w.warning_type
warning.add_attribute 'brakeman:file', w.file.relative
warning.add_attribute 'brakeman:line', w.line
warning.add_attribute 'brakeman:fingerprint', w.fingerprint
warning.add_attribute 'brakeman:confidence', w.confidence
warning.add_attribute 'brakeman:code', w.code
warning.add_text w.to_s
}

hostname = `hostname`.strip
i = 0
all_warnings
.map { |warning| [warning.file, [warning]] }
Expand All @@ -25,13 +67,13 @@ def generate_report
test_suite.add_attribute 'package', 'brakeman'
test_suite.add_attribute 'name', file.relative
test_suite.add_attribute 'timestamp', tracker.start_time.iso8601
test_suite.add_attribute 'hostname', `hostname`.strip
test_suite.add_attribute 'hostname', hostname == '' ? 'localhost' : hostname
test_suite.add_attribute 'tests', checks.checks_run.length
test_suite.add_attribute 'failures', warnings.length
test_suite.add_attribute 'errors', '0'
test_suite.add_attribute 'time', '0'

warnings.each { |warning|
warnings.each { |warning|
test_case = test_suite.add_element 'testcase'
test_case.add_attribute 'name', 'run_check'
test_case.add_attribute 'classname', warning.check
Expand All @@ -40,6 +82,11 @@ def generate_report
failure = test_case.add_element 'failure'
failure.add_attribute 'message', warning.message
failure.add_attribute 'type', warning.warning_type
failure.add_attribute 'brakeman:fingerprint', warning.fingerprint
failure.add_attribute 'brakeman:file', warning.file.relative
failure.add_attribute 'brakeman:line', warning.line
failure.add_attribute 'brakeman:confidence', warning.confidence
failure.add_attribute 'brakeman:code', warning.code
failure.add_text warning.to_s
}
}
Expand Down

0 comments on commit 00f3daa

Please sign in to comment.