blob: e7dcd903b581d55c07a121d8873509ca228b09b5 [file] [log] [blame]
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2015-present Open Networking Laboratory
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Thomas Vachuska930a8ee2015-08-04 18:49:36 -070016package org.onosproject.common;
tomdc95b8a2014-09-17 08:07:26 -070017
18import org.junit.Before;
19import org.junit.Test;
Thomas Vachuskac31d9f12015-01-22 12:33:27 -080020import org.onlab.packet.ChassisId;
Brian O'Connorabafb502014-12-02 22:26:20 -080021import org.onosproject.net.ConnectPoint;
22import org.onosproject.net.DefaultDevice;
23import org.onosproject.net.DefaultLink;
24import org.onosproject.net.Device;
25import org.onosproject.net.DeviceId;
26import org.onosproject.net.Link;
27import org.onosproject.net.Path;
28import org.onosproject.net.PortNumber;
29import org.onosproject.net.provider.ProviderId;
30import org.onosproject.net.topology.ClusterId;
31import org.onosproject.net.topology.DefaultGraphDescription;
32import org.onosproject.net.topology.GraphDescription;
33import org.onosproject.net.topology.LinkWeight;
34import org.onosproject.net.topology.TopologyCluster;
tomdc95b8a2014-09-17 08:07:26 -070035
36import java.util.Set;
37
38import static com.google.common.collect.ImmutableSet.of;
39import static org.junit.Assert.*;
Brian O'Connorabafb502014-12-02 22:26:20 -080040import static org.onosproject.net.DeviceId.deviceId;
41import static org.onosproject.net.PortNumber.portNumber;
tomdc95b8a2014-09-17 08:07:26 -070042
43/**
44 * Test of the default topology implementation.
45 */
46public class DefaultTopologyTest {
47
tom7e02cda2014-09-18 12:05:46 -070048 public static final ProviderId PID = new ProviderId("of", "foo.bar");
tomdc95b8a2014-09-17 08:07:26 -070049
50 public static final DeviceId D1 = deviceId("of:1");
51 public static final DeviceId D2 = deviceId("of:2");
52 public static final DeviceId D3 = deviceId("of:3");
53 public static final DeviceId D4 = deviceId("of:4");
54 public static final DeviceId D5 = deviceId("of:5");
55
56 public static final PortNumber P1 = portNumber(1);
57 public static final PortNumber P2 = portNumber(2);
58
Thomas Vachuskac31d9f12015-01-22 12:33:27 -080059 public static final LinkWeight WEIGHT = edge ->
60 edge.src().deviceId().equals(D4) || edge.dst().deviceId().equals(D4)
61 ? 2.0 : 1.0;
tomdc95b8a2014-09-17 08:07:26 -070062
63 private DefaultTopology dt;
64
65 @Before
66 public void setUp() {
67 long now = System.currentTimeMillis();
68 Set<Device> devices = of(device("1"), device("2"),
69 device("3"), device("4"),
70 device("5"));
71 Set<Link> links = of(link("1", 1, "2", 1), link("2", 1, "1", 1),
72 link("3", 2, "2", 2), link("2", 2, "3", 2),
73 link("1", 3, "4", 3), link("4", 3, "1", 3),
74 link("3", 4, "4", 4), link("4", 4, "3", 4));
75 GraphDescription graphDescription =
Sho SHIMIZU2581e182015-09-25 10:22:33 -070076 new DefaultGraphDescription(now, System.currentTimeMillis(), devices, links);
tomdc95b8a2014-09-17 08:07:26 -070077
78 dt = new DefaultTopology(PID, graphDescription);
79 assertEquals("incorrect supplier", PID, dt.providerId());
80 assertEquals("incorrect time", now, dt.time());
81 assertEquals("incorrect device count", 5, dt.deviceCount());
82 assertEquals("incorrect link count", 8, dt.linkCount());
83 assertEquals("incorrect cluster count", 2, dt.clusterCount());
84 assertEquals("incorrect broadcast set size", 6,
85 dt.broadcastSetSize(ClusterId.clusterId(0)));
86 }
87
88 @Test
89 public void pathRelated() {
90 Set<Path> paths = dt.getPaths(D1, D2);
91 assertEquals("incorrect path count", 1, paths.size());
92
93 paths = dt.getPaths(D1, D3);
94 assertEquals("incorrect path count", 2, paths.size());
95
96 paths = dt.getPaths(D1, D5);
97 assertTrue("no paths expected", paths.isEmpty());
98
99 paths = dt.getPaths(D1, D3, WEIGHT);
100 assertEquals("incorrect path count", 1, paths.size());
101 }
102
103 @Test
104 public void pointRelated() {
105 assertTrue("should be infrastructure point",
106 dt.isInfrastructure(new ConnectPoint(D1, P1)));
107 assertFalse("should not be infrastructure point",
108 dt.isInfrastructure(new ConnectPoint(D1, P2)));
109 }
110
111 @Test
112 public void clusterRelated() {
113 Set<TopologyCluster> clusters = dt.getClusters();
114 assertEquals("incorrect cluster count", 2, clusters.size());
115
116 TopologyCluster c = dt.getCluster(D1);
117 Set<DeviceId> devs = dt.getClusterDevices(c);
118 assertEquals("incorrect cluster device count", 4, devs.size());
119 assertTrue("cluster should contain D2", devs.contains(D2));
120 assertFalse("cluster should not contain D5", devs.contains(D5));
121 }
122
tombe988312014-09-19 18:38:47 -0700123 // Short-hand for creating a link.
124 public static Link link(String src, int sp, String dst, int dp) {
Ray Milkey2693bda2016-01-22 16:08:14 -0800125 return DefaultLink.builder().providerId(PID)
126 .src(new ConnectPoint(did(src), portNumber(sp)))
127 .dst(new ConnectPoint(did(dst), portNumber(dp)))
128 .type(Link.Type.DIRECT)
129 .build();
tombe988312014-09-19 18:38:47 -0700130 }
131
132 // Crates a new device with the specified id
133 public static Device device(String id) {
134 return new DefaultDevice(PID, did(id), Device.Type.SWITCH,
alshabib7911a052014-10-16 17:49:37 -0700135 "mfg", "1.0", "1.1", "1234", new ChassisId());
tombe988312014-09-19 18:38:47 -0700136 }
137
138 // Short-hand for producing a device id from a string
139 public static DeviceId did(String id) {
140 return deviceId("of:" + id);
141 }
142
tomdc95b8a2014-09-17 08:07:26 -0700143}