com.p6spy.engine.spy.option.P6TestOptionDefaults.java Source code

Java tutorial

Introduction

Here is the source code for com.p6spy.engine.spy.option.P6TestOptionDefaults.java

Source

/*
 * #%L
 * P6Spy
 * %%
 * Copyright (C) 2013 P6Spy
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */
package com.p6spy.engine.spy.option;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import com.p6spy.engine.common.P6LogQuery;
import com.p6spy.engine.logging.Category;
import com.p6spy.engine.logging.P6LogFactory;
import com.p6spy.engine.logging.P6LogLoadableOptions;
import com.p6spy.engine.logging.P6LogOptions;
import com.p6spy.engine.outage.P6OutageFactory;
import com.p6spy.engine.outage.P6OutageLoadableOptions;
import com.p6spy.engine.outage.P6OutageOptions;
import com.p6spy.engine.spy.P6Factory;
import com.p6spy.engine.spy.P6ModuleManager;
import com.p6spy.engine.spy.P6SpyFactory;
import com.p6spy.engine.spy.P6SpyLoadableOptions;
import com.p6spy.engine.spy.P6SpyOptions;
import com.p6spy.engine.spy.appender.FileLogger;
import com.p6spy.engine.spy.appender.SingleLineFormat;
import com.p6spy.engine.test.BaseTestCase;
import com.p6spy.engine.test.P6TestFramework;

public class P6TestOptionDefaults extends BaseTestCase {

    public static final File LOG_FILE = new File("spy.log");

    public static final Category[] DEFAULT_CATEGORIES = new Category[] { Category.INFO, Category.DEBUG,
            Category.RESULT, Category.RESULTSET, Category.BATCH };

    @SuppressWarnings("unchecked")
    private static final List<Class<? extends P6Factory>> DEFAULT_FACTORIES = Arrays.asList(P6SpyFactory.class,
            P6LogFactory.class);

    @BeforeClass
    public static void setUpAll() throws SQLException, IOException {
        // cleanup all
        LOG_FILE.delete();

        // make sure to reinit properly
        new P6TestFramework("blank") {
        };
    }

    @Before
    public void setUp() {
        // make sure to have no modules explicitly loaded by default
        {
            System.clearProperty(SystemProperties.P6SPY_PREFIX + P6SpyOptions.MODULELIST);
            P6SpyOptions.getActiveInstance().reload();
        }
    }

    @After
    public void tearDown() throws SQLException, IOException {
        System.getProperties().remove(SystemProperties.P6SPY_PREFIX + P6SpyOptions.MODULELIST);
    }

    @AfterClass
    public static void tearDownAll() {
        // post clean up
        LOG_FILE.delete();
    }

    @Test
    public void testDefaultOptions() {
        assertP6FactoryClassesEqual(DEFAULT_FACTORIES, P6ModuleManager.getInstance().getFactories());

        Assert.assertNotNull(P6SpyOptions.getActiveInstance());
        Assert.assertNotNull(P6LogOptions.getActiveInstance());
        Assert.assertNull(P6OutageOptions.getActiveInstance());
    }

    private void assertP6FactoryClassesEqual(List<Class<? extends P6Factory>> expected,
            Collection<P6Factory> factories) {
        final Set<Class<? extends P6Factory>> expectedSet = new HashSet<Class<? extends P6Factory>>(expected);

        for (P6Factory factory : factories) {
            expectedSet.remove(factory.getClass());
        }
        Assert.assertTrue(expectedSet.isEmpty());
    }

    @Test
    public void testP6SpyOptionDefaults() {
        P6SpyLoadableOptions opts = P6SpyOptions.getActiveInstance();
        Assert.assertNotNull(opts);

        Assert.assertEquals(SingleLineFormat.class.getName(), opts.getLogMessageFormat());
        Assert.assertEquals("spy.log", opts.getLogfile());
        Assert.assertTrue(opts.getAppend());
        Assert.assertNull(opts.getDateformat());
        Assert.assertEquals(FileLogger.class.getName(), opts.getAppender());
        Assert.assertEquals(P6SpyFactory.class.getName() + "," + P6LogFactory.class.getName(),
                opts.getModulelist());
        Assert.assertEquals(2, opts.getModuleFactories().size());
        assertP6FactoryClassesEqual(DEFAULT_FACTORIES, opts.getModuleFactories());
        Assert.assertEquals(2, opts.getModuleNames().size());
        Assert.assertTrue(opts.getModuleNames().contains(P6SpyFactory.class.getName()));
        Assert.assertTrue(opts.getModuleNames().contains(P6LogFactory.class.getName()));
        Assert.assertEquals("", opts.getDriverlist());
        Assert.assertNull(opts.getDriverNames());
        Assert.assertFalse(opts.getStackTrace());
        Assert.assertNull(opts.getStackTraceClass());
        Assert.assertFalse(opts.getAutoflush());
        Assert.assertFalse(opts.getReloadProperties());
        Assert.assertEquals(60L, opts.getReloadPropertiesInterval());
        Assert.assertNull(opts.getJNDIContextFactory());
        Assert.assertNull(opts.getJNDIContextProviderURL());
        Assert.assertNull(opts.getJNDIContextCustom());
        Assert.assertNull(opts.getRealDataSource());
        Assert.assertNull(opts.getRealDataSourceClass());
        Assert.assertEquals("dd-MMM-yy", opts.getDatabaseDialectDateFormat());
        Assert.assertTrue(opts.getJmx());
        Assert.assertNull(opts.getJmxPrefix());
    }

    @Test
    public void testP6LogOptionDefaults() {
        // make sure to have relevant module loaded
        {
            System.setProperty(SystemProperties.P6SPY_PREFIX + P6SpyOptions.MODULELIST,
                    P6LogFactory.class.getName());
            P6SpyOptions.getActiveInstance().reload();
        }

        final P6LogLoadableOptions opts = P6LogOptions.getActiveInstance();
        Assert.assertNotNull(opts);

        Assert.assertNull(opts.getSQLExpression());
        Assert.assertEquals(0L, opts.getExecutionThreshold());
        Assert.assertEquals("info,debug,result,resultset,batch", opts.getExcludecategories());
        Assert.assertTrue(opts.getExcludeCategoriesSet().containsAll(Arrays.asList(DEFAULT_CATEGORIES)));
        Assert.assertFalse(opts.getFilter());
        Assert.assertNull(opts.getIncludeList());
        Assert.assertNull(opts.getExcludeList());
        Assert.assertNull(opts.getIncludeExcludePattern());
        Assert.assertEquals("", opts.getInclude());
        Assert.assertEquals("", opts.getExclude());
        Assert.assertNull(opts.getSQLExpressionPattern());
    }

    @Test
    public void testP6OutageOptionDefaults() {
        // make sure to have relevant module loaded
        {
            System.setProperty(SystemProperties.P6SPY_PREFIX + P6SpyOptions.MODULELIST,
                    P6OutageFactory.class.getName());
            P6SpyOptions.getActiveInstance().reload();
        }

        final P6OutageLoadableOptions opts = P6OutageOptions.getActiveInstance();
        Assert.assertNotNull(opts);

        Assert.assertFalse(opts.getOutageDetection());
        Assert.assertEquals(30L, opts.getOutageDetectionInterval());
        Assert.assertEquals(30000L, opts.getOutageDetectionIntervalMS());

        // cleanup - make sure go back to default modules
        {
            System.getProperties().remove(SystemProperties.P6SPY_PREFIX + P6SpyOptions.MODULELIST);
            P6SpyOptions.getActiveInstance().reload();
        }
    }

    @Test
    public void testImplicitlyDisabledLogCategories() {
        // let's explicitly remove P6LogFactory (by not including it to list)
        {
            System.setProperty(SystemProperties.P6SPY_PREFIX + P6SpyOptions.MODULELIST, "");
            P6SpyOptions.getActiveInstance().reload();
        }

        try {
            assertDefaultDisabledLogCategories();
        } catch (IOException e) {
            e.printStackTrace();
            Assert.fail();
        }

        // cleanup - make sure go back to default modules
        {
            System.getProperties().remove(SystemProperties.P6SPY_PREFIX + P6SpyOptions.MODULELIST);
            P6SpyOptions.getActiveInstance().reload();
        }
    }

    @Test
    public void testWithP6LogOptionDefaultsDefaultDisabledLogCategories() {
        // P6LogFactory is present by default

        try {
            assertDefaultDisabledLogCategories();
        } catch (IOException e) {
            e.printStackTrace();
            Assert.fail();
        }
    }

    private void assertDefaultDisabledLogCategories() throws IOException {
        {
            final String msg = "debug logged test msg";
            P6LogQuery.debug(msg);
            final String logged = FileUtils.readFileToString(LOG_FILE, "UTF-8");
            Assert.assertFalse(logged.contains(msg));
        }

        {
            final String msg = "info logged test msg";
            P6LogQuery.info(msg);
            final String logged = FileUtils.readFileToString(LOG_FILE, "UTF-8");
            Assert.assertFalse(logged.contains(msg));
        }

        {
            final String msg = "error logged test msg";
            P6LogQuery.error(msg);
            final String logged = FileUtils.readFileToString(LOG_FILE, "UTF-8");
            Assert.assertTrue(logged.contains(msg));
        }
    }
}