Refactor event dispatch injector to use TestUtils field setter
Change-Id: I793183de883c7b20784957eaa213d79a42951639
diff --git a/core/api/src/test/java/org/onosproject/net/NetTestTools.java b/core/api/src/test/java/org/onosproject/net/NetTestTools.java
index 18c5679..c989ee0 100644
--- a/core/api/src/test/java/org/onosproject/net/NetTestTools.java
+++ b/core/api/src/test/java/org/onosproject/net/NetTestTools.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.net;
+import org.onlab.junit.TestUtils;
import org.onlab.packet.ChassisId;
import org.onlab.packet.IpAddress;
import org.onosproject.TestApplicationId;
@@ -126,11 +127,11 @@
for (Field f : mc.getSuperclass().getDeclaredFields()) {
if (f.getType().equals(EventDeliveryService.class)) {
try {
- f.setAccessible(true);
- f.set(manager, svc);
- } catch (IllegalAccessException e) {
+ TestUtils.setField(manager, f.getName(), svc);
+ } catch (TestUtils.TestUtilsException e) {
throw new IllegalArgumentException("Unable to inject reference", e);
}
+ break;
}
}
}
diff --git a/utils/junit/src/main/java/org/onlab/junit/TestUtils.java b/utils/junit/src/main/java/org/onlab/junit/TestUtils.java
index 496b357..1afc494 100644
--- a/utils/junit/src/main/java/org/onlab/junit/TestUtils.java
+++ b/utils/junit/src/main/java/org/onlab/junit/TestUtils.java
@@ -40,13 +40,23 @@
public static <T, U> void setField(T subject, String fieldName, U value)
throws TestUtilsException {
@SuppressWarnings("unchecked")
- Class<T> clazz = (Class<T>) subject.getClass();
+ Class clazz = subject.getClass();
try {
- Field field = clazz.getDeclaredField(fieldName);
- field.setAccessible(true);
- field.set(subject, value);
- } catch (NoSuchFieldException | SecurityException |
- IllegalArgumentException | IllegalAccessException e) {
+ while (clazz != null) {
+ try {
+ Field field = clazz.getDeclaredField(fieldName);
+ field.setAccessible(true);
+ field.set(subject, value);
+ break;
+ } catch (NoSuchFieldException ex) {
+ if (clazz == clazz.getSuperclass()) {
+ break;
+ }
+ clazz = clazz.getSuperclass();
+ }
+ }
+ } catch (SecurityException | IllegalArgumentException |
+ IllegalAccessException e) {
throw new TestUtilsException("setField failed", e);
}
}