1 package cz.cuni.amis.tests; 2 3 4 import java.io.PrintWriter; 5 import java.io.StringWriter; 6 import java.util.ArrayList; 7 import java.util.Collections; 8 import java.util.Comparator; 9 import java.util.List; 10 import java.util.Properties; 11 import java.util.logging.Level; 12 import java.util.logging.Logger; 13 14 import org.junit.After; 15 import org.junit.Before; 16 import org.junit.BeforeClass; 17 18 import cz.cuni.amis.utils.simple_logging.SimpleLogging; 19 20 public class BaseTest { 21 22 public static final String NEW_LINE = System.getProperty("line.separator"); 23 24 protected static Logger log; 25 26 @BeforeClass 27 public static void baseTestBeforeClass() { 28 SimpleLogging.initLogging(); 29 log = Logger.getLogger("Test"); 30 log.setLevel(Level.ALL); 31 32 log.info("BaseTest.baseTestBeforeClass() BEGIN"); 33 34 Properties props = System.getProperties(); 35 log.info(" Logging initialized."); 36 log.info(" System.getProperties():"); 37 List<Object> keys = new ArrayList<Object>(props.keySet()); 38 Collections.sort(keys, new Comparator() { 39 @Override 40 public int compare(Object o1, Object o2) { 41 if (o1 == null && o2 == null) return 0; 42 if (o1 == null) return -1; 43 if (o2 == null) return -2; 44 if (o1 instanceof String && o2 instanceof String) { 45 return ((String)o1).compareTo((String)o2); 46 } 47 return o1.hashCode() - o2.hashCode(); 48 } 49 }); 50 for (Object key : keys) { 51 if (key == null) continue; 52 log.info(" " + key + " = " + props.getProperty(key.toString())); 53 } 54 log.info(" -------"); 55 log.info(" BaseTest.isWindows(): " + isWindows()); 56 log.info(" BaseTest.isLinux(): " + isLinux()); 57 log.info(" BaseTest.isMac(): " + isMac()); 58 log.info(" BaseTest.is32Bit(): " + is32Bit()); 59 log.info(" BaseTest.is64Bit(): " + is64Bit()); 60 if (isWindows() && isLinux() || isWindows() && isMac() || isLinux() && isMac()) { 61 RuntimeException e = new RuntimeException("Environment not recognized... isWindows(), isLinux(), isMac() inconsistent!"); 62 log.severe(process(e)); 63 throw e; 64 } 65 if (is32Bit() && is64Bit()) { 66 RuntimeException e = new RuntimeException("Environment not recognized, is32Bit() == true, is64Bit() == true!"); 67 log.severe(process(e)); 68 throw e; 69 } 70 if (!isWindows() && !isLinux() && !isMac()) { 71 RuntimeException e = new RuntimeException("Environment not recognized, isWindows() == false, isLinux() == false, isMac() == false!"); 72 log.severe(process(e)); 73 throw e; 74 } 75 if (!is32Bit() && !is64Bit()) { 76 RuntimeException e = new RuntimeException("Environment not recognized, is32Bit() == false, is64Bit() == false!"); 77 log.severe(process(e)); 78 throw e; 79 } 80 log.info("BaseTest.baseTestBeforeClass() END"); 81 } 82 83 private long testStart; 84 85 @Before 86 public void beforeTest() { 87 testStart = System.currentTimeMillis(); 88 } 89 90 @After 91 public void afterTest() { 92 log.finest("Test time: " + (System.currentTimeMillis() - testStart) + " ms"); 93 } 94 95 protected Level getLogLevel() { 96 if (log.getLevel() == Level.ALL) return Level.FINEST; 97 if (log.getLevel() == Level.OFF) return Level.WARNING; 98 if (log.getLevel() == Level.CONFIG) return Level.WARNING; 99 return log.getLevel(); 100 } 101 102 protected void assertTrue(String msg, boolean cnd) { 103 if (!cnd) testFailed(msg); 104 } 105 106 protected void assertFalse(String msg, boolean cnd) { 107 assertTrue(msg, !cnd); 108 } 109 110 protected void assertFail(String msg) { 111 RuntimeException e = new RuntimeException(msg); 112 log.severe(process(e)); 113 throw e; 114 } 115 116 protected void log(String msg) { 117 log.info(msg); 118 } 119 120 protected void testOk() { 121 log.log(getLogLevel(), "---/// TEST OK ///---"); 122 } 123 124 protected void testFailed() { 125 testFailed("TEST FAILED!"); 126 } 127 128 public static boolean isMac() { 129 return System.getProperty("os.name").contains("Mac"); 130 } 131 132 public static boolean isWindows() { 133 return System.getProperty("os.name").contains("Windows"); 134 } 135 136 public static boolean isLinux() { 137 return System.getProperty("os.name").contains("Linux"); 138 } 139 140 public static boolean is32Bit() { 141 if (System.getProperty("sun.arch.data.model") != null) { 142 return System.getProperty("sun.arch.data.model").contains("32"); 143 } 144 return !System.getProperty("java.vm.name").contains("64"); 145 } 146 147 public static boolean is64Bit() { 148 if (System.getProperty("sun.arch.data.model") != null) { 149 return System.getProperty("sun.arch.data.model").contains("64"); 150 } 151 return System.getProperty("java.vm.name").contains("64"); 152 } 153 154 protected void testFailed(String msg) { 155 RuntimeException e = new RuntimeException(msg); 156 log.severe(process("TEST FAILED", e)); 157 throw e; 158 } 159 160 public static String process(String message, Throwable e) { 161 StringBuffer sb = new StringBuffer(); 162 if (message != null) { 163 sb.append(message); 164 sb.append(NEW_LINE); 165 } 166 Throwable cur = e; 167 if (cur != null) { 168 sb.append(cur.getClass().getName() + ": " + cur.getMessage() + 169 cur.getStackTrace() == null || cur.getStackTrace().length == 0 ? 170 " (at UNAVAILABLE)" 171 : " (at " + cur.getStackTrace()[0].toString() + ")" 172 ); 173 cur = cur.getCause(); 174 while (cur != null) { 175 sb.append(NEW_LINE); 176 sb.append("caused by: "); 177 sb.append(cur.getClass().getName() + ": " + cur.getMessage() + 178 cur.getStackTrace() == null || cur.getStackTrace().length == 0 ? 179 " (at UNAVAILABLE)" 180 : " (at " + cur.getStackTrace()[0].toString() + ")" 181 ); 182 cur = cur.getCause(); 183 } 184 sb.append(NEW_LINE); 185 sb.append("Stack trace:"); 186 sb.append(NEW_LINE); 187 StringWriter stringError = new StringWriter(); 188 PrintWriter printError = new PrintWriter(stringError); 189 e.printStackTrace(printError); 190 sb.append(stringError.toString()); 191 } 192 return sb.toString(); 193 } 194 195 public static String process(Throwable e) { 196 return process(null, e); 197 } 198 199 }