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