From 5f35f7c17e1417b70f0ddfedec48f936ba1439a9 Mon Sep 17 00:00:00 2001 From: tom Date: Mon, 8 Sep 2014 18:38:19 -0700 Subject: [PATCH 1/2] Added a command-line to set device mastership role. --- .../onlab/onos/cli/net/DeviceRoleCommand.java | 33 +++++++++++++++++++ .../org/onlab/onos/cli/net/RoleCompleter.java | 27 +++++++++++++++ .../OSGI-INF/blueprint/shell-config.xml | 8 +++++ .../net/trivial/impl/SimpleDeviceManager.java | 2 +- .../trivial/impl/SimpleDeviceManagerTest.java | 4 ++- 5 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 cli/src/main/java/org/onlab/onos/cli/net/DeviceRoleCommand.java create mode 100644 cli/src/main/java/org/onlab/onos/cli/net/RoleCompleter.java diff --git a/cli/src/main/java/org/onlab/onos/cli/net/DeviceRoleCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/DeviceRoleCommand.java new file mode 100644 index 0000000000..32da169cad --- /dev/null +++ b/cli/src/main/java/org/onlab/onos/cli/net/DeviceRoleCommand.java @@ -0,0 +1,33 @@ +package org.onlab.onos.cli.net; + +import org.apache.karaf.shell.commands.Argument; +import org.apache.karaf.shell.commands.Command; +import org.onlab.onos.cli.AbstractShellCommand; +import org.onlab.onos.net.DeviceId; +import org.onlab.onos.net.MastershipRole; +import org.onlab.onos.net.device.DeviceAdminService; + +/** + * Sets role of the controller node for the given infrastructure device. + */ +@Command(scope = "onos", name = "device-role", + description = "Sets role of the controller node for the given infrastructure device") +public class DeviceRoleCommand extends AbstractShellCommand { + + @Argument(index = 0, name = "uri", description = "Device ID", + required = true, multiValued = false) + String uri = null; + + @Argument(index = 1, name = "role", description = "Mastership role", + required = true, multiValued = false) + String role = null; + + @Override + protected Object doExecute() throws Exception { + MastershipRole mastershipRole = MastershipRole.valueOf(role.toUpperCase()); + getService(DeviceAdminService.class).setRole(DeviceId.deviceId(uri), + mastershipRole); + return null; + } + +} diff --git a/cli/src/main/java/org/onlab/onos/cli/net/RoleCompleter.java b/cli/src/main/java/org/onlab/onos/cli/net/RoleCompleter.java new file mode 100644 index 0000000000..b540fcacb7 --- /dev/null +++ b/cli/src/main/java/org/onlab/onos/cli/net/RoleCompleter.java @@ -0,0 +1,27 @@ +package org.onlab.onos.cli.net; + +import org.apache.karaf.shell.console.Completer; +import org.apache.karaf.shell.console.completer.StringsCompleter; +import org.onlab.onos.net.MastershipRole; + +import java.util.List; +import java.util.SortedSet; + +/** + * Device mastership role completer. + */ +public class RoleCompleter implements Completer { + @Override + public int complete(String buffer, int cursor, List candidates) { + // Delegate string completer + StringsCompleter delegate = new StringsCompleter(); + SortedSet strings = delegate.getStrings(); + strings.add(MastershipRole.MASTER.toString().toLowerCase()); + strings.add(MastershipRole.STANDBY.toString().toLowerCase()); + strings.add(MastershipRole.NONE.toString().toLowerCase()); + + // Now let the completer do the work for figuring out what to offer. + return delegate.complete(buffer, cursor, candidates); + } + +} diff --git a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml index 7aa67be5ed..96c494d20d 100644 --- a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml +++ b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml @@ -16,6 +16,13 @@ + + + + + + + @@ -33,6 +40,7 @@ + diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java index ac84e7b459..2914673a0a 100644 --- a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java +++ b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java @@ -139,7 +139,7 @@ public class SimpleDeviceManager Device device = event.subject(); DeviceProvider provider = getProvider(device.providerId()); if (provider != null) { - provider.roleChanged(device, newRole); + triggerRoleSelection(device, provider); } post(event); } diff --git a/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java b/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java index 5bc60c0677..398e9cb054 100644 --- a/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java +++ b/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java @@ -143,11 +143,13 @@ public class SimpleDeviceManagerTest { } @Test - public void setRole() { + public void setRole() throws InterruptedException { connectDevice(DID1, SW1); admin.setRole(DID1, MastershipRole.STANDBY); validateEvents(DEVICE_ADDED, DEVICE_MASTERSHIP_CHANGED); assertEquals("incorrect role", MastershipRole.STANDBY, service.getRole(DID1)); + + Thread.sleep(200); // FIXME: replace this with more reliable and faster testing means!!! assertEquals("incorrect device", DID1, provider.deviceReceived.id()); assertEquals("incorrect role", MastershipRole.STANDBY, provider.roleReceived); } From 568581d5826234494956ce8966cb855b3e25e1d8 Mon Sep 17 00:00:00 2001 From: tom Date: Mon, 8 Sep 2014 20:13:36 -0700 Subject: [PATCH 2/2] Started to work on topology abstraction. Added more unit tests. Changed mastership application to be synchronous. --- .../org/onlab/onos/net/DefaultEdgeLink.java | 2 +- .../java/org/onlab/onos/net/DeviceId.java | 2 +- .../java/org/onlab/onos/net/EdgeLink.java | 4 +- .../main/java/org/onlab/onos/net/HostId.java | 2 +- .../onlab/onos/net/topology/LinkWeight.java | 10 +++ .../org/onlab/onos/net/topology/TopoEdge.java | 18 +++++ .../onlab/onos/net/topology/TopoVertex.java | 18 +++++ .../onos/net/topology/TopologyCluster.java | 10 +++ .../onos/net/topology/TopologyService.java | 71 +++++++++++++++++-- .../onlab/onos/net/DefaultEdgeLinkTest.java | 58 +++++++++++++++ .../org/onlab/onos/net/DefaultLinkTest.java | 2 +- .../org/onlab/onos/net/DefaultPortTest.java | 47 ++++++++++++ .../java/org/onlab/onos/net/HostIdTest.java | 22 ++++++ .../net/trivial/impl/SimpleDeviceManager.java | 29 ++------ .../trivial/impl/SimpleDeviceManagerTest.java | 2 - 15 files changed, 257 insertions(+), 40 deletions(-) create mode 100644 net/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java create mode 100644 net/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java create mode 100644 net/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java create mode 100644 net/api/src/main/java/org/onlab/onos/net/topology/TopologyCluster.java create mode 100644 net/api/src/test/java/org/onlab/onos/net/DefaultEdgeLinkTest.java create mode 100644 net/api/src/test/java/org/onlab/onos/net/DefaultPortTest.java create mode 100644 net/api/src/test/java/org/onlab/onos/net/HostIdTest.java diff --git a/net/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java b/net/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java index fe2d34ade3..41cd04591f 100644 --- a/net/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java +++ b/net/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java @@ -37,7 +37,7 @@ public class DefaultEdgeLink extends DefaultLink implements EdgeLink { } @Override - public ConnectPoint connectPoint() { + public HostLocation hostLocation() { return hostLocation; } } diff --git a/net/api/src/main/java/org/onlab/onos/net/DeviceId.java b/net/api/src/main/java/org/onlab/onos/net/DeviceId.java index 19577a1f87..ef8c5ab1ce 100644 --- a/net/api/src/main/java/org/onlab/onos/net/DeviceId.java +++ b/net/api/src/main/java/org/onlab/onos/net/DeviceId.java @@ -27,7 +27,7 @@ public final class DeviceId extends ElementId { * @param string device URI string */ public static DeviceId deviceId(String string) { - return new DeviceId(URI.create(string)); + return deviceId(URI.create(string)); } } diff --git a/net/api/src/main/java/org/onlab/onos/net/EdgeLink.java b/net/api/src/main/java/org/onlab/onos/net/EdgeLink.java index 356592d352..b1d5f7fb0f 100644 --- a/net/api/src/main/java/org/onlab/onos/net/EdgeLink.java +++ b/net/api/src/main/java/org/onlab/onos/net/EdgeLink.java @@ -17,8 +17,8 @@ public interface EdgeLink extends Link { * Returns the connection point where the host attaches to the * network infrastructure. * - * @return host connection point + * @return host location point */ - ConnectPoint connectPoint(); + HostLocation hostLocation(); } diff --git a/net/api/src/main/java/org/onlab/onos/net/HostId.java b/net/api/src/main/java/org/onlab/onos/net/HostId.java index a7f550b39a..3e274b31e2 100644 --- a/net/api/src/main/java/org/onlab/onos/net/HostId.java +++ b/net/api/src/main/java/org/onlab/onos/net/HostId.java @@ -27,7 +27,7 @@ public final class HostId extends ElementId { * @param string device URI string */ public static HostId hostId(String string) { - return new HostId(URI.create(string)); + return hostId(URI.create(string)); } } diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java b/net/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java new file mode 100644 index 0000000000..89ef577573 --- /dev/null +++ b/net/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java @@ -0,0 +1,10 @@ +package org.onlab.onos.net.topology; + +import org.onlab.graph.EdgeWeight; + +/** + * Entity capable of determining cost or weight of a specified topology + * graph edge. + */ +public interface LinkWeight extends EdgeWeight { +} diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java b/net/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java new file mode 100644 index 0000000000..ef94eca6d5 --- /dev/null +++ b/net/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java @@ -0,0 +1,18 @@ +package org.onlab.onos.net.topology; + +import org.onlab.graph.Edge; +import org.onlab.onos.net.Link; + +/** + * Represents an edge in the topology graph. + */ +public interface TopoEdge extends Edge { + + /** + * Returns the associated infrastructure link. + * + * @return backing infrastructure link + */ + Link link(); + +} diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java b/net/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java new file mode 100644 index 0000000000..d5a8b95c2c --- /dev/null +++ b/net/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java @@ -0,0 +1,18 @@ +package org.onlab.onos.net.topology; + +import org.onlab.graph.Vertex; +import org.onlab.onos.net.DeviceId; + +/** + * Represents a vertex in the topology graph. + */ +public interface TopoVertex extends Vertex { + + /** + * Returns the associated infrastructure device identification. + * + * @return device identifier + */ + DeviceId deviceId(); + +} diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyCluster.java b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyCluster.java new file mode 100644 index 0000000000..e58c784a85 --- /dev/null +++ b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyCluster.java @@ -0,0 +1,10 @@ +package org.onlab.onos.net.topology; + +/** + * Representation of an SCC (strongly-connected component) in a network topology. + */ +public interface TopologyCluster { + + // TODO: add stuff in here: id, deviceCount, linkCount + +} diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java index 4e1211a2e8..a6962a2502 100644 --- a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java +++ b/net/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java @@ -1,7 +1,13 @@ package org.onlab.onos.net.topology; +import org.onlab.graph.Graph; +import org.onlab.onos.net.ConnectPoint; +import org.onlab.onos.net.DeviceId; +import org.onlab.onos.net.Path; import org.onlab.onos.net.Topology; +import java.util.Set; + /** * Service for providing network topology information. */ @@ -14,13 +20,64 @@ public interface TopologyService { */ Topology currentTopology(); - // TODO: Figure out hot to best export graph traversal methods via Graph/Vertex/Edge - // TODO: figure out how we want this to be presented, via Topology or via TopologyService - // Set getClusters(Topology topology); - // Set getPaths(Topology topology, DeviceId src, DeviceId dst); - // Set getPaths(Topology topology, DeviceId src, DeviceId dst, LinkWeight weight); - // boolean isInfrastructure(Topology topology, ConnectPoint connectPoint); - // boolean isInBroadcastTree(Topology topology, ConnectPoint connectPoint); + /** + * Returns the set of clusters in the specified topology. + * + * @param topology topology descriptor + * @return set of topology clusters + */ + Set getClusters(Topology topology); + + /** + * Returns the graph view of the specified topology. + * + * @param topology topology descriptor + * @return topology graph view + */ + Graph getGraph(Topology topology); + + /** + * Returns the set of all shortest paths, in terms of hop-count, between + * the specified source and destination devices. + * + * @param topology topology descriptor + * @param src source device + * @param dst destination device + * @return set of all shortest paths between the two devices + */ + Set getPaths(Topology topology, DeviceId src, DeviceId dst); + + /** + * Returns the set of all shortest paths, computed using the supplied + * edge-weight entity, between the specified source and destination devices. + * + * @param topology topology descriptor + * @param src source device + * @param dst destination device + * @return set of all shortest paths between the two devices + */ + Set getPaths(Topology topology, DeviceId src, DeviceId dst, + LinkWeight weight); + + /** + * Indicates whether the specified connection point is part of the network + * infrastructure or part of network edge. + * + * @param topology topology descriptor + * @param connectPoint connection point + * @return true of connection point is in infrastructure; false if edge + */ + boolean isInfrastructure(Topology topology, ConnectPoint connectPoint); + + + /** + * Indicates whether the specified connection point allows broadcast. + * + * @param topology topology descriptor + * @param connectPoint connection point + * @return true if broadcast is permissible + */ + boolean isInBroadcastTree(Topology topology, ConnectPoint connectPoint); /** * Adds the specified topology listener. diff --git a/net/api/src/test/java/org/onlab/onos/net/DefaultEdgeLinkTest.java b/net/api/src/test/java/org/onlab/onos/net/DefaultEdgeLinkTest.java new file mode 100644 index 0000000000..368ff16e1e --- /dev/null +++ b/net/api/src/test/java/org/onlab/onos/net/DefaultEdgeLinkTest.java @@ -0,0 +1,58 @@ +package org.onlab.onos.net; + +import com.google.common.testing.EqualsTester; +import org.junit.Test; +import org.onlab.onos.net.provider.ProviderId; + +import static org.junit.Assert.assertEquals; +import static org.onlab.onos.net.DefaultLinkTest.cp; +import static org.onlab.onos.net.DeviceId.deviceId; +import static org.onlab.onos.net.HostId.hostId; +import static org.onlab.onos.net.PortNumber.portNumber; + +/** + * Test of the default edge link model entity. + */ +public class DefaultEdgeLinkTest { + + private static final ProviderId PID = new ProviderId("foo"); + private static final DeviceId DID1 = deviceId("of:foo"); + private static final HostId HID1 = hostId("nic:foobar"); + private static final HostId HID2 = hostId("nic:barfoo"); + private static final PortNumber P0 = portNumber(0); + private static final PortNumber P1 = portNumber(1); + + @Test + public void testEquality() { + EdgeLink l1 = new DefaultEdgeLink(PID, cp(HID1, P0), + new HostLocation(DID1, P1, 123L), true); + EdgeLink l2 = new DefaultEdgeLink(PID, cp(HID1, P0), + new HostLocation(DID1, P1, 123L), true); + + EdgeLink l3 = new DefaultEdgeLink(PID, cp(HID2, P0), + new HostLocation(DID1, P1, 123L), false); + EdgeLink l4 = new DefaultEdgeLink(PID, cp(HID2, P0), + new HostLocation(DID1, P1, 123L), false); + + EdgeLink l5 = new DefaultEdgeLink(PID, cp(HID1, P0), + new HostLocation(DID1, P1, 123L), false); + + new EqualsTester().addEqualityGroup(l1, l2) + .addEqualityGroup(l3, l4) + .addEqualityGroup(l5) + .testEquals(); + } + + @Test + public void basics() { + HostLocation hostLocation = new HostLocation(DID1, P1, 123L); + EdgeLink link = new DefaultEdgeLink(PID, cp(HID1, P0), hostLocation, false); + assertEquals("incorrect src", cp(HID1, P0), link.src()); + assertEquals("incorrect dst", hostLocation, link.dst()); + assertEquals("incorrect type", Link.Type.EDGE, link.type()); + assertEquals("incorrect hostId", HID1, link.hostId()); + assertEquals("incorrect connect point", hostLocation, link.hostLocation()); + assertEquals("incorrect time", 123L, link.hostLocation().time()); + } + +} diff --git a/net/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java b/net/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java index 37757afbc8..ec8511eadf 100644 --- a/net/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java +++ b/net/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java @@ -21,7 +21,7 @@ public class DefaultLinkTest { private static final PortNumber P1 = portNumber(1); private static final PortNumber P2 = portNumber(2); - public static ConnectPoint cp(DeviceId id, PortNumber pn) { + public static ConnectPoint cp(ElementId id, PortNumber pn) { return new ConnectPoint(id, pn); } diff --git a/net/api/src/test/java/org/onlab/onos/net/DefaultPortTest.java b/net/api/src/test/java/org/onlab/onos/net/DefaultPortTest.java new file mode 100644 index 0000000000..e9d3da6d36 --- /dev/null +++ b/net/api/src/test/java/org/onlab/onos/net/DefaultPortTest.java @@ -0,0 +1,47 @@ +package org.onlab.onos.net; + +import com.google.common.testing.EqualsTester; +import org.junit.Test; +import org.onlab.onos.net.provider.ProviderId; + +import static org.junit.Assert.assertEquals; +import static org.onlab.onos.net.Device.Type.SWITCH; +import static org.onlab.onos.net.DeviceId.deviceId; +import static org.onlab.onos.net.PortNumber.portNumber; + +/** + * Test of the default port model entity. + */ +public class DefaultPortTest { + + private static final ProviderId PID = new ProviderId("foo"); + private static final DeviceId DID1 = deviceId("of:foo"); + private static final DeviceId DID2 = deviceId("of:bar"); + private static final PortNumber P1 = portNumber(1); + private static final PortNumber P2 = portNumber(2); + + @Test + public void testEquality() { + Device device = new DefaultDevice(PID, DID1, SWITCH, "m", "h", "s", "n"); + Port p1 = new DefaultPort(device, portNumber(1), true); + Port p2 = new DefaultPort(device, portNumber(1), true); + Port p3 = new DefaultPort(device, portNumber(2), true); + Port p4 = new DefaultPort(device, portNumber(2), true); + Port p5 = new DefaultPort(device, portNumber(1), false); + + new EqualsTester().addEqualityGroup(p1, p2) + .addEqualityGroup(p3, p4) + .addEqualityGroup(p5) + .testEquals(); + } + + @Test + public void basics() { + Device device = new DefaultDevice(PID, DID1, SWITCH, "m", "h", "s", "n"); + Port port = new DefaultPort(device, portNumber(1), true); + assertEquals("incorrect element", device, port.element()); + assertEquals("incorrect number", portNumber(1), port.number()); + assertEquals("incorrect state", true, port.isEnabled()); + } + +} diff --git a/net/api/src/test/java/org/onlab/onos/net/HostIdTest.java b/net/api/src/test/java/org/onlab/onos/net/HostIdTest.java new file mode 100644 index 0000000000..3adcabc0e9 --- /dev/null +++ b/net/api/src/test/java/org/onlab/onos/net/HostIdTest.java @@ -0,0 +1,22 @@ +package org.onlab.onos.net; + +import com.google.common.testing.EqualsTester; +import org.junit.Test; + +import static org.onlab.onos.net.HostId.hostId; + +/** + * Test of the host identifier. + */ +public class HostIdTest extends ElementIdTest { + + @Test + public void basics() { + new EqualsTester() + .addEqualityGroup(hostId("nic:foo"), + hostId("nic:foo")) + .addEqualityGroup(hostId("nic:bar")) + .testEquals(); + } + +} diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java index 2914673a0a..29c119d4c4 100644 --- a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java +++ b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java @@ -27,11 +27,8 @@ import org.onlab.onos.net.provider.AbstractProviderService; import org.slf4j.Logger; import java.util.List; -import java.util.concurrent.ExecutorService; import static com.google.common.base.Preconditions.checkNotNull; -import static java.util.concurrent.Executors.newSingleThreadExecutor; -import static org.onlab.util.Tools.namedThreads; import static org.slf4j.LoggerFactory.getLogger; /** @@ -56,9 +53,6 @@ public class SimpleDeviceManager private final SimpleDeviceStore store = new SimpleDeviceStore(); - private final ExecutorService executor = - newSingleThreadExecutor(namedThreads("onos-device-%d")); - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) protected EventDeliveryService eventDispatcher; @@ -139,7 +133,7 @@ public class SimpleDeviceManager Device device = event.subject(); DeviceProvider provider = getProvider(device.providerId()); if (provider != null) { - triggerRoleSelection(device, provider); + provider.roleChanged(device, newRole); } post(event); } @@ -168,11 +162,12 @@ public class SimpleDeviceManager log.info("Device {} connected", deviceId); DeviceEvent event = store.createOrUpdateDevice(provider().id(), deviceId, deviceDescription); - post(event); // If there was a change of any kind, trigger role selection process. if (event != null) { - triggerRoleSelection(event.subject(), provider()); + Device device = event.subject(); + provider().roleChanged(device, store.getRole(device.id())); + post(event); } } @@ -210,22 +205,6 @@ public class SimpleDeviceManager } } - /** - * Triggers asynchronous role selection. - * - * @param device device - * @param provider device provider - */ - private void triggerRoleSelection(final Device device, - final DeviceProvider provider) { - executor.execute(new Runnable() { - @Override - public void run() { - provider.roleChanged(device, store.getRole(device.id())); - } - }); - } - // Posts the specified event to the local event dispatcher. private void post(DeviceEvent event) { if (event != null && eventDispatcher != null) { diff --git a/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java b/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java index 398e9cb054..bcece2d76b 100644 --- a/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java +++ b/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java @@ -148,8 +148,6 @@ public class SimpleDeviceManagerTest { admin.setRole(DID1, MastershipRole.STANDBY); validateEvents(DEVICE_ADDED, DEVICE_MASTERSHIP_CHANGED); assertEquals("incorrect role", MastershipRole.STANDBY, service.getRole(DID1)); - - Thread.sleep(200); // FIXME: replace this with more reliable and faster testing means!!! assertEquals("incorrect device", DID1, provider.deviceReceived.id()); assertEquals("incorrect role", MastershipRole.STANDBY, provider.roleReceived); }