diff --git a/src/test/java/net/onrc/onos/intent/IntentMapTest.java b/src/test/java/net/onrc/onos/intent/IntentMapTest.java
new file mode 100644
index 0000000..7879206
--- /dev/null
+++ b/src/test/java/net/onrc/onos/intent/IntentMapTest.java
@@ -0,0 +1,75 @@
+package net.onrc.onos.intent;
+
+import static org.junit.Assert.*;
+
+import java.util.LinkedList;
+
+import net.onrc.onos.intent.Intent.IntentState;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class IntentMapTest {
+
+	@Before
+	public void setUp() throws Exception {
+	}
+
+	@After
+	public void tearDown() throws Exception {
+	}
+
+	@Test
+	public void test() {
+		IntentMap intents = new IntentMap();
+		LinkedList<IntentOperation> operations = new LinkedList<>();
+
+		// add three intents
+
+		ShortestPathIntent intent1 =
+				new ShortestPathIntent("1", 11L, 12L, 13L, 14L, 15L, 16L);
+		ShortestPathIntent intent2 =
+				new ShortestPathIntent("2", 21L, 22L, 23L, 24L, 25L, 26L);
+		ConstrainedShortestPathIntent intent3 =
+				new ConstrainedShortestPathIntent("3", 31L, 32L, 33L, 34L, 35L, 36L, 1000.0);
+
+		operations.add(new IntentOperation(IntentOperation.Operator.ADD, intent1));
+		operations.add(new IntentOperation(IntentOperation.Operator.ADD, intent2));
+		operations.add(new IntentOperation(IntentOperation.Operator.ADD, intent3));
+		intents.executeOperations(operations);
+
+		// check
+
+		assertEquals(3, intents.getAllIntents().size());
+		assertEquals(intent1, intents.getIntent("1"));
+		assertEquals(intent2, intents.getIntent("2"));
+		assertEquals(intent3, intents.getIntent("3"));
+
+		// request removal of an intent
+
+		Intent intent4 = new Intent("1");
+		operations.clear();
+		operations.add(new IntentOperation(IntentOperation.Operator.REMOVE, intent4));
+		intents.executeOperations(operations);
+
+		// check
+
+		assertEquals(3, intents.getAllIntents().size());
+		assertEquals(IntentState.DEL_REQ, intent1.getState());
+
+		// change intents' state which will be purged 
+
+		intent2.setState(IntentState.INST_NACK);
+		intent3.setState(IntentState.DEL_ACK);
+
+		// purge
+
+		intents.purge();
+
+		// check
+
+		assertEquals(1, intents.getAllIntents().size());
+		assertEquals("1", intents.getAllIntents().iterator().next().getId());
+	}
+}
