blob: fce9cc21b317c904498d2918208613cf9ad35744 [file] [log] [blame]
Jonathan Hartaa380972014-04-03 10:24:46 -07001package net.onrc.onos.core.intent;
Toshio Koideebdbb622014-02-12 20:28:38 -08002
Toshio Koide0c9106d2014-02-19 15:26:38 -08003import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
Pavlin Radoslavov6397a7f2014-02-18 14:56:52 -08004import net.onrc.onos.ofcontroller.networkgraph.NetworkGraphImpl;
Toshio Koideebdbb622014-02-12 20:28:38 -08005import net.onrc.onos.ofcontroller.networkgraph.Link;
6import net.onrc.onos.ofcontroller.networkgraph.LinkImpl;
Toshio Koide0c9106d2014-02-19 15:26:38 -08007import net.onrc.onos.ofcontroller.networkgraph.Port;
Toshio Koideebdbb622014-02-12 20:28:38 -08008import net.onrc.onos.ofcontroller.networkgraph.Switch;
9import net.onrc.onos.ofcontroller.networkgraph.SwitchImpl;
10
Toshio Koide066506e2014-02-20 19:52:09 -080011/**
Toshio Koidefe1d5d92014-02-26 20:09:48 -080012 * A mock class of NetworkGraph.
13 * This class should be used only by test codes.
14 *
Toshio Koide066506e2014-02-20 19:52:09 -080015 * @author Toshio Koide (t-koide@onlab.us)
16 */
Pavlin Radoslavov6397a7f2014-02-18 14:56:52 -080017public class MockNetworkGraph extends NetworkGraphImpl {
Toshio Koidefe1d5d92014-02-26 20:09:48 -080018 public static Long LOCAL_PORT = 0xFFFEL;
19 public SwitchImpl sw1, sw2, sw3, sw4;
20
Toshio Koide0c9106d2014-02-19 15:26:38 -080021 class DetachableLinkImpl extends LinkImpl {
22 public DetachableLinkImpl(NetworkGraph graph, Port srcPort, Port dstPort) {
23 super(graph, srcPort, dstPort);
24 }
25
26 public void detachFromGraph() {
27 unsetFromPorts();
Toshio Koide066506e2014-02-20 19:52:09 -080028 }
Toshio Koide0c9106d2014-02-19 15:26:38 -080029 }
Toshio Koideebdbb622014-02-12 20:28:38 -080030 public Switch addSwitch(Long switchId) {
31 SwitchImpl sw = new SwitchImpl(this, switchId);
Pavlin Radoslavov6d224ee2014-02-18 16:43:15 -080032 this.putSwitch(sw);
Toshio Koideebdbb622014-02-12 20:28:38 -080033 return sw;
Toshio Koideebdbb622014-02-12 20:28:38 -080034 }
35
36 public Link addLink(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
Toshio Koide0c9106d2014-02-19 15:26:38 -080037 return new DetachableLinkImpl(
Toshio Koideebdbb622014-02-12 20:28:38 -080038 this,
39 getSwitch(srcDpid).getPort(srcPortNo),
40 getSwitch(dstDpid).getPort(dstPortNo));
41 }
42
43 public Link[] addBidirectionalLinks(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
44 Link[] links = new Link[2];
45 links[0] = addLink(srcDpid, srcPortNo, dstDpid, dstPortNo);
46 links[1] = addLink(dstDpid, dstPortNo, srcDpid, srcPortNo);
47
48 return links;
49 }
Toshio Koide066506e2014-02-20 19:52:09 -080050
Toshio Koidefe1d5d92014-02-26 20:09:48 -080051 /**
52 * create sample topology of 4 switches and 5 bidirectional links.
53 * <pre>
54 * [1] --- [2]
55 * | / |
56 * | / |
57 * [4] --- [3]
58 * </pre>
59 */
60 public void createSampleTopology1() {
61 sw1 = (SwitchImpl) addSwitch(1L);
62 sw1.addPort(LOCAL_PORT);
63 sw2 = (SwitchImpl) addSwitch(2L);
64 sw2.addPort(LOCAL_PORT);
65 sw3 = (SwitchImpl) addSwitch(3L);
66 sw3.addPort(LOCAL_PORT);
67 sw4 = (SwitchImpl) addSwitch(4L);
68 sw4.addPort(LOCAL_PORT);
Toshio Koideebdbb622014-02-12 20:28:38 -080069
Toshio Koidefe1d5d92014-02-26 20:09:48 -080070 sw1.addPort(12L); // sw1 -> sw2
71 sw1.addPort(14L); // sw1 -> sw4
72 sw2.addPort(21L); // sw2 -> sw1
73 sw2.addPort(23L); // sw2 -> sw3
74 sw2.addPort(24L); // sw2 -> sw4
75 sw3.addPort(32L); // sw3 -> sw2
76 sw3.addPort(34L); // sw3 -> sw4
77 sw4.addPort(41L); // sw4 -> sw1
78 sw4.addPort(42L); // sw4 -> sw2
79 sw4.addPort(43L); // sw4 -> sw3
Toshio Koideebdbb622014-02-12 20:28:38 -080080
Toshio Koidefe1d5d92014-02-26 20:09:48 -080081 addBidirectionalLinks(1L, 12L, 2L, 21L);
82 addBidirectionalLinks(2L, 23L, 3L, 32L);
83 addBidirectionalLinks(3L, 34L, 4L, 43L);
84 addBidirectionalLinks(4L, 41L, 1L, 14L);
85 addBidirectionalLinks(2L, 24L, 4L, 42L);
Toshio Koideebdbb622014-02-12 20:28:38 -080086
87 // set capacity of all links to 1000Mbps
88 for (Link link: getLinks()) {
89 ((LinkImpl)link).setCapacity(1000.0);
90 }
91 }
Toshio Koide0c9106d2014-02-19 15:26:38 -080092
93 public void removeLink(Long srcDpid, Long srcPortNo, Long dstDpid, Long dstPortNo) {
94 DetachableLinkImpl link = (DetachableLinkImpl)getSwitch(srcDpid).getPort(srcPortNo).getOutgoingLink();
Pavlin Radoslavov7c8f69a2014-02-19 19:01:45 -080095 if (link.getDstSwitch().getDpid().equals(dstDpid) && link.getDstPort().getNumber().equals(dstPortNo)) {
Toshio Koide0c9106d2014-02-19 15:26:38 -080096 link.detachFromGraph();
97 }
98 }
Toshio Koideebdbb622014-02-12 20:28:38 -080099}