1 8 package org.codehaus.loom.components.logger; 9 10 import java.io.File ; 11 import java.io.FileReader ; 12 import java.io.IOException ; 13 import java.io.InputStream ; 14 import java.util.HashMap ; 15 16 import org.apache.avalon.phoenix.BlockContext; 17 import org.apache.avalon.phoenix.metadata.BlockListenerMetaData; 18 import org.apache.avalon.phoenix.metadata.BlockMetaData; 19 import org.apache.avalon.phoenix.metadata.SarMetaData; 20 21 import junit.framework.TestCase; 22 23 import org.codehaus.loom.components.logger.DefaultLogManager; 24 import org.codehaus.loom.interfaces.LogManager; 25 import org.codehaus.spice.loggerstore.LoggerStore; 26 import org.codehaus.spice.salt.io.FileUtil; 27 import org.codehaus.dna.Configuration; 28 import org.codehaus.dna.Logger; 29 import org.codehaus.dna.impl.ConfigurationUtil; 30 import org.codehaus.dna.impl.ConsoleLogger; 31 import org.codehaus.dna.impl.ContainerUtil; 32 import org.xml.sax.InputSource ; 33 34 40 public class LogManagerTestCase 41 extends TestCase 42 { 43 private static final String DEFAULT_LOGFILE = "logs" + 44 File.separator + 45 "default.log"; 46 private static final String BLOCK_LOGFILE = "logs" + 47 File.separator + 48 "myBlock.log"; 49 private File m_baseDirectory; 50 51 protected void setUp() 52 throws Exception 53 { 54 m_baseDirectory = generateDirectory(); 55 final File logDir = new File ( m_baseDirectory, "logs" ); 57 logDir.mkdirs(); 58 } 59 60 private LogManager createLogManager() 61 { 62 final DefaultLogManager logManager = new DefaultLogManager(); 63 ContainerUtil.enableLogging( logManager, new ConsoleLogger() ); 64 return logManager; 65 } 66 67 public void testBasic() 68 throws Exception 69 { 70 runtTestForConfigFile( 1 ); 71 } 72 73 public void testExcaliburLogger() 74 throws Exception 75 { 76 runtTestForConfigFile( 2 ); 77 } 78 79 public void testLog4jVersion() 80 throws Exception 81 { 82 runtTestForConfigFile( 3 ); 83 } 84 85 private void runtTestForConfigFile( final int index ) 86 throws Exception 87 { 88 final LoggerStore hierarchy = createHierarchy( index ); 89 final Logger rootLogger = hierarchy.getLogger(); 90 runLoggerTest( rootLogger, DEFAULT_LOGFILE ); 91 92 final Logger childLogger = hierarchy.getLogger( "myBlock" ); 93 runLoggerTest( childLogger, BLOCK_LOGFILE ); 94 } 95 96 private void runLoggerTest( final Logger logger, 97 final String logfile ) 98 { 99 final long before = getFileSize( logfile ); 100 logger.warn( "Danger Will Robinson, Danger!" ); 101 final long after = getFileSize( logfile ); 102 103 assertFileGrew( logfile, before, after ); 104 } 105 106 private void assertFileGrew( final String logfile, 107 final long before, 108 final long after ) 109 { 110 assertTrue( "Did " + 111 logfile + 112 " file grow?, Before: " + 113 before + 114 ", After: " + 115 after, 116 before < after ); 117 } 118 119 private long getFileSize( final String filename ) 120 { 121 final File file = new File ( m_baseDirectory, filename ); 122 final StringBuffer sb = new StringBuffer (); 123 try 124 { 125 final FileReader fr = new FileReader ( file ); 126 int c = 0; 127 while( c != -1 ) 128 { 129 c = fr.read(); 130 sb.append( Character.forDigit( c, 10 ) ); 131 } 132 } 133 catch( Exception e ) 134 { 135 e.printStackTrace(); 136 } 137 return sb.length(); 138 } 139 140 private LoggerStore createHierarchy( final int index ) 141 throws Exception 142 { 143 final Configuration logs = loadConfig( "config" + index + ".xml" ); 144 final LogManager logManager = createLogManager(); 145 final SarMetaData sarMetaData = 146 new SarMetaData( "test", 147 m_baseDirectory, 148 new BlockMetaData[0], 149 new BlockListenerMetaData[0] ); 150 cleanHomeDirectory( sarMetaData ); 151 152 if( 3 == index ) 154 { 155 final File file = 156 new File ( m_baseDirectory.getAbsolutePath() + 157 File.separator + 158 "logs" ); 159 file.mkdirs(); 160 } 161 162 final HashMap context = new HashMap (); 163 context.put( BlockContext.APP_NAME, sarMetaData.getName() ); 164 context.put( BlockContext.APP_HOME_DIR, 165 sarMetaData.getHomeDirectory() ); 166 context.put( "classloader", getClass().getClassLoader() ); 167 168 final LoggerStore store = 169 logManager.createHierarchy( logs, 170 sarMetaData.getHomeDirectory(), 171 sarMetaData.getHomeDirectory(), 172 context ); 173 return store; 174 } 175 176 private void cleanHomeDirectory( final SarMetaData sarMetaData ) 177 throws IOException 178 { 179 final File homeDirectory = sarMetaData.getHomeDirectory(); 180 FileUtil.deleteDirectory( homeDirectory ); 181 homeDirectory.mkdirs(); 182 } 183 184 private Configuration loadConfig( final String config ) 185 throws Exception 186 { 187 final InputStream resource = 188 getClass().getResourceAsStream( config ); 189 return ConfigurationUtil.buildFromXML( new InputSource ( resource ) ); 190 } 191 192 private static final File generateDirectory() 193 throws IOException 194 { 195 final File baseDirectory = getBaseDirectory(); 196 final File dir = 197 File.createTempFile( "mgtest", ".tmp", baseDirectory ) 198 .getCanonicalFile(); 199 dir.delete(); 200 dir.mkdirs(); 201 assertTrue( "dir.exists()", dir.exists() ); 202 return dir; 203 } 204 205 private static final File getBaseDirectory() 206 { 207 final String tempDir = System.getProperty( "java.io.tmpdir" ); 208 final String baseDir = System.getProperty( "basedir", tempDir ); 209 210 final File base = new File ( baseDir ).getAbsoluteFile(); 211 final String pathname = 212 base + File.separator + "target" + File.separator + "test-data"; 213 final File dir = new File ( pathname ); 214 dir.mkdirs(); 215 return dir; 216 } 217 } 218 | Popular Tags |