diff --git a/src/test/java/net/onrc/onos/intent/MockNetworkGraph.java b/src/test/java/net/onrc/onos/intent/MockNetworkGraph.java
index 5ae7b13..9d85e6f 100644
--- a/src/test/java/net/onrc/onos/intent/MockNetworkGraph.java
+++ b/src/test/java/net/onrc/onos/intent/MockNetworkGraph.java
@@ -9,9 +9,15 @@
 import net.onrc.onos.ofcontroller.networkgraph.SwitchImpl;
 
 /**
+ * A mock class of NetworkGraph.
+ * This class should be used only by test codes.
+ *
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class MockNetworkGraph extends NetworkGraphImpl {
+	public static Long LOCAL_PORT = 0xFFFEL;
+	public SwitchImpl sw1, sw2, sw3, sw4;
+
 	class DetachableLinkImpl extends LinkImpl {
 		public DetachableLinkImpl(NetworkGraph graph, Port srcPort, Port dstPort) {
 			super(graph, srcPort, dstPort);
@@ -25,7 +31,6 @@
 		SwitchImpl sw = new SwitchImpl(this, switchId);
 		this.putSwitch(sw);
 		return sw;
-
 	}
 
 	public Link addLink(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
@@ -43,34 +48,41 @@
 		return links;
 	}
 
-	public void createSampleTopology() {
-		// add 10 switches (24 ports switch)
-		for (Long dpid=1L; dpid<10L; dpid++) {
-			SwitchImpl sw = (SwitchImpl) addSwitch(dpid);
-			for (Long j=1L; j<=24L; j++) {
-				sw.addPort(j);
-			}
-		}
+	/**
+	 * create sample topology of 4 switches and 5 bidirectional links.
+	 * <pre>
+	 * [1] --- [2]
+	 *  |    /  |
+	 *  |  /    |
+	 * [4] --- [3]
+	 * </pre>
+	 */
+	public void createSampleTopology1() {
+		sw1 = (SwitchImpl) addSwitch(1L);
+		sw1.addPort(LOCAL_PORT);
+		sw2 = (SwitchImpl) addSwitch(2L);
+		sw2.addPort(LOCAL_PORT);
+		sw3 = (SwitchImpl) addSwitch(3L);
+		sw3.addPort(LOCAL_PORT);
+		sw4 = (SwitchImpl) addSwitch(4L);
+		sw4.addPort(LOCAL_PORT);
 
-		// add loop path
-		addBidirectionalLinks(1L, 1L, 2L, 2L);
-		addBidirectionalLinks(2L, 1L, 3L, 2L);
-		addBidirectionalLinks(3L, 1L, 4L, 2L);
-		addBidirectionalLinks(4L, 1L, 5L, 2L);
-		addBidirectionalLinks(5L, 1L, 6L, 2L);
-		addBidirectionalLinks(6L, 1L, 7L, 2L);
-		addBidirectionalLinks(7L, 1L, 8L, 2L);
-		addBidirectionalLinks(8L, 1L, 9L, 2L);
-		addBidirectionalLinks(9L, 1L, 1L, 2L);
+		sw1.addPort(12L); // sw1 -> sw2
+		sw1.addPort(14L); // sw1 -> sw4
+		sw2.addPort(21L); // sw2 -> sw1
+		sw2.addPort(23L); // sw2 -> sw3
+		sw2.addPort(24L); // sw2 -> sw4
+		sw3.addPort(32L); // sw3 -> sw2
+		sw3.addPort(34L); // sw3 -> sw4
+		sw4.addPort(41L); // sw4 -> sw1
+		sw4.addPort(42L); // sw4 -> sw2
+		sw4.addPort(43L); // sw4 -> sw3
 
-		// add other links
-		addBidirectionalLinks(1L, 3L, 5L, 3L);
-		addBidirectionalLinks(2L, 4L, 5L, 4L);
-		addBidirectionalLinks(2L, 5L, 7L, 5L);
-		addBidirectionalLinks(3L, 6L, 7L, 6L);
-		addBidirectionalLinks(3L, 7L, 8L, 7L);
-		addBidirectionalLinks(3L, 8L, 9L, 8L);
-		addBidirectionalLinks(4L, 9l, 9L, 9L);
+		addBidirectionalLinks(1L, 12L, 2L, 21L);
+		addBidirectionalLinks(2L, 23L, 3L, 32L);
+		addBidirectionalLinks(3L, 34L, 4L, 43L);
+		addBidirectionalLinks(4L, 41L, 1L, 14L);
+		addBidirectionalLinks(2L, 24L, 4L, 42L);
 
 		// set capacity of all links to 1000Mbps
 		for (Link link: getLinks()) {
