Ложные символы ^ G (BELL) в журнале JUnit, создающие CruiseControl barf

У меня есть сервер сборки CruiseControl, на котором запущено большое количество проектов. На одном из них я недавно заметил, что в отчете о сборке присутствует только один из двух наборов тестов (но сбои в другом по-прежнему приводят к сбою сборки).

Дальнейшее расследование показало, что выходной XML-файл JUnit, созданный с помощью xmlformatter ant (который CruiseControl анализирует для создания отчетов о сборке), содержит случайные экземпляры символа кода ASCII 7 (BELL) внутри раздела CDATA, содержащего систему. -вне тестового случая. Cruiscontrol явно не может с этим справиться, и xmllint также считает эти символы незаконными в разделе CDATA.

К сожалению, я не могу найти ничего, что могло бы написать эти символы; они появляются в начале определенной строки вывода журнала, но не всегда (хотя код регистрации всегда печатает один и тот же строковый литерал).

И разве xmlformatter не должен создавать действительный XML независимо от того, что тестовый пример записывает в свой стандартный вывод?

У кого-нибудь были подобные проблемы?

Вот как выглядят соответствующие разделы XML-файла журнала (анонимно, поскольку это корпоративное приложение):

  <testcase classname="Testclass" name="testMethod" time="0.0020"></testcase>
  <system-out><![CDATA[15.10.09 16:49:41.161 (MainUIClass): Starte UI initialize
...
^G15.10.09 16:49:58.881 (SubUiClass): Starte UI initialize
15.10.09 16:49:58.881 (SubUiClass): UI initialize beendet
^G15.10.09 16:49:59.264 (SubUiClass): Starte UI initialize
15.10.09 16:49:59.264 (SubUiClass): UI initialize beendet

Это код, производящий этот вывод журнала:

SystemProperties.getLogger().logInfo(getClass(), "Starte UI initialize");
...
SystemProperties.getLogger().logInfo(getClass(), "UI initialize beendet");

person Michael Borgwardt    schedule 15.10.2009    source источник
comment
Очень интересная проблема! Не могли бы вы опубликовать зараженный XML? Думаю, было бы полезно, спасибо!   -  person guerda    schedule 15.10.2009
comment
Всегда ли это происходит при инициализации Starte UI? Или лучше: всегда ли это происходит после инициализации UI? Кстати, привет из Германии;)   -  person guerda    schedule 16.10.2009
comment
Не могли бы вы изменить кодировку файла Java? Может быть там невидимые персонажи. Вы пробовали переписать строки журнала?   -  person guerda    schedule 16.10.2009
comment
Кажется, что он всегда находится между этими двумя строками (но не каждый раз, когда они встречаются). Однако это происходит гораздо чаще, чем что-либо еще в потоке sysout. В некоторых случаях в начале строки содержится несколько символов BELL. И я проверил исходные файлы - там ничего подозрительного.   -  person Michael Borgwardt    schedule 16.10.2009


Ответы (1)


Теперь я обнаружил, что проблемные символы являются частью потока stdout тестов и создаются методом beep() sun.awt.HeadlessToolkit, то есть реализацией Toolkit, которая используется, когда, как в случае на сервере сборки, системное свойство java.awt.headless установлено на true.

Мне кажется очевидным, что это, прежде всего, ошибка в ant xmlformatter для журналов JUnit, который (я бы сказал) должен выдавать корректный XML-вывод независимо от того, что находится в потоке stdout.

Изменить. Я использовал старую версию ant; в текущей версии (1.7.1) этой проблемы нет.

person Michael Borgwardt    schedule 16.10.2009
comment
Это определенно WTF ... Покажите мне запись об ошибке, и я проголосую за нее. - person guerda; 19.10.2009