Cleaning up intent tests setup/teardown to avoid cascading failures
with respect to binding ID generator.
Change-Id: Ia4778f16ff5a3ecb26062e7d7b2c36493081140d
diff --git a/core/api/src/test/java/org/onosproject/net/intent/AbstractIntentTest.java b/core/api/src/test/java/org/onosproject/net/intent/AbstractIntentTest.java
index c4e5f9f..2999da5 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/AbstractIntentTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/AbstractIntentTest.java
@@ -17,20 +17,20 @@
import org.junit.After;
import org.junit.Before;
-import org.onosproject.core.IdGenerator;
+/**
+ * Basis for all intent-related tests. It cleanly binds and unbinds a
+ * deterministic mock generator as part of set-up and tear-down.
+ */
public abstract class AbstractIntentTest {
- protected IdGenerator idGenerator = new MockIdGenerator();
-
@Before
- public void setUp() throws Exception {
- Intent.unbindIdGenerator(idGenerator);
- Intent.bindIdGenerator(idGenerator);
+ public void setUp() {
+ MockIdGenerator.cleanBind();
}
@After
public void tearDown() {
- Intent.unbindIdGenerator(idGenerator);
+ MockIdGenerator.unbind();
}
}
diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentDataTest.java b/core/api/src/test/java/org/onosproject/net/intent/IntentDataTest.java
index de215c6..f7bb7a3 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentDataTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentDataTest.java
@@ -15,14 +15,12 @@
*/
package org.onosproject.net.intent;
-import org.junit.After;
+import com.google.common.testing.EqualsTester;
import org.junit.Before;
import org.junit.Test;
import org.onosproject.core.IdGenerator;
import org.onosproject.store.Timestamp;
-import com.google.common.testing.EqualsTester;
-
import static junit.framework.TestCase.assertFalse;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
@@ -33,7 +31,7 @@
/**
* Unit tests for intent data objects.
*/
-public class IntentDataTest {
+public class IntentDataTest extends AbstractIntentTest {
private Timestamp timestamp1;
private Timestamp timestamp2;
@@ -53,10 +51,8 @@
IdGenerator idGenerator;
@Before
- public void setUpTest() {
- idGenerator = new MockIdGenerator();
- Intent.unbindIdGenerator(idGenerator);
- Intent.bindIdGenerator(idGenerator);
+ public void setUp() {
+ super.setUp();
timestamp1 = new MockTimestamp(1);
timestamp2 = new MockTimestamp(2);
@@ -74,11 +70,6 @@
data3Copy = new IntentData(intent3, IntentState.INSTALLED, timestamp3);
}
- @After
- public void tearDownTest() {
- Intent.unbindIdGenerator(idGenerator);
- }
-
/**
* Checks that intent data objects are properly constructed.
*/
diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
index 1bafca8..2ae87fb 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
@@ -18,7 +18,6 @@
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import org.onosproject.core.IdGenerator;
import java.util.ArrayList;
import java.util.Arrays;
@@ -32,7 +31,7 @@
/**
* Suite of tests for the intent service contract.
*/
-public class IntentServiceTest {
+public class IntentServiceTest extends AbstractIntentTest {
public static final int IID = 123;
public static final int INSTALLABLE_IID = 234;
@@ -41,20 +40,18 @@
protected TestableIntentService service;
protected TestListener listener = new TestListener();
- protected IdGenerator idGenerator = new MockIdGenerator();
@Before
public void setUp() {
+ super.setUp();
service = createIntentService();
service.addListener(listener);
- Intent.unbindIdGenerator(idGenerator);
- Intent.bindIdGenerator(idGenerator);
}
@After
public void tearDown() {
service.removeListener(listener);
- Intent.unbindIdGenerator(idGenerator);
+ super.tearDown();
}
/**
diff --git a/core/api/src/test/java/org/onosproject/net/intent/MockIdGenerator.java b/core/api/src/test/java/org/onosproject/net/intent/MockIdGenerator.java
index 2059cfc..ecf6cb7 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/MockIdGenerator.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/MockIdGenerator.java
@@ -22,18 +22,38 @@
/**
* Mock id generator for testing.
*/
-public class MockIdGenerator implements IdGenerator {
+public final class MockIdGenerator implements IdGenerator {
+
+ public static final MockIdGenerator INSTANCE = new MockIdGenerator();
private static boolean generatorIsBound = false;
- private static MockIdGenerator idGenerator;
- public static void bindNewGenerator() {
+
+ // Ban public construction
+ private MockIdGenerator() {
+ }
+
+ /**
+ * Binds clean mock generator to the intent.
+ */
+ public static synchronized void cleanBind() {
+ INSTANCE.nextId = new AtomicLong(0);
if (!generatorIsBound) {
generatorIsBound = true;
- idGenerator = new MockIdGenerator();
- Intent.unbindIdGenerator(idGenerator);
- Intent.bindIdGenerator(idGenerator);
+ Intent.unbindIdGenerator(INSTANCE);
+ Intent.bindIdGenerator(INSTANCE);
}
}
+
+ /**
+ * Unbinds mock generator from the intent.
+ */
+ public static synchronized void unbind() {
+ if (generatorIsBound) {
+ generatorIsBound = false;
+ Intent.unbindIdGenerator(INSTANCE);
+ }
+ }
+
private AtomicLong nextId = new AtomicLong(0);
@Override