blob: d23930431d34ea7f934d40497e826544c796a679 [file] [log] [blame]
tomdc95b8a2014-09-17 08:07:26 -07001package org.onlab.onos.net.trivial.topology.impl;
2
3import org.junit.Before;
4import org.junit.Test;
5import org.onlab.onos.net.ConnectPoint;
tombe988312014-09-19 18:38:47 -07006import org.onlab.onos.net.DefaultDevice;
7import org.onlab.onos.net.DefaultLink;
tomdc95b8a2014-09-17 08:07:26 -07008import org.onlab.onos.net.Device;
9import org.onlab.onos.net.DeviceId;
10import org.onlab.onos.net.Link;
11import org.onlab.onos.net.Path;
12import org.onlab.onos.net.PortNumber;
13import org.onlab.onos.net.provider.ProviderId;
14import org.onlab.onos.net.topology.ClusterId;
tombe988312014-09-19 18:38:47 -070015import org.onlab.onos.net.topology.DefaultGraphDescription;
tomdc95b8a2014-09-17 08:07:26 -070016import org.onlab.onos.net.topology.GraphDescription;
17import org.onlab.onos.net.topology.LinkWeight;
18import org.onlab.onos.net.topology.TopologyCluster;
19import org.onlab.onos.net.topology.TopologyEdge;
20
21import java.util.Set;
22
23import static com.google.common.collect.ImmutableSet.of;
24import static org.junit.Assert.*;
25import static org.onlab.onos.net.DeviceId.deviceId;
26import static org.onlab.onos.net.PortNumber.portNumber;
tomdc95b8a2014-09-17 08:07:26 -070027
28/**
29 * Test of the default topology implementation.
30 */
31public class DefaultTopologyTest {
32
tom7e02cda2014-09-18 12:05:46 -070033 public static final ProviderId PID = new ProviderId("of", "foo.bar");
tomdc95b8a2014-09-17 08:07:26 -070034
35 public static final DeviceId D1 = deviceId("of:1");
36 public static final DeviceId D2 = deviceId("of:2");
37 public static final DeviceId D3 = deviceId("of:3");
38 public static final DeviceId D4 = deviceId("of:4");
39 public static final DeviceId D5 = deviceId("of:5");
40
41 public static final PortNumber P1 = portNumber(1);
42 public static final PortNumber P2 = portNumber(2);
43
44 public static final LinkWeight WEIGHT = new LinkWeight() {
45 @Override
46 public double weight(TopologyEdge edge) {
47 return edge.src().deviceId().equals(D4) ||
48 edge.dst().deviceId().equals(D4) ? 2.0 : 1.0;
49 }
50 };
51
52 private DefaultTopology dt;
53
54 @Before
55 public void setUp() {
56 long now = System.currentTimeMillis();
57 Set<Device> devices = of(device("1"), device("2"),
58 device("3"), device("4"),
59 device("5"));
60 Set<Link> links = of(link("1", 1, "2", 1), link("2", 1, "1", 1),
61 link("3", 2, "2", 2), link("2", 2, "3", 2),
62 link("1", 3, "4", 3), link("4", 3, "1", 3),
63 link("3", 4, "4", 4), link("4", 4, "3", 4));
64 GraphDescription graphDescription =
65 new DefaultGraphDescription(now, devices, links);
66
67 dt = new DefaultTopology(PID, graphDescription);
68 assertEquals("incorrect supplier", PID, dt.providerId());
69 assertEquals("incorrect time", now, dt.time());
70 assertEquals("incorrect device count", 5, dt.deviceCount());
71 assertEquals("incorrect link count", 8, dt.linkCount());
72 assertEquals("incorrect cluster count", 2, dt.clusterCount());
73 assertEquals("incorrect broadcast set size", 6,
74 dt.broadcastSetSize(ClusterId.clusterId(0)));
75 }
76
77 @Test
78 public void pathRelated() {
79 Set<Path> paths = dt.getPaths(D1, D2);
80 assertEquals("incorrect path count", 1, paths.size());
81
82 paths = dt.getPaths(D1, D3);
83 assertEquals("incorrect path count", 2, paths.size());
84
85 paths = dt.getPaths(D1, D5);
86 assertTrue("no paths expected", paths.isEmpty());
87
88 paths = dt.getPaths(D1, D3, WEIGHT);
89 assertEquals("incorrect path count", 1, paths.size());
90 }
91
92 @Test
93 public void pointRelated() {
94 assertTrue("should be infrastructure point",
95 dt.isInfrastructure(new ConnectPoint(D1, P1)));
96 assertFalse("should not be infrastructure point",
97 dt.isInfrastructure(new ConnectPoint(D1, P2)));
98 }
99
100 @Test
101 public void clusterRelated() {
102 Set<TopologyCluster> clusters = dt.getClusters();
103 assertEquals("incorrect cluster count", 2, clusters.size());
104
105 TopologyCluster c = dt.getCluster(D1);
106 Set<DeviceId> devs = dt.getClusterDevices(c);
107 assertEquals("incorrect cluster device count", 4, devs.size());
108 assertTrue("cluster should contain D2", devs.contains(D2));
109 assertFalse("cluster should not contain D5", devs.contains(D5));
110 }
111
tombe988312014-09-19 18:38:47 -0700112 // Short-hand for creating a link.
113 public static Link link(String src, int sp, String dst, int dp) {
114 return new DefaultLink(PID, new ConnectPoint(did(src), portNumber(sp)),
115 new ConnectPoint(did(dst), portNumber(dp)),
116 Link.Type.DIRECT);
117 }
118
119 // Crates a new device with the specified id
120 public static Device device(String id) {
121 return new DefaultDevice(PID, did(id), Device.Type.SWITCH,
122 "mfg", "1.0", "1.1", "1234");
123 }
124
125 // Short-hand for producing a device id from a string
126 public static DeviceId did(String id) {
127 return deviceId("of:" + id);
128 }
129
tomdc95b8a2014-09-17 08:07:26 -0700130}