Author: todd
Date: Mon Apr 8 19:57:16 2013
New Revision: 1465751
URL: http://svn.apache.org/r1465751
Log:
HDFS-3981. Fix handling of FSN lock in getBlockLocations. Contributed by Xiaobo
Peng and Todd Lipcon.
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/MockitoUtil.java
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/MockitoUtil.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/MockitoUtil.java?rev=1465751&r1=1465750&r2=1465751&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/MockitoUtil.java
(original)
+++
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/MockitoUtil.java
Mon Apr 8 19:57:16 2013
@@ -20,6 +20,9 @@ package org.apache.hadoop.test;
import java.io.Closeable;
import org.mockito.Mockito;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.mockito.stubbing.Stubber;
public abstract class MockitoUtil {
@@ -33,4 +36,29 @@ public abstract class MockitoUtil {
return Mockito.mock(clazz,
Mockito.withSettings().extraInterfaces(Closeable.class));
}
+
+ /**
+ * Throw an exception from the mock/spy only in the case that the
+ * call stack at the time the method has a line which matches the given
+ * pattern.
+ *
+ * @param t the Throwable to throw
+ * @param pattern the pattern against which to match the call stack trace
+ * @return the stub in progress
+ */
+ public static Stubber doThrowWhenCallStackMatches(
+ final Throwable t, final String pattern) {
+ return Mockito.doAnswer(new Answer<Object>() {
+ @Override
+ public Object answer(InvocationOnMock invocation) throws Throwable {
+ t.setStackTrace(Thread.currentThread().getStackTrace());
+ for (StackTraceElement elem : t.getStackTrace()) {
+ if (elem.toString().matches(pattern)) {
+ throw t;
+ }
+ }
+ return invocation.callRealMethod();
+ }
+ });
+ }
}