KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > codehaus > loom > components > logger > LogManagerTestCase


1 /*
2  * Copyright (C) The Loom Group. All rights reserved.
3  *
4  * This software is published under the terms of the Loom
5  * Software License version 1.1, a copy of which has been included
6  * with this distribution in the LICENSE.txt file.
7  */

8 package org.codehaus.loom.components.logger;
9
10 import java.io.File JavaDoc;
11 import java.io.FileReader JavaDoc;
12 import java.io.IOException JavaDoc;
13 import java.io.InputStream JavaDoc;
14 import java.util.HashMap JavaDoc;
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 JavaDoc;
33
34 /**
35  * An basic test case for the LogManager.
36  *
37  * @author Peter Donald
38  * @version $Revision: 1.2 $ $Date: 2004/05/01 12:48:35 $
39  */

40 public class LogManagerTestCase
41     extends TestCase
42 {
43     private static final String JavaDoc DEFAULT_LOGFILE = "logs" +
44         File.separator +
45         "default.log";
46     private static final String JavaDoc BLOCK_LOGFILE = "logs" +
47         File.separator +
48         "myBlock.log";
49     private File JavaDoc m_baseDirectory;
50
51     protected void setUp()
52         throws Exception JavaDoc
53     {
54         m_baseDirectory = generateDirectory();
55         //Because log4j does not guarentee dir creation ;(
56
final File JavaDoc logDir = new File JavaDoc( 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 JavaDoc
69     {
70         runtTestForConfigFile( 1 );
71     }
72
73     public void testExcaliburLogger()
74         throws Exception JavaDoc
75     {
76         runtTestForConfigFile( 2 );
77     }
78
79     public void testLog4jVersion()
80         throws Exception JavaDoc
81     {
82         runtTestForConfigFile( 3 );
83     }
84
85     private void runtTestForConfigFile( final int index )
86         throws Exception JavaDoc
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 JavaDoc 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 JavaDoc 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 JavaDoc filename )
120     {
121         final File JavaDoc file = new File JavaDoc( m_baseDirectory, filename );
122         final StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
123         try
124         {
125             final FileReader JavaDoc fr = new FileReader JavaDoc( 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 JavaDoc e )
134         {
135             e.printStackTrace();
136         }
137         return sb.length();
138     }
139
140     private LoggerStore createHierarchy( final int index )
141         throws Exception JavaDoc
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         //make sure directory is created else log4j will fail.
153
if( 3 == index )
154         {
155             final File JavaDoc file =
156                 new File JavaDoc( m_baseDirectory.getAbsolutePath() +
157                           File.separator +
158                           "logs" );
159             file.mkdirs();
160         }
161
162         final HashMap JavaDoc context = new HashMap JavaDoc();
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 JavaDoc
178     {
179         final File JavaDoc homeDirectory = sarMetaData.getHomeDirectory();
180         FileUtil.deleteDirectory( homeDirectory );
181         homeDirectory.mkdirs();
182     }
183
184     private Configuration loadConfig( final String JavaDoc config )
185         throws Exception JavaDoc
186     {
187         final InputStream JavaDoc resource =
188             getClass().getResourceAsStream( config );
189         return ConfigurationUtil.buildFromXML( new InputSource JavaDoc( resource ) );
190     }
191
192     private static final File JavaDoc generateDirectory()
193         throws IOException JavaDoc
194     {
195         final File JavaDoc baseDirectory = getBaseDirectory();
196         final File JavaDoc 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 JavaDoc getBaseDirectory()
206     {
207         final String JavaDoc tempDir = System.getProperty( "java.io.tmpdir" );
208         final String JavaDoc baseDir = System.getProperty( "basedir", tempDir );
209
210         final File JavaDoc base = new File JavaDoc( baseDir ).getAbsoluteFile();
211         final String JavaDoc pathname =
212             base + File.separator + "target" + File.separator + "test-data";
213         final File JavaDoc dir = new File JavaDoc( pathname );
214         dir.mkdirs();
215         return dir;
216     }
217 }
218
Popular Tags