Package org.codehaus.loom.components.logger

Source Code of org.codehaus.loom.components.logger.LogManagerTestCase

/*
* Copyright (C) The Loom Group. All rights reserved.
*
* This software is published under the terms of the Loom
* Software License version 1.1, a copy of which has been included
* with this distribution in the LICENSE.txt file.
*/
package org.codehaus.loom.components.logger;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;

import org.apache.avalon.phoenix.BlockContext;
import org.apache.avalon.phoenix.metadata.BlockListenerMetaData;
import org.apache.avalon.phoenix.metadata.BlockMetaData;
import org.apache.avalon.phoenix.metadata.SarMetaData;

import junit.framework.TestCase;

import org.codehaus.loom.components.logger.DefaultLogManager;
import org.codehaus.loom.interfaces.LogManager;
import org.codehaus.spice.loggerstore.LoggerStore;
import org.codehaus.spice.salt.io.FileUtil;
import org.codehaus.dna.Configuration;
import org.codehaus.dna.Logger;
import org.codehaus.dna.impl.ConfigurationUtil;
import org.codehaus.dna.impl.ConsoleLogger;
import org.codehaus.dna.impl.ContainerUtil;
import org.xml.sax.InputSource;

/**
* An basic test case for the LogManager.
*
* @author Peter Donald
* @version $Revision: 1.2 $ $Date: 2004/05/01 12:48:35 $
*/
public class LogManagerTestCase
    extends TestCase
{
    private static final String DEFAULT_LOGFILE = "logs" +
        File.separator +
        "default.log";
    private static final String BLOCK_LOGFILE = "logs" +
        File.separator +
        "myBlock.log";
    private File m_baseDirectory;

    protected void setUp()
        throws Exception
    {
        m_baseDirectory = generateDirectory();
        //Because log4j does not guarentee dir creation ;(
        final File logDir = new File( m_baseDirectory, "logs" );
        logDir.mkdirs();
    }

    private LogManager createLogManager()
    {
        final DefaultLogManager logManager = new DefaultLogManager();
        ContainerUtil.enableLogging( logManager, new ConsoleLogger() );
        return logManager;
    }

    public void testBasic()
        throws Exception
    {
        runtTestForConfigFile( 1 );
    }

    public void testExcaliburLogger()
        throws Exception
    {
        runtTestForConfigFile( 2 );
    }

    public void testLog4jVersion()
        throws Exception
    {
        runtTestForConfigFile( 3 );
    }

    private void runtTestForConfigFile( final int index )
        throws Exception
    {
        final LoggerStore hierarchy = createHierarchy( index );
        final Logger rootLogger = hierarchy.getLogger();
        runLoggerTest( rootLogger, DEFAULT_LOGFILE );

        final Logger childLogger = hierarchy.getLogger( "myBlock" );
        runLoggerTest( childLogger, BLOCK_LOGFILE );
    }

    private void runLoggerTest( final Logger logger,
                                final String logfile )
    {
        final long before = getFileSize( logfile );
        logger.warn( "Danger Will Robinson, Danger!" );
        final long after = getFileSize( logfile );

        assertFileGrew( logfile, before, after );
    }

    private void assertFileGrew( final String logfile,
                                 final long before,
                                 final long after )
    {
        assertTrue( "Did " +
                    logfile +
                    " file grow?, Before: " +
                    before +
                    ", After: " +
                    after,
                    before < after );
    }

    private long getFileSize( final String filename )
    {
        final File file = new File( m_baseDirectory, filename );
        final StringBuffer sb = new StringBuffer();
        try
        {
            final FileReader fr = new FileReader( file );
            int c = 0;
            while( c != -1 )
            {
                c = fr.read();
                sb.append( Character.forDigit( c, 10 ) );
            }
        }
        catch( Exception e )
        {
            e.printStackTrace();
        }
        return sb.length();
    }

    private LoggerStore createHierarchy( final int index )
        throws Exception
    {
        final Configuration logs = loadConfig( "config" + index + ".xml" );
        final LogManager logManager = createLogManager();
        final SarMetaData sarMetaData =
            new SarMetaData( "test",
                             m_baseDirectory,
                             new BlockMetaData[0],
                             new BlockListenerMetaData[0] );
        cleanHomeDirectory( sarMetaData );

        //make sure directory is created else log4j will fail.
        if( 3 == index )
        {
            final File file =
                new File( m_baseDirectory.getAbsolutePath() +
                          File.separator +
                          "logs" );
            file.mkdirs();
        }

        final HashMap context = new HashMap();
        context.put( BlockContext.APP_NAME, sarMetaData.getName() );
        context.put( BlockContext.APP_HOME_DIR,
                     sarMetaData.getHomeDirectory() );
        context.put( "classloader", getClass().getClassLoader() );

        final LoggerStore store =
            logManager.createHierarchy( logs,
                                        sarMetaData.getHomeDirectory(),
                                        sarMetaData.getHomeDirectory(),
                                        context );
        return store;
    }

    private void cleanHomeDirectory( final SarMetaData sarMetaData )
        throws IOException
    {
        final File homeDirectory = sarMetaData.getHomeDirectory();
        FileUtil.deleteDirectory( homeDirectory );
        homeDirectory.mkdirs();
    }

    private Configuration loadConfig( final String config )
        throws Exception
    {
        final InputStream resource =
            getClass().getResourceAsStream( config );
        return ConfigurationUtil.buildFromXML( new InputSource( resource ) );
    }

    private static final File generateDirectory()
        throws IOException
    {
        final File baseDirectory = getBaseDirectory();
        final File dir =
            File.createTempFile( "mgtest", ".tmp", baseDirectory )
            .getCanonicalFile();
        dir.delete();
        dir.mkdirs();
        assertTrue( "dir.exists()", dir.exists() );
        return dir;
    }

    private static final File getBaseDirectory()
    {
        final String tempDir = System.getProperty( "java.io.tmpdir" );
        final String baseDir = System.getProperty( "basedir", tempDir );

        final File base = new File( baseDir ).getAbsoluteFile();
        final String pathname =
            base + File.separator + "target" + File.separator + "test-data";
        final File dir = new File( pathname );
        dir.mkdirs();
        return dir;
    }
}
TOP

Related Classes of org.codehaus.loom.components.logger.LogManagerTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.