- final Router router = monitor.getRouter().get(0);
- assertEquals(ROUTER_ID, router.getRouterId());
- assertEquals(Status.Down, router.getStatus());
- assertTrue(router.getPeer().isEmpty());
-
- channel.writeAndFlush(TestUtil.createInitMsg("description", "name", "some info"));
- Thread.sleep(500);
- final Monitor monitorInit = getBmpData(monitorIId).get();
- assertEquals(1, monitorInit.getRouter().size());
- final Router routerInit = monitorInit.getRouter().get(0);
- assertEquals("some info;", routerInit.getInfo());
- assertEquals("name", routerInit.getName());
- assertEquals("description", routerInit.getDescription());
- assertEquals(ROUTER_ID, routerInit.getRouterId());
- assertTrue(routerInit.getPeer().isEmpty());
- assertEquals(Status.Up, routerInit.getStatus());
-
- channel.writeAndFlush(TestUtil.createPeerUpNotification(PEER1, true));
- Thread.sleep(500);
- final KeyedInstanceIdentifier<Router, RouterKey> routerIId = monitorIId.child(Router.class, new RouterKey(ROUTER_ID));
- final List<Peer> peers = getBmpData(routerIId).get().getPeer();
- assertEquals(1, peers.size());
- final Peer peer = peers.get(0);
- assertEquals(PeerType.Global, peer.getType());
- assertEquals(PEER_ID, peer.getPeerId());
- assertEquals(PEER1, peer.getBgpId());
- assertEquals(TestUtil.IPV4_ADDRESS_10, peer.getAddress().getIpv4Address());
- assertEquals(TestUtil.PEER_AS, peer.getAs());
- assertNull(peer.getDistinguisher());
- assertNull(peer.getStats());
-
- assertNotNull(peer.getPrePolicyRib());
- assertEquals(1, peer.getPrePolicyRib().getTables().size());
- final Tables prePolicyTable = peer.getPrePolicyRib().getTables().get(0);
- assertEquals(Ipv4AddressFamily.class, prePolicyTable.getAfi());
- assertEquals(UnicastSubsequentAddressFamily.class, prePolicyTable.getSafi());
- assertFalse(prePolicyTable.getAttributes().isUptodate());
- assertNotNull(prePolicyTable.getRoutes());
-
- assertNotNull(peer.getPostPolicyRib());
- assertEquals(1, peer.getPostPolicyRib().getTables().size());
- final Tables postPolicyTable = peer.getPrePolicyRib().getTables().get(0);
- assertEquals(Ipv4AddressFamily.class, postPolicyTable.getAfi());
- assertEquals(UnicastSubsequentAddressFamily.class, postPolicyTable.getSafi());
- assertFalse(postPolicyTable.getAttributes().isUptodate());
- assertNotNull(postPolicyTable.getRoutes());
-
- assertNotNull(peer.getPeerSession());
- final PeerSession peerSession = peer.getPeerSession();
- assertEquals(TestUtil.IPV4_ADDRESS_10, peerSession.getLocalAddress().getIpv4Address());
- assertEquals(TestUtil.PEER_LOCAL_PORT, peerSession.getLocalPort());
- assertEquals(TestUtil.PEER_REMOTE_PORT, peerSession.getRemotePort());
- assertEquals(Status.Up, peerSession.getStatus());
+ return monitor;
+ });
+
+ final Channel channel4 = testMonitoringStation(REMOTE_ROUTER_ADDRESS_1);
+ readData(getDataBroker(), MONITOR_IID, monitor -> {
+ assertEquals(2, monitor.getRouter().size());
+ return monitor;
+ });
+
+ // close all channel altogether
+ waitFutureSuccess(channel2.close());
+ Thread.sleep(100);
+
+ // sleep for a while to avoid intermittent InMemoryDataTree modification conflict
+ waitFutureSuccess(channel4.close());
+
+ readData(getDataBroker(), MONITOR_IID, monitor -> {
+ assertEquals(0, monitor.getRouter().size());
+ return monitor;
+ });
+ }
+
+ private void waitWriteAndFlushSuccess(final ChannelFuture channelFuture) throws InterruptedException {
+ waitFutureSuccess(channelFuture);
+ }
+
+ private Channel testMonitoringStation(final String remoteRouterIpAddr) throws InterruptedException {
+ final Channel channel = connectTestClient(remoteRouterIpAddr, this.msgRegistry);
+ final RouterId routerId = getRouterId(remoteRouterIpAddr);
+ try {
+ readData(getDataBroker(), MONITOR_IID, monitor -> {
+ assertFalse(monitor.getRouter().isEmpty());
+ // now find the current router instance
+ Router router = null;
+ for (final Router r : monitor.getRouter()) {
+ if (routerId.equals(r.getRouterId())) {
+ router = r;
+ break;
+ }
+ }
+ assertNotNull(router);
+ assertEquals(Status.Down, router.getStatus());
+ assertTrue(router.getPeer().isEmpty());
+ return router;
+ });
+
+ waitWriteAndFlushSuccess(channel.writeAndFlush(TestUtil.createInitMsg("description", "name", "some info")));
+
+ readData(getDataBroker(), MONITOR_IID, monitor -> {
+ assertFalse(monitor.getRouter().isEmpty());
+ Router retRouter = null;
+ for (final Router r : monitor.getRouter()) {
+ if (routerId.equals(r.getRouterId())) {
+ retRouter = r;
+ break;
+ }
+ }
+
+ assertEquals("some info;", retRouter.getInfo());
+ assertEquals("name", retRouter.getName());
+ assertEquals("description", retRouter.getDescription());
+ assertEquals(routerId, retRouter.getRouterId());
+ assertTrue(retRouter.getPeer().isEmpty());
+ assertEquals(Status.Up, retRouter.getStatus());
+ return retRouter;
+ });
+
+ waitWriteAndFlushSuccess(channel.writeAndFlush(TestUtil.createPeerUpNotification(PEER1, true)));
+ final KeyedInstanceIdentifier<Router, RouterKey> routerIId = MONITOR_IID.child(Router.class, new RouterKey(routerId));
+
+ readData(getDataBroker(), routerIId, router -> {
+ final List<Peer> peers = router.getPeer();
+ assertEquals(1, peers.size());
+ final Peer peer = peers.get(0);
+ assertEquals(PeerType.Global, peer.getType());
+ assertEquals(PEER_ID, peer.getPeerId());
+ assertEquals(PEER1, peer.getBgpId());
+ assertEquals(TestUtil.IPV4_ADDRESS_10, peer.getAddress().getIpv4Address());
+ assertEquals(TestUtil.PEER_AS, peer.getAs());
+ assertNull(peer.getDistinguisher());
+ assertNull(peer.getStats());
+
+ assertNotNull(peer.getPrePolicyRib());
+ assertEquals(1, peer.getPrePolicyRib().getTables().size());
+ final Tables prePolicyTable = peer.getPrePolicyRib().getTables().get(0);
+ assertEquals(Ipv4AddressFamily.class, prePolicyTable.getAfi());
+ assertEquals(UnicastSubsequentAddressFamily.class, prePolicyTable.getSafi());
+ assertFalse(prePolicyTable.getAttributes().isUptodate());
+ assertNotNull(prePolicyTable.getRoutes());
+
+ assertNotNull(peer.getPostPolicyRib());
+ assertEquals(1, peer.getPostPolicyRib().getTables().size());
+ final Tables postPolicyTable = peer.getPrePolicyRib().getTables().get(0);
+ assertEquals(Ipv4AddressFamily.class, postPolicyTable.getAfi());
+ assertEquals(UnicastSubsequentAddressFamily.class, postPolicyTable.getSafi());
+ assertFalse(postPolicyTable.getAttributes().isUptodate());
+ assertNotNull(postPolicyTable.getRoutes());
+
+ assertNotNull(peer.getPeerSession());
+ final PeerSession peerSession = peer.getPeerSession();
+ assertEquals(TestUtil.IPV4_ADDRESS_10, peerSession.getLocalAddress().getIpv4Address());
+ assertEquals(TestUtil.PEER_LOCAL_PORT, peerSession.getLocalPort());
+ assertEquals(TestUtil.PEER_REMOTE_PORT, peerSession.getRemotePort());
+ assertEquals(Status.Up, peerSession.getStatus());
+ assertNotNull(peerSession.getReceivedOpen());
+ assertNotNull(peerSession.getSentOpen());
+ return router;
+ });
+