blob: b9d2b0773b46612a1d1af5c0cd8973675e3c76ea [file] [log] [blame]
Jonathan Hartaa380972014-04-03 10:24:46 -07001package net.onrc.onos.core.intent;
Toshio Koidefe1d5d92014-02-26 20:09:48 -08002
Jonathan Harta88fd242014-04-03 11:24:54 -07003import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertNotNull;
5import static org.junit.Assert.assertNull;
Jonathan Hartaa380972014-04-03 10:24:46 -07006import net.onrc.onos.core.intent.IntentOperation.Operator;
Jonathan Hart472062d2014-04-03 10:56:48 -07007import net.onrc.onos.core.topology.LinkEvent;
TeruU5d2c9392014-06-09 20:02:02 -07008import net.onrc.onos.core.topology.MockTopology;
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -07009import net.onrc.onos.core.util.Dpid;
10import net.onrc.onos.core.util.PortNumber;
Toshio Koidefe1d5d92014-02-26 20:09:48 -080011
12import org.junit.After;
13import org.junit.Before;
14import org.junit.Test;
15
16/**
Yuta HIGUCHId4acc802014-06-19 22:30:31 -070017 * Unit tests for ConstrainedBFSTree class.
Toshio Koidefe1d5d92014-02-26 20:09:48 -080018 */
19public class ConstrainedBFSTreeTest {
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070020 private static final Dpid DPID_1 = new Dpid(1L);
21 private static final Dpid DPID_2 = new Dpid(2L);
22 private static final Dpid DPID_3 = new Dpid(3L);
23 private static final Dpid DPID_4 = new Dpid(4L);
24
25 private static final PortNumber PORT_NUMBER_12 = new PortNumber((short) 12);
26 private static final PortNumber PORT_NUMBER_14 = new PortNumber((short) 14);
27 private static final PortNumber PORT_NUMBER_21 = new PortNumber((short) 21);
28 private static final PortNumber PORT_NUMBER_23 = new PortNumber((short) 23);
29 private static final PortNumber PORT_NUMBER_41 = new PortNumber((short) 41);
30 private static final PortNumber PORT_NUMBER_42 = new PortNumber((short) 42);
31 private static final PortNumber PORT_NUMBER_43 = new PortNumber((short) 43);
32
Yuta HIGUCHI44a0b352014-05-14 21:32:48 -070033 static final long LOCAL_PORT = 0xFFFEL;
Toshio Koidefe1d5d92014-02-26 20:09:48 -080034
Ray Milkey269ffb92014-04-03 14:43:30 -070035 @Before
36 public void setUp() throws Exception {
37 }
Toshio Koidefe1d5d92014-02-26 20:09:48 -080038
Ray Milkey269ffb92014-04-03 14:43:30 -070039 @After
40 public void tearDown() throws Exception {
41 }
Toshio Koidefe1d5d92014-02-26 20:09:48 -080042
Ray Milkey269ffb92014-04-03 14:43:30 -070043 @Test
44 public void testCreate() {
Jonathan Harte37e4e22014-05-13 19:12:02 -070045 MockTopology topology = new MockTopology();
46 topology.createSampleTopology1();
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070047 ConstrainedBFSTree tree = new ConstrainedBFSTree(topology.getSwitch(DPID_1));
Ray Milkey269ffb92014-04-03 14:43:30 -070048 assertNotNull(tree);
49 }
Toshio Koidefe1d5d92014-02-26 20:09:48 -080050
Ray Milkey269ffb92014-04-03 14:43:30 -070051 @Test
52 public void testCreateConstrained() {
Jonathan Harte37e4e22014-05-13 19:12:02 -070053 MockTopology topology = new MockTopology();
54 topology.createSampleTopology1();
Ray Milkey269ffb92014-04-03 14:43:30 -070055 PathIntentMap intents = new PathIntentMap();
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070056 ConstrainedBFSTree tree = new ConstrainedBFSTree(topology.getSwitch(DPID_1), intents, 1000.0);
Ray Milkey269ffb92014-04-03 14:43:30 -070057 assertNotNull(tree);
58 }
Toshio Koidefe1d5d92014-02-26 20:09:48 -080059
Ray Milkey269ffb92014-04-03 14:43:30 -070060 @Test
61 public void testGetPath() {
Jonathan Harte37e4e22014-05-13 19:12:02 -070062 MockTopology topology = new MockTopology();
63 topology.createSampleTopology1();
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070064 ConstrainedBFSTree tree = new ConstrainedBFSTree(topology.getSwitch(DPID_1));
65 Path path11 = tree.getPath(topology.getSwitch(DPID_1));
66 Path path12 = tree.getPath(topology.getSwitch(DPID_2));
67 Path path13 = tree.getPath(topology.getSwitch(DPID_3));
68 Path path14 = tree.getPath(topology.getSwitch(DPID_4));
Toshio Koidefe1d5d92014-02-26 20:09:48 -080069
Ray Milkey269ffb92014-04-03 14:43:30 -070070 assertNotNull(path11);
71 assertEquals(0, path11.size());
Toshio Koidefe1d5d92014-02-26 20:09:48 -080072
Ray Milkey269ffb92014-04-03 14:43:30 -070073 assertNotNull(path12);
74 assertEquals(1, path12.size());
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070075 assertEquals(new LinkEvent(topology.getOutgoingLink(DPID_1, PORT_NUMBER_12)), path12.get(0));
Toshio Koidefe1d5d92014-02-26 20:09:48 -080076
Ray Milkey269ffb92014-04-03 14:43:30 -070077 assertNotNull(path13);
78 assertEquals(2, path13.size());
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070079 if (path13.get(0).getDst().getDpid().value() == 2L) {
80 assertEquals(new LinkEvent(topology.getOutgoingLink(DPID_1, PORT_NUMBER_12)), path13.get(0));
81 assertEquals(new LinkEvent(topology.getOutgoingLink(DPID_2, PORT_NUMBER_23)), path13.get(1));
Ray Milkey269ffb92014-04-03 14:43:30 -070082 } else {
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070083 assertEquals(new LinkEvent(topology.getOutgoingLink(DPID_1, PORT_NUMBER_14)), path13.get(0));
84 assertEquals(new LinkEvent(topology.getOutgoingLink(DPID_4, PORT_NUMBER_43)), path13.get(1));
Ray Milkey269ffb92014-04-03 14:43:30 -070085 }
Toshio Koidefe1d5d92014-02-26 20:09:48 -080086
Ray Milkey269ffb92014-04-03 14:43:30 -070087 assertNotNull(path14);
88 assertEquals(1, path14.size());
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070089 assertEquals(new LinkEvent(topology.getOutgoingLink(DPID_1, PORT_NUMBER_14)), path14.get(0));
Ray Milkey269ffb92014-04-03 14:43:30 -070090 }
Toshio Koidefe1d5d92014-02-26 20:09:48 -080091
Ray Milkey269ffb92014-04-03 14:43:30 -070092 @Test
93 public void testGetPathNull() {
Jonathan Harte37e4e22014-05-13 19:12:02 -070094 MockTopology topology = new MockTopology();
95 topology.createSampleTopology1();
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070096 topology.removeLink(DPID_1, PORT_NUMBER_12, DPID_2, PORT_NUMBER_21);
97 topology.removeLink(DPID_1, PORT_NUMBER_14, DPID_4, PORT_NUMBER_41);
Ray Milkey269ffb92014-04-03 14:43:30 -070098 // now, there is no path from switch 1, but to switch1
Toshio Koidefe1d5d92014-02-26 20:09:48 -080099
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700100 ConstrainedBFSTree tree1 = new ConstrainedBFSTree(topology.getSwitch(DPID_1));
101 Path path12 = tree1.getPath(topology.getSwitch(DPID_2));
102 Path path13 = tree1.getPath(topology.getSwitch(DPID_3));
103 Path path14 = tree1.getPath(topology.getSwitch(DPID_4));
Toshio Koidefe1d5d92014-02-26 20:09:48 -0800104
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700105 ConstrainedBFSTree tree2 = new ConstrainedBFSTree(topology.getSwitch(DPID_2));
106 Path path21 = tree2.getPath(topology.getSwitch(DPID_1));
Toshio Koidefe1d5d92014-02-26 20:09:48 -0800107
Ray Milkey269ffb92014-04-03 14:43:30 -0700108 assertNull(path12);
109 assertNull(path13);
110 assertNull(path14);
111 assertNotNull(path21);
112 assertEquals(1, path21.size());
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700113 assertEquals(new LinkEvent(topology.getOutgoingLink(DPID_2, PORT_NUMBER_21)), path21.get(0));
Ray Milkey269ffb92014-04-03 14:43:30 -0700114 }
Toshio Koidefe1d5d92014-02-26 20:09:48 -0800115
Ray Milkey269ffb92014-04-03 14:43:30 -0700116 @Test
117 public void testGetConstrainedPath() {
Jonathan Harte37e4e22014-05-13 19:12:02 -0700118 MockTopology topology = new MockTopology();
119 topology.createSampleTopology1();
Ray Milkey269ffb92014-04-03 14:43:30 -0700120 PathIntentMap intents = new PathIntentMap();
121 IntentOperationList intentOps = new IntentOperationList();
Toshio Koidefe1d5d92014-02-26 20:09:48 -0800122
Ray Milkey269ffb92014-04-03 14:43:30 -0700123 // create constrained shortest path intents that have the same source destination ports
124 ConstrainedShortestPathIntent intent1 = new ConstrainedShortestPathIntent(
125 "1", 1L, LOCAL_PORT, 0x111L, 2L, LOCAL_PORT, 0x222L, 600.0);
126 ConstrainedShortestPathIntent intent2 = new ConstrainedShortestPathIntent(
127 "2", 1L, LOCAL_PORT, 0x333L, 2L, LOCAL_PORT, 0x444L, 600.0);
Toshio Koidefe1d5d92014-02-26 20:09:48 -0800128
Ray Milkey269ffb92014-04-03 14:43:30 -0700129 // calculate path of the intent1
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700130 ConstrainedBFSTree tree = new ConstrainedBFSTree(topology.getSwitch(DPID_1), intents, 600.0);
131 Path path1 = tree.getPath(topology.getSwitch(DPID_2));
Toshio Koidefe1d5d92014-02-26 20:09:48 -0800132
Ray Milkey269ffb92014-04-03 14:43:30 -0700133 assertNotNull(path1);
134 assertEquals(1, path1.size());
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700135 assertEquals(new LinkEvent(topology.getOutgoingLink(DPID_1, PORT_NUMBER_12)), path1.get(0));
Toshio Koidefe1d5d92014-02-26 20:09:48 -0800136
Ray Milkey269ffb92014-04-03 14:43:30 -0700137 PathIntent pathIntent1 = new PathIntent("pi1", path1, 600.0, intent1);
138 intentOps.add(Operator.ADD, pathIntent1);
139 intents.executeOperations(intentOps);
Toshio Koidefe1d5d92014-02-26 20:09:48 -0800140
Ray Milkey269ffb92014-04-03 14:43:30 -0700141 // calculate path of the intent2
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700142 tree = new ConstrainedBFSTree(topology.getSwitch(DPID_1), intents, 600.0);
143 Path path2 = tree.getPath(topology.getSwitch(DPID_2));
Toshio Koidefe1d5d92014-02-26 20:09:48 -0800144
Ray Milkey269ffb92014-04-03 14:43:30 -0700145 assertNotNull(path2);
146 assertEquals(2, path2.size());
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700147 assertEquals(new LinkEvent(topology.getOutgoingLink(DPID_1, PORT_NUMBER_14)), path2.get(0));
148 assertEquals(new LinkEvent(topology.getOutgoingLink(DPID_4, PORT_NUMBER_42)), path2.get(1));
Toshio Koidefe1d5d92014-02-26 20:09:48 -0800149
Ray Milkey269ffb92014-04-03 14:43:30 -0700150 PathIntent pathIntent2 = new PathIntent("pi2", path2, 600.0, intent2);
151 intentOps.add(Operator.ADD, pathIntent2);
152 intents.executeOperations(intentOps);
Toshio Koidefe1d5d92014-02-26 20:09:48 -0800153
Ray Milkey269ffb92014-04-03 14:43:30 -0700154 // calculate path of the intent3
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -0700155 tree = new ConstrainedBFSTree(topology.getSwitch(DPID_1), intents, 600.0);
156 Path path3 = tree.getPath(topology.getSwitch(DPID_2));
Toshio Koidefe1d5d92014-02-26 20:09:48 -0800157
Ray Milkey269ffb92014-04-03 14:43:30 -0700158 assertNull(path3);
159 }
Yuta HIGUCHI44a0b352014-05-14 21:32:48 -0700160}