<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17308">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">junit: Replace invalid xml characters<br><br>Otherwise junit parser in jenkins fails:<br>org.dom4j.DocumentException: Error on line 20231 of document : An invalid XML character (Unicode: 0x1b) was found in the element content of the document.<br><br>Fixes: 5bbdab8d95dc739112a6d6999d438b5e142392b8<br>Change-Id: Ia629e43bba01e50fd718c16404a7796d4f4e3713<br>---<br>M src/osmo_gsm_tester/report.py<br>1 file changed, 22 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/08/17308/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/report.py b/src/osmo_gsm_tester/report.py</span><br><span>index 6ee3464..8718d0e 100644</span><br><span>--- a/src/osmo_gsm_tester/report.py</span><br><span>+++ b/src/osmo_gsm_tester/report.py</span><br><span>@@ -18,11 +18,32 @@</span><br><span> # along with this program. If not, see <http://www.gnu.org/licenses/>.</span><br><span> </span><br><span> import math</span><br><span style="color: hsl(120, 100%, 40%);">+import sys</span><br><span style="color: hsl(120, 100%, 40%);">+import re</span><br><span> from datetime import datetime</span><br><span> import xml.etree.ElementTree as et</span><br><span> from xml.sax.saxutils import escape</span><br><span> from . import test</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+invalid_xml_char_ranges = [(0x00, 0x08), (0x0B, 0x0C), (0x0E, 0x1F), (0x7F, 0x84),</span><br><span style="color: hsl(120, 100%, 40%);">+ (0x86, 0x9F), (0xFDD0, 0xFDDF), (0xFFFE, 0xFFFF)]</span><br><span style="color: hsl(120, 100%, 40%);">+if sys.maxunicode >= 0x10000: # not narrow build</span><br><span style="color: hsl(120, 100%, 40%);">+ invalid_xml_char_ranges.extend([(0x1FFFE, 0x1FFFF), (0x2FFFE, 0x2FFFF),</span><br><span style="color: hsl(120, 100%, 40%);">+ (0x3FFFE, 0x3FFFF), (0x4FFFE, 0x4FFFF),</span><br><span style="color: hsl(120, 100%, 40%);">+ (0x5FFFE, 0x5FFFF), (0x6FFFE, 0x6FFFF),</span><br><span style="color: hsl(120, 100%, 40%);">+ (0x7FFFE, 0x7FFFF), (0x8FFFE, 0x8FFFF),</span><br><span style="color: hsl(120, 100%, 40%);">+ (0x9FFFE, 0x9FFFF), (0xAFFFE, 0xAFFFF),</span><br><span style="color: hsl(120, 100%, 40%);">+ (0xBFFFE, 0xBFFFF), (0xCFFFE, 0xCFFFF),</span><br><span style="color: hsl(120, 100%, 40%);">+ (0xDFFFE, 0xDFFFF), (0xEFFFE, 0xEFFFF),</span><br><span style="color: hsl(120, 100%, 40%);">+ (0xFFFFE, 0xFFFFF), (0x10FFFE, 0x10FFFF)])</span><br><span style="color: hsl(120, 100%, 40%);">+invalid_xml_char_ranges_str = ['%s-%s' % (chr(low), chr(high))</span><br><span style="color: hsl(120, 100%, 40%);">+ for (low, high) in invalid_xml_char_ranges]</span><br><span style="color: hsl(120, 100%, 40%);">+invalid_xml_char_ranges_regex = re.compile('[%s]' % ''.join(invalid_xml_char_ranges_str))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def escape_xml_invalid_characters(str):</span><br><span style="color: hsl(120, 100%, 40%);">+ replacement_char = '\uFFFD' # Unicode replacement character</span><br><span style="color: hsl(120, 100%, 40%);">+ return invalid_xml_char_ranges_regex.sub(replacement_char, escape(str))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> def trial_to_junit_write(trial, junit_path):</span><br><span> elements = et.ElementTree(element=trial_to_junit(trial))</span><br><span> elements.write(junit_path)</span><br><span>@@ -68,7 +89,7 @@</span><br><span> log_file = t.log_file_path()</span><br><span> if log_file is not None:</span><br><span> with open(log_file, 'r') as myfile:</span><br><span style="color: hsl(0, 100%, 40%);">- sout.text = escape(myfile.read())</span><br><span style="color: hsl(120, 100%, 40%);">+ sout.text = escape_xml_invalid_characters(myfile.read())</span><br><span> else:</span><br><span> sout.text = 'test log file not available'</span><br><span> return testcase</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17308">change 17308</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17308"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia629e43bba01e50fd718c16404a7796d4f4e3713 </div>
<div style="display:none"> Gerrit-Change-Number: 17308 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>