177391c2a01ce1fed085906743cc240a4d58edd92chrismair/*
277391c2a01ce1fed085906743cc240a4d58edd92chrismair * Copyright 2007 the original author or authors.
377391c2a01ce1fed085906743cc240a4d58edd92chrismair *
477391c2a01ce1fed085906743cc240a4d58edd92chrismair * Licensed under the Apache License, Version 2.0 (the "License");
577391c2a01ce1fed085906743cc240a4d58edd92chrismair * you may not use this file except in compliance with the License.
677391c2a01ce1fed085906743cc240a4d58edd92chrismair * You may obtain a copy of the License at
777391c2a01ce1fed085906743cc240a4d58edd92chrismair *
877391c2a01ce1fed085906743cc240a4d58edd92chrismair *      http://www.apache.org/licenses/LICENSE-2.0
977391c2a01ce1fed085906743cc240a4d58edd92chrismair *
1077391c2a01ce1fed085906743cc240a4d58edd92chrismair * Unless required by applicable law or agreed to in writing, software
1177391c2a01ce1fed085906743cc240a4d58edd92chrismair * distributed under the License is distributed on an "AS IS" BASIS,
1277391c2a01ce1fed085906743cc240a4d58edd92chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1377391c2a01ce1fed085906743cc240a4d58edd92chrismair * See the License for the specific language governing permissions and
1477391c2a01ce1fed085906743cc240a4d58edd92chrismair * limitations under the License.
1577391c2a01ce1fed085906743cc240a4d58edd92chrismair */
1677391c2a01ce1fed085906743cc240a4d58edd92chrismairpackage org.mockftpserver.test;
1777391c2a01ce1fed085906743cc240a4d58edd92chrismair
1877391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.io.File;
1977391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.net.InetAddress;
2077391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.net.UnknownHostException;
2177391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.util.ArrayList;
2277391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.util.Arrays;
2377391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.util.Collections;
2477391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.util.HashMap;
2577391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.util.HashSet;
2677391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.util.Iterator;
2777391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.util.List;
2877391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.util.Map;
2977391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.util.Set;
3077391c2a01ce1fed085906743cc240a4d58edd92chrismair
3177391c2a01ce1fed085906743cc240a4d58edd92chrismairimport junit.framework.TestCase;
3277391c2a01ce1fed085906743cc240a4d58edd92chrismair
3377391c2a01ce1fed085906743cc240a4d58edd92chrismairimport org.apache.log4j.Logger;
3477391c2a01ce1fed085906743cc240a4d58edd92chrismairimport org.easymock.MockControl;
3577391c2a01ce1fed085906743cc240a4d58edd92chrismairimport org.mockftpserver.core.MockFtpServerException;
3677391c2a01ce1fed085906743cc240a4d58edd92chrismairimport org.mockftpserver.core.util.Assert;
3777391c2a01ce1fed085906743cc240a4d58edd92chrismairimport org.mockftpserver.core.util.AssertFailedException;
3877391c2a01ce1fed085906743cc240a4d58edd92chrismair
3977391c2a01ce1fed085906743cc240a4d58edd92chrismair/**
4077391c2a01ce1fed085906743cc240a4d58edd92chrismair * Abstract superclass for all project test classes
4177391c2a01ce1fed085906743cc240a4d58edd92chrismair *
4277391c2a01ce1fed085906743cc240a4d58edd92chrismair * @version $Revision$ - $Date$
4377391c2a01ce1fed085906743cc240a4d58edd92chrismair *
4477391c2a01ce1fed085906743cc240a4d58edd92chrismair * @author Chris Mair
4577391c2a01ce1fed085906743cc240a4d58edd92chrismair */
4677391c2a01ce1fed085906743cc240a4d58edd92chrismairpublic abstract class AbstractTest extends TestCase {
4777391c2a01ce1fed085906743cc240a4d58edd92chrismair
4877391c2a01ce1fed085906743cc240a4d58edd92chrismair    private static final Logger LOG = Logger.getLogger(AbstractTest.class);
4977391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected static final List EMPTY_LIST = Collections.EMPTY_LIST;
5077391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected static final String[] EMPTY = new String[0];
5177391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected static final InetAddress DEFAULT_HOST = inetAddress(null);
5277391c2a01ce1fed085906743cc240a4d58edd92chrismair
5377391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
5477391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Constructor
5577391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
5677391c2a01ce1fed085906743cc240a4d58edd92chrismair    public AbstractTest() {
5777391c2a01ce1fed085906743cc240a4d58edd92chrismair        super();
5877391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
5977391c2a01ce1fed085906743cc240a4d58edd92chrismair
6077391c2a01ce1fed085906743cc240a4d58edd92chrismair    //-------------------------------------------------------------------------
6177391c2a01ce1fed085906743cc240a4d58edd92chrismair    // Manage EasyMock Control objects under the covers, and provide a syntax
6277391c2a01ce1fed085906743cc240a4d58edd92chrismair    // somewhat similar to EasyMock 2.2 for createMock, verify and replay.
6377391c2a01ce1fed085906743cc240a4d58edd92chrismair    //-------------------------------------------------------------------------
6477391c2a01ce1fed085906743cc240a4d58edd92chrismair
6577391c2a01ce1fed085906743cc240a4d58edd92chrismair    private Map mocks = new HashMap();
6677391c2a01ce1fed085906743cc240a4d58edd92chrismair
6777391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
6877391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Create a new mock for the specified interface. Keep track of the associated control object
6977391c2a01ce1fed085906743cc240a4d58edd92chrismair     * under the covers to support the associated  method.
7077391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param interfaceToMock - the Class of the interface to be mocked
7177391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @return the new mock
7277391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
7377391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected Object createMock(Class interfaceToMock) {
7477391c2a01ce1fed085906743cc240a4d58edd92chrismair        MockControl control = MockControl.createControl(interfaceToMock);
7577391c2a01ce1fed085906743cc240a4d58edd92chrismair        Object mock = control.getMock();
7677391c2a01ce1fed085906743cc240a4d58edd92chrismair        mocks.put(mock, control);
7777391c2a01ce1fed085906743cc240a4d58edd92chrismair        return mock;
7877391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
7977391c2a01ce1fed085906743cc240a4d58edd92chrismair
8077391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
8177391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Put the mock object into replay mode
8277391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param mock - the mock to set in replay mode
8377391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @throws AssertFailedException - if mock is null
8477391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @throws AssertFailedException - if mock is not a mock object created using {@link #createMock(Class)}
8577391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
8677391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected void replay(Object mock) {
8777391c2a01ce1fed085906743cc240a4d58edd92chrismair        control(mock).replay();
8877391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
8977391c2a01ce1fed085906743cc240a4d58edd92chrismair
9077391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
9177391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Put all mocks created with createMock() into replay mode.
9277391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
9377391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected void replayAll() {
9477391c2a01ce1fed085906743cc240a4d58edd92chrismair        for (Iterator iter = mocks.keySet().iterator(); iter.hasNext();) {
9577391c2a01ce1fed085906743cc240a4d58edd92chrismair            Object mock = iter.next();
9677391c2a01ce1fed085906743cc240a4d58edd92chrismair            replay(mock);
9777391c2a01ce1fed085906743cc240a4d58edd92chrismair        }
9877391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
9977391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
10077391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Verify the mock object
10177391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param mock - the mock to verify
10277391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @throws AssertFailedException - if mock is null
10377391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @throws AssertFailedException - if mock is not a mock object created using {@link #createMock(Class)}
10477391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
10577391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected void verify(Object mock) {
10677391c2a01ce1fed085906743cc240a4d58edd92chrismair        control(mock).verify();
10777391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
10877391c2a01ce1fed085906743cc240a4d58edd92chrismair
10977391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
11077391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Verify all mocks created with createMock() into replay mode.
11177391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
11277391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected void verifyAll() {
11377391c2a01ce1fed085906743cc240a4d58edd92chrismair        for (Iterator iter = mocks.keySet().iterator(); iter.hasNext();) {
11477391c2a01ce1fed085906743cc240a4d58edd92chrismair            Object mock = iter.next();
11577391c2a01ce1fed085906743cc240a4d58edd92chrismair            verify(mock);
11677391c2a01ce1fed085906743cc240a4d58edd92chrismair        }
11777391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
11877391c2a01ce1fed085906743cc240a4d58edd92chrismair
11977391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
12077391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Return the mock control associated with the mock
12177391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param mock - the mock
12277391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @return the associated MockControl
12377391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @throws AssertFailedException - if mock is null
12477391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @throws AssertFailedException - if mock is not a mock object created using {@link #createMock(Class)}
12577391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
12677391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected MockControl control(Object mock) {
12777391c2a01ce1fed085906743cc240a4d58edd92chrismair        Assert.notNull(mock, "mock");
12877391c2a01ce1fed085906743cc240a4d58edd92chrismair        MockControl control = (MockControl) mocks.get(mock);
12977391c2a01ce1fed085906743cc240a4d58edd92chrismair        Assert.notNull(control, "control");
13077391c2a01ce1fed085906743cc240a4d58edd92chrismair        return control;
13177391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
13277391c2a01ce1fed085906743cc240a4d58edd92chrismair
13377391c2a01ce1fed085906743cc240a4d58edd92chrismair    //-------------------------------------------------------------------------
13477391c2a01ce1fed085906743cc240a4d58edd92chrismair    // Other Helper Methods
13577391c2a01ce1fed085906743cc240a4d58edd92chrismair    //-------------------------------------------------------------------------
13677391c2a01ce1fed085906743cc240a4d58edd92chrismair
13777391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
13877391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Assert that the two objects are not equal
13977391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param object1 - the first object
14077391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param object2 - the second object
14177391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
14277391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected void assertNotEquals(String message, Object object1, Object object2) {
14377391c2a01ce1fed085906743cc240a4d58edd92chrismair        assertFalse(message, object1.equals(object2));
14477391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
14577391c2a01ce1fed085906743cc240a4d58edd92chrismair
14677391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
14777391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Assert that the two byte arrays have the same length and content
14877391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param array1 - the first array
14977391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param array2 - the second array
15077391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
15177391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected void assertEquals(String message, byte[] array1, byte[] array2) {
15277391c2a01ce1fed085906743cc240a4d58edd92chrismair        assertTrue("Arrays not equal: " + message, Arrays.equals(array1, array2));
15377391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
15477391c2a01ce1fed085906743cc240a4d58edd92chrismair
15577391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
15677391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Assert that the two Object arrays have the same length and content
15777391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param array1 - the first array
15877391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param array2 - the second array
15977391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
16077391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected void assertEquals(String message, Object[] array1, Object[] array2) {
16177391c2a01ce1fed085906743cc240a4d58edd92chrismair        assertTrue("Arrays not equal: " + message, Arrays.equals(array1, array2));
16277391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
16377391c2a01ce1fed085906743cc240a4d58edd92chrismair
16477391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
16577391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Create and return a one-element Object[] containing the specified Object
16677391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param o - the object
16777391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @return the Object array, of length 1, containing o
16877391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
16977391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected static Object[] objArray(Object o) {
17077391c2a01ce1fed085906743cc240a4d58edd92chrismair        return new Object[] { o };
17177391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
17277391c2a01ce1fed085906743cc240a4d58edd92chrismair
17377391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
17477391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Create and return a one-element String[] containing the specified String
17577391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param s - the String
17677391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @return the String array, of length 1, containing s
17777391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
17877391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected static String[] array(String s) {
17977391c2a01ce1fed085906743cc240a4d58edd92chrismair        return new String[] { s };
18077391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
18177391c2a01ce1fed085906743cc240a4d58edd92chrismair
18277391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
18377391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Create and return a two-element String[] containing the specified Strings
18477391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param s1 - the first String
18577391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param s2 - the second String
18677391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @return the String array, of length 2, containing s1 and s2
18777391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
18877391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected static String[] array(String s1, String s2) {
18977391c2a01ce1fed085906743cc240a4d58edd92chrismair        return new String[] { s1, s2 };
19077391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
19177391c2a01ce1fed085906743cc240a4d58edd92chrismair
19277391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
19377391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Create a new InetAddress from the specified host String, using the
19477391c2a01ce1fed085906743cc240a4d58edd92chrismair     * {@link InetAddress#getByName(String)} method, wrapping any checked
19577391c2a01ce1fed085906743cc240a4d58edd92chrismair     * exception within a unchecked MockFtpServerException.
19677391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param host
19777391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @return an InetAddress for the specified host
19877391c2a01ce1fed085906743cc240a4d58edd92chrismair     *
19977391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @throws MockFtpServerException - if an UnknownHostException is thrown
20077391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
20177391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected static InetAddress inetAddress(String host) {
20277391c2a01ce1fed085906743cc240a4d58edd92chrismair        try {
20377391c2a01ce1fed085906743cc240a4d58edd92chrismair            return InetAddress.getByName(host);
20477391c2a01ce1fed085906743cc240a4d58edd92chrismair        }
20577391c2a01ce1fed085906743cc240a4d58edd92chrismair        catch (UnknownHostException e) {
20677391c2a01ce1fed085906743cc240a4d58edd92chrismair            throw new MockFtpServerException(e);
20777391c2a01ce1fed085906743cc240a4d58edd92chrismair        }
20877391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
20977391c2a01ce1fed085906743cc240a4d58edd92chrismair
21077391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
21177391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Create and return a List containing the Objects passed as arguments to this method
21277391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param e1- the first element to add
21377391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param e2- the second element to add
21477391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @return the List containing the specified elements
21577391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
21677391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected static List list(Object e1, Object e2) {
21777391c2a01ce1fed085906743cc240a4d58edd92chrismair        List list = new ArrayList();
21877391c2a01ce1fed085906743cc240a4d58edd92chrismair        list.add(e1);
21977391c2a01ce1fed085906743cc240a4d58edd92chrismair        list.add(e2);
22077391c2a01ce1fed085906743cc240a4d58edd92chrismair        return list;
22177391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
22277391c2a01ce1fed085906743cc240a4d58edd92chrismair
22377391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
22477391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Create and return a List containing the single Object passed as an argument to this method
22577391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param element- the element to add
22677391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @return the List containing the specified element
22777391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
22877391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected static List list(Object element) {
22977391c2a01ce1fed085906743cc240a4d58edd92chrismair        return Collections.singletonList(element);
23077391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
23177391c2a01ce1fed085906743cc240a4d58edd92chrismair
23277391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
23377391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Create and return a Set containing the Objects passed as arguments to this method
23477391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param e1 - the first element to add
23577391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param e2 - the second element to add
23677391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @return the Set containing the specified elements
23777391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
23877391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected static Set set(Object e1, Object e2) {
23977391c2a01ce1fed085906743cc240a4d58edd92chrismair        Set set = new HashSet();
24077391c2a01ce1fed085906743cc240a4d58edd92chrismair        set.add(e1);
24177391c2a01ce1fed085906743cc240a4d58edd92chrismair        set.add(e2);
24277391c2a01ce1fed085906743cc240a4d58edd92chrismair        return set;
24377391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
24477391c2a01ce1fed085906743cc240a4d58edd92chrismair
24577391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
24677391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Create and return a Set containing the Objects passed as arguments to this method
24777391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param e1 - the first element to add
24877391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param e2 - the second element to add
24977391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param e3 - the third element to add
25077391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @return the Set containing the specified elements
25177391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
25277391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected static Set set(Object e1, Object e2, Object e3) {
25377391c2a01ce1fed085906743cc240a4d58edd92chrismair        Set set = set(e1, e2);
25477391c2a01ce1fed085906743cc240a4d58edd92chrismair        set.add(e3);
25577391c2a01ce1fed085906743cc240a4d58edd92chrismair        return set;
25677391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
25777391c2a01ce1fed085906743cc240a4d58edd92chrismair
25877391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
25977391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Override the default test run behavior to write out the current test name
26077391c2a01ce1fed085906743cc240a4d58edd92chrismair     * and handle Errors and Exceptions in a standard way.
26177391c2a01ce1fed085906743cc240a4d58edd92chrismair     *
26277391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @see junit.framework.TestCase#runBare()
26377391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
26477391c2a01ce1fed085906743cc240a4d58edd92chrismair    public void runBare() throws Throwable {
26577391c2a01ce1fed085906743cc240a4d58edd92chrismair
26677391c2a01ce1fed085906743cc240a4d58edd92chrismair        LoggingUtil loggingUtil = null;
26777391c2a01ce1fed085906743cc240a4d58edd92chrismair        try {
26877391c2a01ce1fed085906743cc240a4d58edd92chrismair            loggingUtil = LoggingUtil.getTestCaseLogger(this);
26977391c2a01ce1fed085906743cc240a4d58edd92chrismair            loggingUtil.logStartOfTest();
27077391c2a01ce1fed085906743cc240a4d58edd92chrismair            super.runBare();
27177391c2a01ce1fed085906743cc240a4d58edd92chrismair        }
27277391c2a01ce1fed085906743cc240a4d58edd92chrismair        catch (Exception e) {
27377391c2a01ce1fed085906743cc240a4d58edd92chrismair            handleException(e);
27477391c2a01ce1fed085906743cc240a4d58edd92chrismair        }
27577391c2a01ce1fed085906743cc240a4d58edd92chrismair        catch (Error e) {
27677391c2a01ce1fed085906743cc240a4d58edd92chrismair            handleError(e);
27777391c2a01ce1fed085906743cc240a4d58edd92chrismair        }
27877391c2a01ce1fed085906743cc240a4d58edd92chrismair        finally {
27977391c2a01ce1fed085906743cc240a4d58edd92chrismair            if (loggingUtil != null) {
28077391c2a01ce1fed085906743cc240a4d58edd92chrismair                loggingUtil.logEndOfTest();
28177391c2a01ce1fed085906743cc240a4d58edd92chrismair            }
28277391c2a01ce1fed085906743cc240a4d58edd92chrismair        }
28377391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
28477391c2a01ce1fed085906743cc240a4d58edd92chrismair
28577391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
28677391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Setup before each test.
28777391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
28877391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected void setUp() throws Exception {
28977391c2a01ce1fed085906743cc240a4d58edd92chrismair        super.setUp();
29077391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
29177391c2a01ce1fed085906743cc240a4d58edd92chrismair
29277391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
29377391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Cleanup after each test.
29477391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
29577391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected void tearDown() throws Exception {
29677391c2a01ce1fed085906743cc240a4d58edd92chrismair        super.tearDown();
29777391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
29877391c2a01ce1fed085906743cc240a4d58edd92chrismair
29977391c2a01ce1fed085906743cc240a4d58edd92chrismair    //-----------------------------------------------------------
30077391c2a01ce1fed085906743cc240a4d58edd92chrismair    // Private Internal Methods
30177391c2a01ce1fed085906743cc240a4d58edd92chrismair    //-----------------------------------------------------------
30277391c2a01ce1fed085906743cc240a4d58edd92chrismair
30377391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
30477391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Handle an exception
30577391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param e the Exception
30677391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @throws Exception
30777391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
30877391c2a01ce1fed085906743cc240a4d58edd92chrismair    private void handleException(Exception e) throws Exception {
30977391c2a01ce1fed085906743cc240a4d58edd92chrismair
31077391c2a01ce1fed085906743cc240a4d58edd92chrismair        LOG.error("EXCEPTION: ", e);
31177391c2a01ce1fed085906743cc240a4d58edd92chrismair        throw e;
31277391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
31377391c2a01ce1fed085906743cc240a4d58edd92chrismair
31477391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
31577391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Handle an Error
31677391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param e the Error
31777391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @throws Exception
31877391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
31977391c2a01ce1fed085906743cc240a4d58edd92chrismair    private void handleError(Error e) throws Exception {
32077391c2a01ce1fed085906743cc240a4d58edd92chrismair        LOG.error("ERROR: ", e);
32177391c2a01ce1fed085906743cc240a4d58edd92chrismair        throw e;
32277391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
32377391c2a01ce1fed085906743cc240a4d58edd92chrismair
32477391c2a01ce1fed085906743cc240a4d58edd92chrismair    //-------------------------------------------------------------------------
32577391c2a01ce1fed085906743cc240a4d58edd92chrismair    // Helper methods
32677391c2a01ce1fed085906743cc240a4d58edd92chrismair    //-------------------------------------------------------------------------
32777391c2a01ce1fed085906743cc240a4d58edd92chrismair
32877391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
32977391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Delete the named file if it exists
33077391c2a01ce1fed085906743cc240a4d58edd92chrismair     *
33177391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param filename - the full pathname of the file
33277391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
33377391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected void deleteFile(String filename) {
33477391c2a01ce1fed085906743cc240a4d58edd92chrismair        File keyFile = new File(filename);
33577391c2a01ce1fed085906743cc240a4d58edd92chrismair        boolean deleted = keyFile.delete();
33677391c2a01ce1fed085906743cc240a4d58edd92chrismair        LOG.info("Deleted [" + filename + "]: " + deleted);
33777391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
33877391c2a01ce1fed085906743cc240a4d58edd92chrismair
33977391c2a01ce1fed085906743cc240a4d58edd92chrismair
34077391c2a01ce1fed085906743cc240a4d58edd92chrismair
34177391c2a01ce1fed085906743cc240a4d58edd92chrismair    //-------------------------------------------------------------------------
34277391c2a01ce1fed085906743cc240a4d58edd92chrismair    // Common validation helper methods
34377391c2a01ce1fed085906743cc240a4d58edd92chrismair    //-------------------------------------------------------------------------
34477391c2a01ce1fed085906743cc240a4d58edd92chrismair
34577391c2a01ce1fed085906743cc240a4d58edd92chrismair    /**
34677391c2a01ce1fed085906743cc240a4d58edd92chrismair     * Verify that the named file exists
34777391c2a01ce1fed085906743cc240a4d58edd92chrismair     *
34877391c2a01ce1fed085906743cc240a4d58edd92chrismair     * @param filename - the full pathname of the file
34977391c2a01ce1fed085906743cc240a4d58edd92chrismair     */
35077391c2a01ce1fed085906743cc240a4d58edd92chrismair    protected void verifyFileExists(String filename) {
35177391c2a01ce1fed085906743cc240a4d58edd92chrismair        File keyFile = new File(filename);
35277391c2a01ce1fed085906743cc240a4d58edd92chrismair        assertTrue("File does not exist [" + filename + "]", keyFile.exists());
35377391c2a01ce1fed085906743cc240a4d58edd92chrismair    }
35477391c2a01ce1fed085906743cc240a4d58edd92chrismair
35577391c2a01ce1fed085906743cc240a4d58edd92chrismair}
356