HADOOP-14568. GenericTestUtils#waitFor missing parameter verification.
Contributed by Yiqun Lin
This commit is contained in:
parent
ca13b224b2
commit
e5db9af8a0
|
@ -59,6 +59,7 @@ import org.mockito.invocation.InvocationOnMock;
|
|||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
|
@ -85,6 +86,14 @@ public abstract class GenericTestUtils {
|
|||
*/
|
||||
public static final String DEFAULT_TEST_DATA_PATH = "target/test/data/";
|
||||
|
||||
/**
|
||||
* Error string used in {@link GenericTestUtils#waitFor(Supplier, int, int)}.
|
||||
*/
|
||||
public static final String ERROR_MISSING_ARGUMENT =
|
||||
"Input supplier interface should be initailized";
|
||||
public static final String ERROR_INVALID_ARGUMENT =
|
||||
"Total wait time should be greater than check interval time";
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static void disableLog(Log log) {
|
||||
// We expect that commons-logging is a wrapper around Log4j.
|
||||
|
@ -258,10 +267,12 @@ public abstract class GenericTestUtils {
|
|||
}
|
||||
}
|
||||
|
||||
public static void waitFor(Supplier<Boolean> check,
|
||||
int checkEveryMillis, int waitForMillis)
|
||||
throws TimeoutException, InterruptedException
|
||||
{
|
||||
public static void waitFor(Supplier<Boolean> check, int checkEveryMillis,
|
||||
int waitForMillis) throws TimeoutException, InterruptedException {
|
||||
Preconditions.checkNotNull(check, ERROR_MISSING_ARGUMENT);
|
||||
Preconditions.checkArgument(waitForMillis > checkEveryMillis,
|
||||
ERROR_INVALID_ARGUMENT);
|
||||
|
||||
long st = Time.now();
|
||||
do {
|
||||
boolean result = check.get();
|
||||
|
|
|
@ -26,7 +26,10 @@ import org.junit.Test;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
public class TestGenericTestUtils extends GenericTestUtils {
|
||||
|
||||
|
@ -119,4 +122,33 @@ public class TestGenericTestUtils extends GenericTestUtils {
|
|||
assertTrue(logCapturer.getOutput().isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWaitingForConditionWithInvalidParams() throws Throwable {
|
||||
// test waitFor method with null supplier interface
|
||||
try {
|
||||
waitFor(null, 0, 0);
|
||||
} catch (NullPointerException e) {
|
||||
assertExceptionContains(GenericTestUtils.ERROR_MISSING_ARGUMENT, e);
|
||||
}
|
||||
|
||||
Supplier<Boolean> simpleSupplier = new Supplier<Boolean>() {
|
||||
|
||||
@Override
|
||||
public Boolean get() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
// test waitFor method with waitForMillis greater than checkEveryMillis
|
||||
waitFor(simpleSupplier, 5, 10);
|
||||
try {
|
||||
// test waitFor method with waitForMillis smaller than checkEveryMillis
|
||||
waitFor(simpleSupplier, 10, 5);
|
||||
fail(
|
||||
"Excepted a failure when the param value of"
|
||||
+ " waitForMillis is smaller than checkEveryMillis.");
|
||||
} catch (IllegalArgumentException e) {
|
||||
assertExceptionContains(GenericTestUtils.ERROR_INVALID_ARGUMENT, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue