HADOOP-12472. Make GenericTestUtils.assertExceptionContains robust. Contributed by Steve Loughran.
(cherry picked from commit a01a209fbe
)
This commit is contained in:
parent
b50af4e04a
commit
7d25646741
|
@ -316,6 +316,9 @@ Release 2.8.0 - UNRELEASED
|
|||
|
||||
HADOOP-7266. Deprecate metrics v1. (Akira AJISAKA via ozawa)
|
||||
|
||||
HADOOP-12472. Make GenericTestUtils.assertExceptionContains robust.
|
||||
(Steve Loughran via jing9)
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
HADOOP-11785. Reduce the number of listStatus operation in distcp
|
||||
|
|
|
@ -143,11 +143,31 @@ public abstract class GenericTestUtils {
|
|||
Joiner.on(",").join(found));
|
||||
}
|
||||
|
||||
protected static String E_NULL_THROWABLE = "Null Throwable";
|
||||
protected static String E_NULL_THROWABLE_STRING =
|
||||
"Null Throwable.toString() value";
|
||||
protected static String E_UNEXPECTED_EXCEPTION =
|
||||
"but got unexpected exception";
|
||||
|
||||
/**
|
||||
* Assert that an exception's <code>toString()</code> value
|
||||
* contained the expected text.
|
||||
* @param string expected string
|
||||
* @param t thrown exception
|
||||
* @throws AssertionError if the expected string is not found
|
||||
*/
|
||||
public static void assertExceptionContains(String string, Throwable t) {
|
||||
String msg = t.getMessage();
|
||||
Assert.assertTrue(
|
||||
"Expected to find '" + string + "' but got unexpected exception:"
|
||||
+ StringUtils.stringifyException(t), msg.contains(string));
|
||||
Assert.assertNotNull(E_NULL_THROWABLE, t);
|
||||
String msg = t.toString();
|
||||
if (msg == null) {
|
||||
throw new AssertionError(E_NULL_THROWABLE_STRING, t);
|
||||
}
|
||||
if (!msg.contains(string)) {
|
||||
throw new AssertionError("Expected to find '" + string + "' "
|
||||
+ E_UNEXPECTED_EXCEPTION + ":"
|
||||
+ StringUtils.stringifyException(t),
|
||||
t);
|
||||
}
|
||||
}
|
||||
|
||||
public static void waitFor(Supplier<Boolean> check,
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.hadoop.test;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class TestGenericTestUtils extends GenericTestUtils {
|
||||
|
||||
@Test
|
||||
public void testAssertExceptionContainsNullEx() throws Throwable {
|
||||
try {
|
||||
assertExceptionContains("", null);
|
||||
} catch (AssertionError e) {
|
||||
if (!e.toString().contains(E_NULL_THROWABLE)) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAssertExceptionContainsNullString() throws Throwable {
|
||||
try {
|
||||
assertExceptionContains("", new BrokenException());
|
||||
} catch (AssertionError e) {
|
||||
if (!e.toString().contains(E_NULL_THROWABLE_STRING)) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAssertExceptionContainsWrongText() throws Throwable {
|
||||
try {
|
||||
assertExceptionContains("Expected", new Exception("(actual)"));
|
||||
} catch (AssertionError e) {
|
||||
String s = e.toString();
|
||||
if (!s.contains(E_UNEXPECTED_EXCEPTION)
|
||||
|| !s.contains("(actual)") ) {
|
||||
throw e;
|
||||
}
|
||||
if (e.getCause() == null) {
|
||||
throw new AssertionError("No nested cause in assertion", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAssertExceptionContainsWorking() throws Throwable {
|
||||
assertExceptionContains("Expected", new Exception("Expected"));
|
||||
}
|
||||
|
||||
private static class BrokenException extends Exception {
|
||||
public BrokenException() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue