@Test public final void testRemoveDevice() { putDevice(DID1, SW1, A1); List<PortDescription> pds = Arrays.<PortDescription>asList(new DefaultPortDescription(P1, true, A2)); deviceStore.updatePorts(PID, DID1, pds); putDevice(DID2, SW1); assertEquals(2, deviceStore.getDeviceCount()); assertEquals(1, deviceStore.getPorts(DID1).size()); assertAnnotationsEquals(deviceStore.getDevice(DID1).annotations(), A1); assertAnnotationsEquals(deviceStore.getPort(DID1, P1).annotations(), A2); Capture<InternalDeviceEvent> message = new Capture<>(); Capture<MessageSubject> subject = new Capture<>(); Capture<Function<InternalDeviceEvent, byte[]>> encoder = new Capture<>(); resetCommunicatorExpectingSingleBroadcast(message, subject, encoder); DeviceEvent event = deviceStore.removeDevice(DID1); assertEquals(DEVICE_REMOVED, event.type()); assertDevice(DID1, SW1, event.subject()); assertEquals(1, deviceStore.getDeviceCount()); assertEquals(0, deviceStore.getPorts(DID1).size()); verify(clusterCommunicator); // TODO: verify broadcast message assertTrue(message.hasCaptured()); // putBack Device, Port w/o annotation putDevice(DID1, SW1); List<PortDescription> pds2 = Arrays.<PortDescription>asList(new DefaultPortDescription(P1, true)); deviceStore.updatePorts(PID, DID1, pds2); // annotations should not survive assertEquals(2, deviceStore.getDeviceCount()); assertEquals(1, deviceStore.getPorts(DID1).size()); assertAnnotationsEquals(deviceStore.getDevice(DID1).annotations()); assertAnnotationsEquals(deviceStore.getPort(DID1, P1).annotations()); }
@Test public final void testGetPorts() { putDevice(DID1, SW1); putDevice(DID2, SW1); List<PortDescription> pds = Arrays.<PortDescription>asList( new DefaultPortDescription(P1, true), new DefaultPortDescription(P2, true)); deviceStore.updatePorts(PID, DID1, pds); Set<PortNumber> expectedPorts = Sets.newHashSet(P1, P2); List<Port> ports = deviceStore.getPorts(DID1); for (Port port : ports) { assertTrue("Port is enabled", port.isEnabled()); assertTrue("PortNumber is one of expected", expectedPorts.remove(port.number())); } assertTrue("Event for all expectedport appeared", expectedPorts.isEmpty()); assertTrue("DID2 has no ports", deviceStore.getPorts(DID2).isEmpty()); }
@Test public final void testGetPort() { putDevice(DID1, SW1); putDevice(DID2, SW1); List<PortDescription> pds = Arrays.<PortDescription>asList( new DefaultPortDescription(P1, true), new DefaultPortDescription(P2, false)); deviceStore.updatePorts(PID, DID1, pds); Port port1 = deviceStore.getPort(DID1, P1); assertEquals(P1, port1.number()); assertTrue("Port is enabled", port1.isEnabled()); Port port2 = deviceStore.getPort(DID1, P2); assertEquals(P2, port2.number()); assertFalse("Port is disabled", port2.isEnabled()); Port port3 = deviceStore.getPort(DID1, P3); assertNull("P3 not expected", port3); }
@Test public final void testUpdatePortStatus() { putDevice(DID1, SW1); List<PortDescription> pds = Arrays.<PortDescription>asList(new DefaultPortDescription(P1, true)); deviceStore.updatePorts(PID, DID1, pds); Capture<InternalPortStatusEvent> message = new Capture<>(); Capture<MessageSubject> subject = new Capture<>(); Capture<Function<InternalPortStatusEvent, byte[]>> encoder = new Capture<>(); resetCommunicatorExpectingSingleBroadcast(message, subject, encoder); final DefaultPortDescription desc = new DefaultPortDescription(P1, false); DeviceEvent event = deviceStore.updatePortStatus(PID, DID1, desc); assertEquals(PORT_UPDATED, event.type()); assertDevice(DID1, SW1, event.subject()); assertEquals(P1, event.port().number()); assertFalse("Port is disabled", event.port().isEnabled()); verify(clusterCommunicator); assertInternalPortStatusEvent(NID1, DID1, PID, desc, NO_ANNOTATION, message, subject, encoder); assertTrue(message.hasCaptured()); }
@Test public final void testUpdatePortStatusAncillary() throws IOException { putDeviceAncillary(DID1, SW1); putDevice(DID1, SW1); List<PortDescription> pds = Arrays.<PortDescription>asList(new DefaultPortDescription(P1, true, A1)); deviceStore.updatePorts(PID, DID1, pds); Capture<InternalPortStatusEvent> message = new Capture<>(); Capture<MessageSubject> subject = new Capture<>(); Capture<Function<InternalPortStatusEvent, byte[]>> encoder = new Capture<>(); // update port from primary resetCommunicatorExpectingSingleBroadcast(message, subject, encoder); final DefaultPortDescription desc1 = new DefaultPortDescription(P1, false, A1_2); DeviceEvent event = deviceStore.updatePortStatus(PID, DID1, desc1); assertEquals(PORT_UPDATED, event.type()); assertDevice(DID1, SW1, event.subject()); assertEquals(P1, event.port().number()); assertAnnotationsEquals(event.port().annotations(), A1, A1_2); assertFalse("Port is disabled", event.port().isEnabled()); verify(clusterCommunicator); assertInternalPortStatusEvent( NID1, DID1, PID, desc1, asList(A1, A1_2), message, subject, encoder); assertTrue(message.hasCaptured()); // update port from ancillary with no attributes resetCommunicatorExpectingNoBroadcast(message, subject, encoder); final DefaultPortDescription desc2 = new DefaultPortDescription(P1, true); DeviceEvent event2 = deviceStore.updatePortStatus(PIDA, DID1, desc2); assertNull("Ancillary is ignored if primary exists", event2); verify(clusterCommunicator); assertFalse(message.hasCaptured()); // but, Ancillary annotation update will be notified resetCommunicatorExpectingSingleBroadcast(message, subject, encoder); final DefaultPortDescription desc3 = new DefaultPortDescription(P1, true, A2); DeviceEvent event3 = deviceStore.updatePortStatus(PIDA, DID1, desc3); assertEquals(PORT_UPDATED, event3.type()); assertDevice(DID1, SW1, event3.subject()); assertEquals(P1, event3.port().number()); assertAnnotationsEquals(event3.port().annotations(), A1, A1_2, A2); assertFalse("Port is disabled", event3.port().isEnabled()); verify(clusterCommunicator); assertInternalPortStatusEvent(NID1, DID1, PIDA, desc3, asList(A2), message, subject, encoder); assertTrue(message.hasCaptured()); // port only reported from Ancillary will be notified as down resetCommunicatorExpectingSingleBroadcast(message, subject, encoder); final DefaultPortDescription desc4 = new DefaultPortDescription(P2, true); DeviceEvent event4 = deviceStore.updatePortStatus(PIDA, DID1, desc4); assertEquals(PORT_ADDED, event4.type()); assertDevice(DID1, SW1, event4.subject()); assertEquals(P2, event4.port().number()); assertAnnotationsEquals(event4.port().annotations()); assertFalse("Port is disabled if not given from primary provider", event4.port().isEnabled()); verify(clusterCommunicator); // TODO: verify broadcast message content assertInternalPortStatusEvent( NID1, DID1, PIDA, desc4, NO_ANNOTATION, message, subject, encoder); assertTrue(message.hasCaptured()); }
@Test public final void testUpdatePorts() { putDevice(DID1, SW1); List<PortDescription> pds = Arrays.<PortDescription>asList( new DefaultPortDescription(P1, true), new DefaultPortDescription(P2, true)); Capture<InternalDeviceEvent> message = new Capture<>(); Capture<MessageSubject> subject = new Capture<>(); Capture<Function<InternalDeviceEvent, byte[]>> encoder = new Capture<>(); resetCommunicatorExpectingSingleBroadcast(message, subject, encoder); List<DeviceEvent> events = deviceStore.updatePorts(PID, DID1, pds); verify(clusterCommunicator); // TODO: verify broadcast message assertTrue(message.hasCaptured()); Set<PortNumber> expectedPorts = Sets.newHashSet(P1, P2); for (DeviceEvent event : events) { assertEquals(PORT_ADDED, event.type()); assertDevice(DID1, SW1, event.subject()); assertTrue("PortNumber is one of expected", expectedPorts.remove(event.port().number())); assertTrue("Port is enabled", event.port().isEnabled()); } assertTrue("Event for all expectedport appeared", expectedPorts.isEmpty()); List<PortDescription> pds2 = Arrays.<PortDescription>asList( new DefaultPortDescription(P1, false), new DefaultPortDescription(P2, true), new DefaultPortDescription(P3, true)); resetCommunicatorExpectingSingleBroadcast(message, subject, encoder); events = deviceStore.updatePorts(PID, DID1, pds2); verify(clusterCommunicator); // TODO: verify broadcast message assertTrue(message.hasCaptured()); assertFalse("event should be triggered", events.isEmpty()); for (DeviceEvent event : events) { PortNumber num = event.port().number(); if (P1.equals(num)) { assertEquals(PORT_UPDATED, event.type()); assertDevice(DID1, SW1, event.subject()); assertFalse("Port is disabled", event.port().isEnabled()); } else if (P2.equals(num)) { fail("P2 event not expected."); } else if (P3.equals(num)) { assertEquals(PORT_ADDED, event.type()); assertDevice(DID1, SW1, event.subject()); assertTrue("Port is enabled", event.port().isEnabled()); } else { fail("Unknown port number encountered: " + num); } } List<PortDescription> pds3 = Arrays.<PortDescription>asList( new DefaultPortDescription(P1, false), new DefaultPortDescription(P2, true)); resetCommunicatorExpectingSingleBroadcast(message, subject, encoder); events = deviceStore.updatePorts(PID, DID1, pds3); verify(clusterCommunicator); // TODO: verify broadcast message assertTrue(message.hasCaptured()); assertFalse("event should be triggered", events.isEmpty()); for (DeviceEvent event : events) { PortNumber num = event.port().number(); if (P1.equals(num)) { fail("P1 event not expected."); } else if (P2.equals(num)) { fail("P2 event not expected."); } else if (P3.equals(num)) { assertEquals(PORT_REMOVED, event.type()); assertDevice(DID1, SW1, event.subject()); assertTrue("Port was enabled", event.port().isEnabled()); } else { fail("Unknown port number encountered: " + num); } } }