<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>