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