changeset 575:aff6fb36a9ab

Fixed logging bottleneck Xml logging is now filtering not-unicode characters. Logging have more propper test-method recognition
author Jiri Vanek <jvanek@redhat.com>
date Mon, 03 Dec 2012 18:08:38 +0100
parents eedc15145aa6
children 741a105054af
files ChangeLog tests/test-extensions/net/sourceforge/jnlp/LoggingBottleneck.java tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java
diffstat 3 files changed, 53 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Dec 03 14:43:18 2012 +0100
+++ b/ChangeLog	Mon Dec 03 18:08:38 2012 +0100
@@ -1,3 +1,13 @@
+2012-11-03  Jiri Vanek <jvanek@redhat.com>
+
+	Fixed logging bottleneck
+	* tests/test-extensions/net/sourceforge/jnlp/LoggingBottleneck.java: 
+	added and used function (clearChars) which filter characters going to xml
+	from invalid ones.
+	* tests/test-extensions/net/sourceforge/jnlp/ServerAccess: getting test
+	method id by (getTestMethod) now relay on physical way to the class as
+	the only real thing differing test class and framework class.
+
 2012-12-03  Pavel Tisnovsky  <ptisnovs@redhat.com>
 
 	* Makefile.am: Added new target for compiling softkiller.
--- a/tests/test-extensions/net/sourceforge/jnlp/LoggingBottleneck.java	Mon Dec 03 14:43:18 2012 +0100
+++ b/tests/test-extensions/net/sourceforge/jnlp/LoggingBottleneck.java	Mon Dec 03 18:08:38 2012 +0100
@@ -117,7 +117,7 @@
                 String testName = testLog.getKey();
                 String testLogs = testLog.getValue().toString();
                 w.write("<" + TESTLOG_ELEMENT + " " + TESTMETHOD_ATTRIBUTE + "=\"" + testName + "\" " + FULLID_ATTRIBUTE + "=\"" + className + "." + testName + "\"  >");
-                w.write(testLogs);
+                w.write(clearChars(testLogs));
                 w.write("</" + TESTLOG_ELEMENT + ">");
             }
             w.write("</" + CLASSLOG_ELEMENT + ">");
@@ -215,4 +215,24 @@
         DEFAULT_STDLOGS_WRITER.newLine();
         DEFAULT_STDLOGS_WRITER.flush();
     }
+    
+    public static String clearChars(String ss) {
+        StringBuilder s = new StringBuilder(ss);
+        for (int i = 0; i < s.length(); i++) {
+            char q = s.charAt(i);
+            if (q == '\n') {
+                continue;
+            }
+            if (q == '\t') {
+                continue;
+            }
+            int iq = (int) q;
+            if ((iq <= 31 || iq > 65533)||(iq >= 64976 && iq <= 65007)) {
+                s.setCharAt(i, 'I');
+                s.insert(i + 1, "NVALID_CHAR_" + iq);
+                i--;
+            }
+        }
+        return s.toString();
+    }
 }
--- a/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java	Mon Dec 03 14:43:18 2012 +0100
+++ b/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java	Mon Dec 03 18:08:38 2012 +0100
@@ -783,8 +783,27 @@
             //probablky it is necessary to get out of net.sourceforge.jnlp.
             //package where are right now all test-extensions
             //for now keeping exactly the three clases helping yo  acces the log
-            if (!stack[i].getClassName().startsWith("net.sourceforge.jnlp.")) {
-                break;
+            try {
+                Class clazz = Class.forName(stack[i].getClassName());
+                String path = null;
+                try {
+                    path = clazz.getProtectionDomain().getCodeSource().getLocation().getPath();
+                } catch (NullPointerException ex) {
+                    //silently ignoring and continuing with null path
+                }
+                if (path != null && path.contains("/tests.build/")) {
+                    if (!path.contains("/test-extensions/")) {
+                        break;
+                    }
+                } else {
+                    //running from ide 
+                    if (!stack[i].getClassName().startsWith("net.sourceforge.jnlp.")) {
+                        break;
+                    }
+                }
+            } catch (ClassNotFoundException ex) {
+                ///should not happen, searching  only for already loaded class
+                ex.printStackTrace();
             }
         }
         //if nothing left in stack then we have been in ServerAccess already
@@ -793,7 +812,7 @@
         if (i >= stack.length) {
             return result;
         }
-        //now we are out of net.sourceforge.jnlp.*
+        //now we are out of test-extensions
         //method we need (the test)  is highest from following class
         baseClass = stack[i].getClassName();
         for (; i < stack.length; i++) {