HADOOP-14568. GenericTestUtils#waitFor missing parameter verification.

Contributed by Yiqun Lin
This commit is contained in:
Steve Loughran 2017-06-23 14:39:58 +01:00
parent ca13b224b2
commit e5db9af8a0
No known key found for this signature in database
GPG Key ID: 950CC3E032B79CA2
2 changed files with 47 additions and 4 deletions

View File

@ -59,6 +59,7 @@ import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer; import org.mockito.stubbing.Answer;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.collect.Sets; 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/"; 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") @SuppressWarnings("unchecked")
public static void disableLog(Log log) { public static void disableLog(Log log) {
// We expect that commons-logging is a wrapper around Log4j. // 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, public static void waitFor(Supplier<Boolean> check, int checkEveryMillis,
int checkEveryMillis, int waitForMillis) int waitForMillis) throws TimeoutException, InterruptedException {
throws TimeoutException, InterruptedException Preconditions.checkNotNull(check, ERROR_MISSING_ARGUMENT);
{ Preconditions.checkArgument(waitForMillis > checkEveryMillis,
ERROR_INVALID_ARGUMENT);
long st = Time.now(); long st = Time.now();
do { do {
boolean result = check.get(); boolean result = check.get();

View File

@ -26,7 +26,10 @@ import org.junit.Test;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import com.google.common.base.Supplier;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
public class TestGenericTestUtils extends GenericTestUtils { public class TestGenericTestUtils extends GenericTestUtils {
@ -119,4 +122,33 @@ public class TestGenericTestUtils extends GenericTestUtils {
assertTrue(logCapturer.getOutput().isEmpty()); 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);
}
}
} }