1e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair/*
2e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * Copyright 2007 the original author or authors.
3e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
4e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * Licensed under the Apache License, Version 2.0 (the "License");
5e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * you may not use this file except in compliance with the License.
6e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * You may obtain a copy of the License at
7e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
8e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *      http://www.apache.org/licenses/LICENSE-2.0
9e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
10e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * Unless required by applicable law or agreed to in writing, software
11e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * distributed under the License is distributed on an "AS IS" BASIS,
12e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * See the License for the specific language governing permissions and
14e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * limitations under the License.
15e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair */
16e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairpackage org.mockftpserver.test;
17e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
18e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.io.File;
19e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.net.InetAddress;
20e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.net.UnknownHostException;
21e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.ArrayList;
22e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.Arrays;
23e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.Collections;
24e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.HashMap;
25e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.HashSet;
26e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.Iterator;
27e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.List;
28e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.Map;
29e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport java.util.Set;
30e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
31e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport junit.framework.TestCase;
32e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
33e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.apache.log4j.Logger;
34e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.easymock.MockControl;
35e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.mockftpserver.core.MockFtpServerException;
36e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.mockftpserver.core.util.Assert;
37e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairimport org.mockftpserver.core.util.AssertFailedException;
38e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
39e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair/**
40e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * Abstract superclass for all project test classes
41e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
42e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * @version $Revision$ - $Date$
43e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair *
44e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair * @author Chris Mair
45e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair */
46e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismairpublic abstract class AbstractTest extends TestCase {
47e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
48e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private static final Logger LOG = Logger.getLogger(AbstractTest.class);
49e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected static final List EMPTY_LIST = Collections.EMPTY_LIST;
50e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected static final String[] EMPTY = new String[0];
51e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected static final InetAddress DEFAULT_HOST = inetAddress(null);
52e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
53e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
54e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Constructor
55e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
56e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    public AbstractTest() {
57e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        super();
58e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
59e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
60e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    //-------------------------------------------------------------------------
61e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    // Manage EasyMock Control objects under the covers, and provide a syntax
62e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    // somewhat similar to EasyMock 2.2 for createMock, verify and replay.
63e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    //-------------------------------------------------------------------------
64e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
65e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private Map mocks = new HashMap();
66e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
67e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
68e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Create a new mock for the specified interface. Keep track of the associated control object
69e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * under the covers to support the associated  method.
70e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param interfaceToMock - the Class of the interface to be mocked
71e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @return the new mock
72e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
73e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected Object createMock(Class interfaceToMock) {
74e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        MockControl control = MockControl.createControl(interfaceToMock);
75e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        Object mock = control.getMock();
76e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        mocks.put(mock, control);
77e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        return mock;
78e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
79e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
80e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
81e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Put the mock object into replay mode
82e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param mock - the mock to set in replay mode
83e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @throws AssertFailedException - if mock is null
84e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @throws AssertFailedException - if mock is not a mock object created using {@link #createMock(Class)}
85e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
86e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected void replay(Object mock) {
87e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        control(mock).replay();
88e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
89e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
90e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
91e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Put all mocks created with createMock() into replay mode.
92e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
93e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected void replayAll() {
94e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        for (Iterator iter = mocks.keySet().iterator(); iter.hasNext();) {
95e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            Object mock = iter.next();
96e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            replay(mock);
97e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
98e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
99e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
100e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Verify the mock object
101e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param mock - the mock to verify
102e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @throws AssertFailedException - if mock is null
103e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @throws AssertFailedException - if mock is not a mock object created using {@link #createMock(Class)}
104e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
105e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected void verify(Object mock) {
106e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        control(mock).verify();
107e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
108e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
109e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
110e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Verify all mocks created with createMock() into replay mode.
111e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
112e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected void verifyAll() {
113e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        for (Iterator iter = mocks.keySet().iterator(); iter.hasNext();) {
114e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            Object mock = iter.next();
115e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            verify(mock);
116e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
117e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
118e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
119e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
120e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Return the mock control associated with the mock
121e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param mock - the mock
122e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @return the associated MockControl
123e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @throws AssertFailedException - if mock is null
124e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @throws AssertFailedException - if mock is not a mock object created using {@link #createMock(Class)}
125e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
126e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected MockControl control(Object mock) {
127e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        Assert.notNull(mock, "mock");
128e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        MockControl control = (MockControl) mocks.get(mock);
129e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        Assert.notNull(control, "control");
130e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        return control;
131e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
132e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
133e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    //-------------------------------------------------------------------------
134e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    // Other Helper Methods
135e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    //-------------------------------------------------------------------------
136e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
137e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
138e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Assert that the two objects are not equal
139e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param object1 - the first object
140e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param object2 - the second object
141e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
142e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected void assertNotEquals(String message, Object object1, Object object2) {
143e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        assertFalse(message, object1.equals(object2));
144e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
145e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
146e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
147e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Assert that the two byte arrays have the same length and content
148e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param array1 - the first array
149e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param array2 - the second array
150e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
151e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected void assertEquals(String message, byte[] array1, byte[] array2) {
152e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        assertTrue("Arrays not equal: " + message, Arrays.equals(array1, array2));
153e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
154e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
155e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
156e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Assert that the two Object arrays have the same length and content
157e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param array1 - the first array
158e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param array2 - the second array
159e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
160e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected void assertEquals(String message, Object[] array1, Object[] array2) {
161e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        assertTrue("Arrays not equal: " + message, Arrays.equals(array1, array2));
162e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
163e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
164e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
165e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Create and return a one-element Object[] containing the specified Object
166e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param o - the object
167e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @return the Object array, of length 1, containing o
168e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
169e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected static Object[] objArray(Object o) {
170e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        return new Object[] { o };
171e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
172e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
173e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
174e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Create and return a one-element String[] containing the specified String
175e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param s - the String
176e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @return the String array, of length 1, containing s
177e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
178e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected static String[] array(String s) {
179e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        return new String[] { s };
180e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
181e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
182e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
183e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Create and return a two-element String[] containing the specified Strings
184e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param s1 - the first String
185e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param s2 - the second String
186e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @return the String array, of length 2, containing s1 and s2
187e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
188e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected static String[] array(String s1, String s2) {
189e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        return new String[] { s1, s2 };
190e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
191e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
192e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
193e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Create a new InetAddress from the specified host String, using the
194e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * {@link InetAddress#getByName(String)} method, wrapping any checked
195e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * exception within a unchecked MockFtpServerException.
196e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param host
197e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @return an InetAddress for the specified host
198e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     *
199e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @throws MockFtpServerException - if an UnknownHostException is thrown
200e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
201e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected static InetAddress inetAddress(String host) {
202e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        try {
203e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            return InetAddress.getByName(host);
204e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
205e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        catch (UnknownHostException e) {
206e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            throw new MockFtpServerException(e);
207e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
208e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
209e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
210e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
211e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Create and return a List containing the Objects passed as arguments to this method
212e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param e1- the first element to add
213e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param e2- the second element to add
214e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @return the List containing the specified elements
215e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
216e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected static List list(Object e1, Object e2) {
217e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        List list = new ArrayList();
218e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        list.add(e1);
219e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        list.add(e2);
220e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        return list;
221e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
222e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
223e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
224e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Create and return a List containing the single Object passed as an argument to this method
225e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param element- the element to add
226e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @return the List containing the specified element
227e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
228e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected static List list(Object element) {
229e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        return Collections.singletonList(element);
230e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
231e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
232e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
233e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Create and return a Set containing the Objects passed as arguments to this method
234e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param e1 - the first element to add
235e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param e2 - the second element to add
236e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @return the Set containing the specified elements
237e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
238e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected static Set set(Object e1, Object e2) {
239e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        Set set = new HashSet();
240e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        set.add(e1);
241e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        set.add(e2);
242e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        return set;
243e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
244e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
245e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
246e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Create and return a Set containing the Objects passed as arguments to this method
247e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param e1 - the first element to add
248e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param e2 - the second element to add
249e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param e3 - the third element to add
250e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @return the Set containing the specified elements
251e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
252e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected static Set set(Object e1, Object e2, Object e3) {
253e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        Set set = set(e1, e2);
254e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        set.add(e3);
255e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        return set;
256e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
257e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
258e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
259e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Override the default test run behavior to write out the current test name
260e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * and handle Errors and Exceptions in a standard way.
261e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     *
262e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @see junit.framework.TestCase#runBare()
263e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
264e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    public void runBare() throws Throwable {
265e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
266e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        LoggingUtil loggingUtil = null;
267e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        try {
268e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            loggingUtil = LoggingUtil.getTestCaseLogger(this);
269e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            loggingUtil.logStartOfTest();
270e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            super.runBare();
271e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
272e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        catch (Exception e) {
273e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            handleException(e);
274e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
275e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        catch (Error e) {
276e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            handleError(e);
277e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
278e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        finally {
279e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            if (loggingUtil != null) {
280e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair                loggingUtil.logEndOfTest();
281e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair            }
282e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        }
283e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
284e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
285e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
286e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Setup before each test.
287e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
288e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected void setUp() throws Exception {
289e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        super.setUp();
290e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
291e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
292e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
293e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Cleanup after each test.
294e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
295e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected void tearDown() throws Exception {
296e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        super.tearDown();
297e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
298e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
299e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    //-----------------------------------------------------------
300e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    // Private Internal Methods
301e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    //-----------------------------------------------------------
302e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
303e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
304e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Handle an exception
305e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param e the Exception
306e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @throws Exception
307e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
308e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private void handleException(Exception e) throws Exception {
309e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
310e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        LOG.error("EXCEPTION: ", e);
311e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        throw e;
312e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
313e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
314e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
315e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Handle an Error
316e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param e the Error
317e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @throws Exception
318e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
319e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    private void handleError(Error e) throws Exception {
320e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        LOG.error("ERROR: ", e);
321e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        throw e;
322e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
323e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
324e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    //-------------------------------------------------------------------------
325e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    // Helper methods
326e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    //-------------------------------------------------------------------------
327e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
328e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
329e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Delete the named file if it exists
330e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     *
331e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param filename - the full pathname of the file
332e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
333e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected void deleteFile(String filename) {
334e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        File keyFile = new File(filename);
335e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        boolean deleted = keyFile.delete();
336e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        LOG.info("Deleted [" + filename + "]: " + deleted);
337e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
338e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
339e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
340e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
341e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    //-------------------------------------------------------------------------
342e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    // Common validation helper methods
343e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    //-------------------------------------------------------------------------
344e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
345e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    /**
346e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * Verify that the named file exists
347e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     *
348e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     * @param filename - the full pathname of the file
349e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair     */
350e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    protected void verifyFileExists(String filename) {
351e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        File keyFile = new File(filename);
352e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair        assertTrue("File does not exist [" + filename + "]", keyFile.exists());
353e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair    }
354e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair
355e47352fb2508e2b25f003b8df12fa79c3215b4b1chrismair}
356