org.marketcetera.util.except.ExceptUtilsTest.java Source code

Java tutorial

Introduction

Here is the source code for org.marketcetera.util.except.ExceptUtilsTest.java

Source

package org.marketcetera.util.except;

import java.io.InterruptedIOException;
import java.nio.channels.ClosedByInterruptException;
import java.nio.channels.FileLockInterruptionException;
import java.rmi.activation.ActivationException;
import java.rmi.activation.UnknownObjectException;
import javax.naming.InterruptedNamingException;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.log4j.Level;
import org.junit.Before;
import org.junit.Test;
import org.marketcetera.util.log.I18NBoundMessage1P;

import static org.junit.Assert.*;

/**
 * @author tlerios@marketcetera.com
 * @since 0.5.0
 * @version $Id$
 */

/* $License$ */

public class ExceptUtilsTest extends I18NThrowableTestBase {
    private static final String TEST_CATEGORY = ExceptUtils.class.getName();
    private static final String TEST_LOCATION = TEST_CATEGORY;

    private static void interruptHelper(Exception ex, boolean interrupted) {
        assertEquals(interrupted, ExceptUtils.interrupt(ex));
        assertEquals(interrupted, Thread.interrupted());
    }

    private void swallowHelper(Exception ex, boolean interrupted) {
        assertEquals(interrupted, ExceptUtils.swallow(ex, TEST_CATEGORY,
                new I18NBoundMessage1P(TestMessages.MID_EXCEPTION, MID_MSG_PARAM)));
        assertEquals(interrupted, Thread.interrupted());
        assertSingleEvent(Level.WARN, TEST_CATEGORY, MID_MSG_EN, TEST_LOCATION);

        assertEquals(interrupted, ExceptUtils.swallow(ex));
        assertEquals(interrupted, Thread.interrupted());
        assertSingleEvent(Level.WARN, TEST_CATEGORY, "Caught throwable was not propagated", TEST_LOCATION);
    }

    private static void wrapHelper(Exception ex, boolean interruption) {
        I18NException out = ExceptUtils.wrap(ex, new I18NBoundMessage1P(TestMessages.MID_EXCEPTION, MID_MSG_PARAM));

        assertEquals(out.getDetail(), new I18NBoundMessage1P(TestMessages.MID_EXCEPTION, MID_MSG_PARAM),
                out.getI18NBoundMessage());
        assertEquals(ex, out.getCause());
        assertTrue(out instanceof I18NException);
        assertEquals(interruption, out instanceof I18NInterruptedException);
        assertEquals(interruption, Thread.interrupted());

        out = ExceptUtils.wrap(ex);
        assertEquals(ex, out.getCause());
        assertTrue(out instanceof I18NException);
        assertEquals(interruption, out instanceof I18NInterruptedException);
        assertEquals(interruption, Thread.interrupted());

        I18NRuntimeException outR = ExceptUtils.wrapRuntime(ex,
                new I18NBoundMessage1P(TestMessages.MID_EXCEPTION, MID_MSG_PARAM));
        assertEquals(outR.getDetail(), new I18NBoundMessage1P(TestMessages.MID_EXCEPTION, MID_MSG_PARAM),
                outR.getI18NBoundMessage());
        assertEquals(ex, outR.getCause());
        assertTrue(outR instanceof I18NRuntimeException);
        assertEquals(interruption, outR instanceof I18NInterruptedRuntimeException);
        assertEquals(interruption, Thread.interrupted());

        outR = ExceptUtils.wrapRuntime(ex);
        assertEquals(ex, outR.getCause());
        assertTrue(outR instanceof I18NRuntimeException);
        assertEquals(interruption, outR instanceof I18NInterruptedRuntimeException);
        assertEquals(interruption, Thread.interrupted());
    }

    private static void equalityHelper(Throwable t1, Throwable t2, Throwable[] diffs) {
        assertTrue(ExceptUtils.areEqual(t1, t1));

        assertTrue(ExceptUtils.areEqual(t1, t2));
        assertTrue(ExceptUtils.areEqual(t2, t1));
        assertNotSame(t1, t2);

        for (Throwable t : diffs) {
            assertFalse(ExceptUtils.areEqual(t1, t));
            assertFalse(ExceptUtils.areEqual(t, t1));
        }

        assertFalse(ExceptUtils.areEqual(t1, null));
        assertFalse(ExceptUtils.areEqual(t1, NumberUtils.INTEGER_ZERO));

        assertEquals(ExceptUtils.getHashCode(t1), ExceptUtils.getHashCode(t2));
    }

    @Before
    public void setupExceptUtilsTest() {
        setLevel(TEST_CATEGORY, Level.WARN);
    }

    @Test
    public void interruptionEmptyNoThrow() throws Exception {
        ExceptUtils.checkInterruption();
    }

    @Test
    public void interruptionEmptyThrow() {
        Thread.currentThread().interrupt();
        try {
            ExceptUtils.checkInterruption();
            fail();
        } catch (InterruptedException ex) {
            assertTrue(Thread.interrupted());
            assertEquals("Thread execution was interrupted", ex.getMessage());
            assertNull(ex.getCause());
        }
    }

    @Test
    public void interruptionNestedNoThrow() throws Exception {
        ExceptUtils.checkInterruption(new CloneNotSupportedException());
    }

    @Test
    public void interruptionNestedThrow() {
        CloneNotSupportedException nested = new CloneNotSupportedException();
        Thread.currentThread().interrupt();
        try {
            ExceptUtils.checkInterruption(nested);
            fail();
        } catch (InterruptedException ex) {
            assertTrue(Thread.interrupted());
            assertEquals("Thread execution was interrupted", ex.getMessage());
            assertEquals(nested, ex.getCause());
        }
    }

    @Test
    public void interruptionMessageNoThrow() throws Exception {
        ExceptUtils.checkInterruption(TEST_MSG_1);
    }

    @Test
    public void interruptionMessageThrow() {
        Thread.currentThread().interrupt();
        try {
            ExceptUtils.checkInterruption(TEST_MSG_1);
            fail();
        } catch (InterruptedException ex) {
            assertTrue(Thread.interrupted());
            assertEquals(TEST_MSG_1, ex.getMessage());
            assertNull(ex.getCause());
        }
    }

    @Test
    public void interruptionMessageNestedNoThrow() throws Exception {
        ExceptUtils.checkInterruption(new CloneNotSupportedException(), TEST_MSG_1);
    }

    @Test
    public void interruptionMessageNestedThrow() {
        CloneNotSupportedException nested = new CloneNotSupportedException();
        Thread.currentThread().interrupt();
        try {
            ExceptUtils.checkInterruption(nested, TEST_MSG_1);
            fail();
        } catch (InterruptedException ex) {
            assertTrue(Thread.interrupted());
            assertEquals(TEST_MSG_1, ex.getMessage());
            assertEquals(nested, ex.getCause());
        }
    }

    @Test
    public void interruptException() {
        assertFalse(ExceptUtils.isInterruptException(new CloneNotSupportedException()));
        assertTrue(ExceptUtils.isInterruptException(new InterruptedException()));
        assertTrue(ExceptUtils.isInterruptException(new InterruptedIOException()));
        assertTrue(ExceptUtils.isInterruptException(new ClosedByInterruptException()));
        assertTrue(ExceptUtils.isInterruptException(new FileLockInterruptionException()));
        assertTrue(ExceptUtils.isInterruptException(new InterruptedNamingException()));
        assertTrue(ExceptUtils.isInterruptException(new I18NInterruptedException()));
        assertTrue(ExceptUtils.isInterruptException(new I18NInterruptedRuntimeException()));
    }

    @Test
    public void interrupt() {
        interruptHelper(new CloneNotSupportedException(), false);
        interruptHelper(new InterruptedException(), true);
        interruptHelper(new InterruptedIOException(), true);
        interruptHelper(new ClosedByInterruptException(), true);
        interruptHelper(new FileLockInterruptionException(), true);
        interruptHelper(new InterruptedNamingException(), true);
        interruptHelper(new I18NInterruptedException(), true);
        interruptHelper(new I18NInterruptedRuntimeException(), true);
    }

    @Test
    public void swallow() {
        swallowHelper(new CloneNotSupportedException(), false);
        swallowHelper(new InterruptedException(), true);
        swallowHelper(new InterruptedIOException(), true);
        swallowHelper(new ClosedByInterruptException(), true);
        swallowHelper(new FileLockInterruptionException(), true);
        swallowHelper(new InterruptedNamingException(), true);
        swallowHelper(new I18NInterruptedException(), true);
        swallowHelper(new I18NInterruptedRuntimeException(), true);
    }

    @Test
    public void wrap() {
        wrapHelper(new CloneNotSupportedException(), false);
        wrapHelper(new InterruptedException(), true);
        wrapHelper(new InterruptedIOException(), true);
        wrapHelper(new ClosedByInterruptException(), true);
        wrapHelper(new FileLockInterruptionException(), true);
        wrapHelper(new InterruptedNamingException(), true);
        wrapHelper(new I18NInterruptedException(), true);
        wrapHelper(new I18NInterruptedRuntimeException(), true);
    }

    @Test
    public void equality() {
        assertTrue(ExceptUtils.areEqual(null, null));
        equalityHelper(new ActivationException(TEST_MSG_1), new ActivationException(TEST_MSG_1),
                new Throwable[] { new ActivationException(), new ActivationException(TEST_MSG_2),
                        new UnknownObjectException(TEST_MSG_1), new I18NException(), null });
        equalityHelper(
                new I18NException(new ActivationException(TEST_MSG_1),
                        new I18NBoundMessage1P(TestMessages.MID_EXCEPTION, MID_MSG_PARAM)),
                new I18NException(new ActivationException(TEST_MSG_1),
                        new I18NBoundMessage1P(TestMessages.MID_EXCEPTION, MID_MSG_PARAM)),
                new Throwable[] { new I18NException(new ActivationException(TEST_MSG_1)),
                        new I18NException(new ActivationException(TEST_MSG_1), TestMessages.BOT_EXCEPTION),
                        new I18NException(new ActivationException(TEST_MSG_2),
                                new I18NBoundMessage1P(TestMessages.MID_EXCEPTION, MID_MSG_PARAM)),
                        new I18NException(new I18NBoundMessage1P(TestMessages.MID_EXCEPTION, MID_MSG_PARAM)),
                        new ActivationException(TEST_MSG_1), null });
    }
}