示例#1
0
  /** {@inheritDoc} */
  public DiscoveryLink getDiscoveryLink(final String pkgName) {
    final Package pkg = m_linkdConfig.getPackage(pkgName);

    if (pkg == null) return null;

    final DiscoveryLink discoveryLink = new DiscoveryLink();
    discoveryLink.setLinkd(this);
    discoveryLink.setPackageName(pkg.getName());
    discoveryLink.setInitialSleepTime(m_linkdConfig.getInitialSleepTime());

    discoveryLink.setSnmpPollInterval(
        pkg.hasSnmp_poll_interval()
            ? pkg.getSnmp_poll_interval()
            : m_linkdConfig.getSnmpPollInterval());
    discoveryLink.setDiscoveryInterval(
        pkg.hasDiscovery_link_interval()
            ? pkg.getDiscovery_link_interval()
            : m_linkdConfig.getDiscoveryLinkInterval());
    discoveryLink.setDiscoveryUsingBridge(
        pkg.hasUseBridgeDiscovery()
            ? pkg.getUseBridgeDiscovery()
            : m_linkdConfig.useBridgeDiscovery());
    discoveryLink.setDiscoveryUsingCdp(
        pkg.hasUseCdpDiscovery() ? pkg.getUseCdpDiscovery() : m_linkdConfig.useCdpDiscovery());
    discoveryLink.setDiscoveryUsingRoutes(
        pkg.hasUseIpRouteDiscovery()
            ? pkg.getUseIpRouteDiscovery()
            : m_linkdConfig.useIpRouteDiscovery());
    discoveryLink.setEnableDownloadDiscovery(
        pkg.hasEnableDiscoveryDownload()
            ? pkg.getEnableDiscoveryDownload()
            : m_linkdConfig.enableDiscoveryDownload());
    discoveryLink.setForceIpRouteDiscoveryOnEtherNet(
        pkg.hasForceIpRouteDiscoveryOnEthernet()
            ? pkg.getForceIpRouteDiscoveryOnEthernet()
            : m_linkdConfig.forceIpRouteDiscoveryOnEthernet());

    return discoveryLink;
  }
示例#2
0
  @Test
  public void testDefaultConfiguration2()
      throws MarshalException, ValidationException, IOException {

    assertEquals(5, m_linkdConfig.getThreads());
    assertEquals(3600000, m_linkdConfig.getInitialSleepTime());
    assertEquals(18000000, m_linkdConfig.getSnmpPollInterval());
    assertEquals(1800000, m_linkdConfig.getDiscoveryLinkInterval());

    assertEquals(false, m_linkdConfig.isAutoDiscoveryEnabled());
    assertEquals(true, m_linkdConfig.isVlanDiscoveryEnabled());
    assertEquals(true, m_linkdConfig.useCdpDiscovery());
    assertEquals(true, m_linkdConfig.useIpRouteDiscovery());
    assertEquals(true, m_linkdConfig.useBridgeDiscovery());
    assertEquals(true, m_linkdConfig.useOspfDiscovery());
    assertEquals(true, m_linkdConfig.useLldpDiscovery());
    assertEquals(true, m_linkdConfig.useIsIsDiscovery());

    assertEquals(true, m_linkdConfig.saveRouteTable());
    assertEquals(true, m_linkdConfig.saveStpNodeTable());
    assertEquals(true, m_linkdConfig.saveStpInterfaceTable());
    assertEquals(false, m_linkdConfig.forceIpRouteDiscoveryOnEthernet());

    Enumeration<org.opennms.netmgt.config.linkd.Package> iter = m_linkdConfig.enumeratePackage();
    org.opennms.netmgt.config.linkd.Package example1 = iter.nextElement();

    assertEquals(false, iter.hasMoreElements());
    assertEquals("example1", example1.getName());
    assertEquals(false, example1.hasAutoDiscovery());
    assertEquals(false, example1.hasDiscovery_link_interval());
    assertEquals(false, example1.hasEnableVlanDiscovery());
    assertEquals(false, example1.hasForceIpRouteDiscoveryOnEthernet());
    assertEquals(false, example1.hasSaveRouteTable());
    assertEquals(false, example1.hasSaveStpInterfaceTable());
    assertEquals(false, example1.hasSaveStpNodeTable());
    assertEquals(false, example1.hasSnmp_poll_interval());
    assertEquals(false, example1.hasUseBridgeDiscovery());
    assertEquals(false, example1.hasUseCdpDiscovery());
    assertEquals(false, example1.hasUseIpRouteDiscovery());
    assertEquals(false, example1.hasUseIsisDiscovery());

    assertEquals(
        false, m_linkdConfig.isInterfaceInPackage(InetAddressUtils.addr(CISCO_C870_IP), example1));

    m_nodeDao.save(builder.getCiscoC870());
    m_nodeDao.save(builder.getCiscoWsC2948());
    m_nodeDao.flush();

    m_linkdConfig.update();

    assertEquals(
        true, m_linkdConfig.isInterfaceInPackage(InetAddressUtils.addr(CISCO_C870_IP), example1));
    assertEquals(
        true,
        m_linkdConfig.isInterfaceInPackage(InetAddressUtils.addr(CISCO_WS_C2948_IP), example1));

    final OnmsNode ciscorouter = m_nodeDao.findByForeignId("linkd", CISCO_C870_NAME);
    final OnmsNode ciscows = m_nodeDao.findByForeignId("linkd", CISCO_WS_C2948_NAME);
    assertTrue(m_linkd.scheduleNodeCollection(ciscorouter.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(ciscows.getId()));

    LinkableNode lciscorouter =
        m_linkd.removeNode("example1", InetAddressUtils.addr(CISCO_C870_IP));
    assertNotNull(lciscorouter);
    assertEquals(ciscorouter.getId().intValue(), lciscorouter.getNodeId());

    assertEquals(1, m_linkd.getActivePackages().size());
  }
  /*
   *  The
   *  MUMBAI:port ge 0/1/3:ip 192.168.5.5   ------> CHENNAI:port ge 4/0/2: ip 192.168.5.6
   *  MUMBAI:port ge 0/1/2:ip 192.168.5.9   ------> DELHI:port ge 1/0/2: ip 192.168.5.10
   *  MUMBAI:port ge 0/0/1:ip 192.168.5.13   ------> BANGALORE:port ge 0/0/0: ip 192.168.5.14
   *  DELHI:port ge 1/0/1:ip 192.168.1.5     ------> BANGALORE:port ge 0/0/1: ip 192.168.1.6
   *  DELHI:port ge 1/1/6:ip 172.16.7.1     ------> Space-EX-SW1: port 0/0/6: ip 172.16.7.1 ???? same ip address
   *  CHENNAI:port ge 4/0/3:ip 192.168.1.1  ------> DELHI: port ge 1/1/0: ip 192.168.1.2
   *
   *  a lot of duplicated ip this is a clear proof that linkd is not able to
   *  gather topology of this lab using the useBridgeTopology and ip routes.
   */
  @Test
  @JUnitSnmpAgents(
      value = {
        @JUnitSnmpAgent(
            host = MUMBAI_IP,
            port = 161,
            resource = "classpath:linkd/nms10205/" + MUMBAI_NAME + "_" + MUMBAI_IP + ".txt"),
        @JUnitSnmpAgent(
            host = CHENNAI_IP,
            port = 161,
            resource = "classpath:linkd/nms10205/" + CHENNAI_NAME + "_" + CHENNAI_IP + ".txt"),
        @JUnitSnmpAgent(
            host = DELHI_IP,
            port = 161,
            resource = "classpath:linkd/nms10205/" + DELHI_NAME + "_" + DELHI_IP + ".txt"),
        @JUnitSnmpAgent(
            host = BANGALORE_IP,
            port = 161,
            resource = "classpath:linkd/nms10205/" + BANGALORE_NAME + "_" + BANGALORE_IP + ".txt"),
        @JUnitSnmpAgent(
            host = BAGMANE_IP,
            port = 161,
            resource = "classpath:linkd/nms10205/" + BAGMANE_NAME + "_" + BAGMANE_IP + ".txt"),
        @JUnitSnmpAgent(
            host = MYSORE_IP,
            port = 161,
            resource = "classpath:linkd/nms10205/" + MYSORE_NAME + "_" + MYSORE_IP + ".txt"),
        @JUnitSnmpAgent(
            host = SPACE_EX_SW1_IP,
            port = 161,
            resource =
                "classpath:linkd/nms10205/" + SPACE_EX_SW1_NAME + "_" + SPACE_EX_SW1_IP + ".txt"),
        @JUnitSnmpAgent(
            host = SPACE_EX_SW2_IP,
            port = 161,
            resource =
                "classpath:linkd/nms10205/" + SPACE_EX_SW2_NAME + "_" + SPACE_EX_SW2_IP + ".txt"),
        @JUnitSnmpAgent(
            host = J6350_41_IP,
            port = 161,
            resource = "classpath:linkd/nms10205/" + J6350_41_NAME + "_" + J6350_41_IP + ".txt"),
        @JUnitSnmpAgent(
            host = J6350_42_IP,
            port = 161,
            resource = "classpath:linkd/nms10205/" + "J6350-42_" + J6350_42_IP + ".txt"),
        @JUnitSnmpAgent(
            host = SRX_100_IP,
            port = 161,
            resource = "classpath:linkd/nms10205/" + "SRX-100_" + SRX_100_IP + ".txt"),
        @JUnitSnmpAgent(
            host = SSG550_IP,
            port = 161,
            resource = "classpath:linkd/nms10205/" + SSG550_NAME + "_" + SSG550_IP + ".txt")
      })
  public void testNetwork10205Links() throws Exception {
    m_nodeDao.save(getMumbai());
    m_nodeDao.save(getChennai());
    m_nodeDao.save(getDelhi());
    m_nodeDao.save(getBangalore());
    m_nodeDao.save(getBagmane());
    m_nodeDao.save(getMysore());
    m_nodeDao.save(getSpaceExSw1());
    m_nodeDao.save(getSpaceExSw2());
    m_nodeDao.save(getJ635041());
    m_nodeDao.save(getJ635042());
    m_nodeDao.save(getSRX100());
    m_nodeDao.save(getSGG550());
    m_nodeDao.flush();

    Package example1 = m_linkdConfig.getPackage("example1");
    assertEquals(false, example1.hasForceIpRouteDiscoveryOnEthernet());
    example1.setForceIpRouteDiscoveryOnEthernet(true);
    example1.setUseCdpDiscovery(false);

    final OnmsNode mumbai = m_nodeDao.findByForeignId("linkd", MUMBAI_NAME);
    final OnmsNode chennai = m_nodeDao.findByForeignId("linkd", CHENNAI_NAME);
    final OnmsNode delhi = m_nodeDao.findByForeignId("linkd", DELHI_NAME);
    final OnmsNode bangalore = m_nodeDao.findByForeignId("linkd", BANGALORE_NAME);
    final OnmsNode bagmane = m_nodeDao.findByForeignId("linkd", BAGMANE_NAME);
    final OnmsNode mysore = m_nodeDao.findByForeignId("linkd", MYSORE_NAME);
    final OnmsNode spaceexsw1 = m_nodeDao.findByForeignId("linkd", SPACE_EX_SW1_NAME);
    final OnmsNode spaceexsw2 = m_nodeDao.findByForeignId("linkd", SPACE_EX_SW2_NAME);
    final OnmsNode j635041 = m_nodeDao.findByForeignId("linkd", J6350_41_NAME);
    final OnmsNode j635042 = m_nodeDao.findByForeignId("linkd", J6350_42_NAME);
    final OnmsNode srx100 = m_nodeDao.findByForeignId("linkd", SRX_100_NAME);
    final OnmsNode ssg550 = m_nodeDao.findByForeignId("linkd", SSG550_NAME);

    assertTrue(m_linkd.scheduleNodeCollection(chennai.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(mumbai.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(delhi.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(bangalore.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(bagmane.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(mysore.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(spaceexsw1.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(spaceexsw2.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(j635041.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(j635042.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(srx100.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(ssg550.getId()));

    assertTrue(m_linkd.runSingleSnmpCollection(mumbai.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(chennai.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(delhi.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(bangalore.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(bagmane.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(mysore.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(spaceexsw1.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(spaceexsw2.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(j635041.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(j635042.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(srx100.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(ssg550.getId()));

    assertEquals(0, m_dataLinkInterfaceDao.countAll());

    assertTrue(m_linkd.runSingleLinkDiscovery("example1"));

    final List<DataLinkInterface> links = m_dataLinkInterfaceDao.findAll();

    assertEquals(9, links.size());

    // Linkd is able to find partially the topology using the next hop router
    // among the core nodes:
    // mumbai, chennai, delhi, mysore,bangalore and bagmane
    // the link between chennai and delhi is lost
    // the link between chennai and bagmane is lost
    // the link between bagmane and delhi is lost
    // I checked the walks and no route info
    // is there for discovering the link.
    // I have to guess that linkd is working as expected

    // The bridge and RSTP topology information are
    // unusuful, the devices supporting RSTP
    // have themselves as designated bridge.

    // Other links are lost...
    // no routing entry and no bridge
    // forwarding

    int start = getStartPoint(links);
    for (final DataLinkInterface datalinkinterface : links) {
      int id = datalinkinterface.getId().intValue();
      if (start == id) {
        checkLink(delhi, mumbai, 28503, 519, datalinkinterface);
      } else if (start + 1 == id) {
        checkLink(bangalore, mumbai, 2401, 507, datalinkinterface);
      } else if (start + 2 == id) {
        checkLink(bagmane, mumbai, 534, 977, datalinkinterface);
      } else if (start + 3 == id) {
        checkLink(mysore, mumbai, 508, 978, datalinkinterface);
      } else if (start + 4 == id) {
        checkLink(chennai, mumbai, 528, 520, datalinkinterface);
      } else if (start + 5 == id) {
        checkLink(mysore, chennai, 505, 517, datalinkinterface);
      } else if (start + 6 == id) {
        checkLink(bangalore, delhi, 2397, 3674, datalinkinterface);
      } else if (start + 7 == id) {
        checkLink(bagmane, bangalore, 1732, 2396, datalinkinterface);
      } else if (start + 8 == id) {
        checkLink(mysore, bagmane, 520, 654, datalinkinterface);
      } else {
        checkLink(mumbai, mumbai, -1, -1, datalinkinterface);
      }
    }
  }
示例#4
0
  /*
   * Penrose: baseBridgeAddress = 80711f8fafd0
   * Penrose: stpDesignatedRoot = 001f12373dc0
   * Penrose: stpport/designatedbridge/designatedport 62/8000 001f12373dc0/8201
   *          -----To Riovista - Root Spanning tree: ifindex 515 ---ge-1/2/1
   * Penrose: stpport/designatedbridge/designatedport 483/8000 0022830957d0/81e3
   *          -----this is a backbone port to a higher bridge: ifindex 2693 -- ae0
   *          ---- aggregated port almost sure the link to Delaware
   *
   * Delaware: baseBridgeAddress = 0022830957d0
   * Delaware: stpDesignatedRoot = 001f12373dc0
   * Delaware: stpport/designatedbridge/designatedport 21/8000 001f12373dc0/822f
   *          -----To Riovista - Root Spanning tree: ifindex 540 -- ge-0/2/0
   * Delaware: stpport/designatedbridge/designatedport 483/8000 0022830957d0/81e3
   *          -----this is a backbone port to a lower bridge: ifindex 658 ---ae0
   *          -----aggregated port almost sure the link to Penrose
   *
   * Riovista: baseBridgeAddress = 001f12373dc0
   * Riovista: stpDesignatedRoot = 001f12373dc0
   * Riovista: stpport/designatedbridge/designatedport 513/8000 001f12373dc0/8201
   *          -----To Penrose ifindex 584 ---ge-0/0/0.0
   * Riovista: stpport/designatedbridge/designatedport 559/8000001f12373dc0/822f
   *          -----To Delaware ifindex 503 ---ge-0/0/46.0
   *
   *
   * Phoenix: baseBridgeAddress = 80711fc414d0
   * Phoenix: Spanning Tree is disabled
   *
   * Austin: baseBridgeAddress = 80711fc413d0
   * Austin: Spanning Tree is disabled
   *
   * Sanjose: baseBridgeAddress = 002283d857d0
   * Sanjose: Spanning Tree is disabled
   *
   * There are two links found between Penrose and Delaware,
   * one on ae0 using stp and another over xe-1/0/0.0 using the ip route next hop strategy
   *
   * Also the link between Austin and Delaware is not found because
   * no route entry is found so no way to find it.
   * This prove how weak is the way in which is set up linkd.
   * This test passes because i've verified that this is what the linkd can discover using it's values
   *
   * root@sanjose-mx240# run show lldp neighbors
   * Local Interface Chassis Id        Port info     System Name
   * ge-1/0/1        80:71:1f:c4:13:c0  ge-1/0/3     Austin
   * ge-1/0/0        80:71:1f:c4:14:c0  ge-1/0/3     phoenix-mx80
   *
   * root@phoenix-mx80# run show lldp neighbors
   * Local Interface Chassis Id        Port info     System Name
   * ge-1/0/3        00:22:83:d8:57:c0  ge-1/0/0     sanjose-mx240
   * xe-0/0/1        80:71:1f:8f:af:c0  xe-1/0/1     penrose-mx480
   * xe-0/0/0        80:71:1f:c4:13:c0  <ToPHX-xe000> Austin
   * root@Austin# run show lldp neighbors
   * Local Interface Chassis Id        Port info     System Name
   * xe-0/0/1        00:22:83:09:57:c0  xe-1/0/1     delaware
   * ge-1/0/3        00:22:83:d8:57:c0  ge-1/0/1     sanjose-mx240
   * xe-0/0/0        80:71:1f:c4:14:c0  <ToAUS-xe000> phoenix-mx80
   *
   * root@penrose-mx480# run show lldp neighbors
   * Local Interface Chassis Id        Port info     System Name
   * ge-1/2/1        00:1f:12:37:3d:c0  ge-0/0/0.0   Riovista-ce
   * ge-1/3/1        00:22:83:09:57:c0  ge-0/0/6     delaware
   * xe-1/0/0        00:22:83:09:57:c0  <To_Penrose> delaware
   * xe-1/0/1        80:71:1f:c4:14:c0  xe-0/0/1     phoenix-mx80
   *
   * root@delaware# run show lldp neighbors
   * Local Interface Chassis Id        Port info     System Name
   * ge-0/2/0        00:1f:12:37:3d:c0  ge-0/0/46.0  Riovista-ce
   * xe-1/0/0        80:71:1f:8f:af:c0  <To_Delaware> penrose-mx480
   * ge-0/0/6        80:71:1f:8f:af:c0  ge-1/3/1     penrose-mx480
   * xe-1/0/1        80:71:1f:c4:13:c0  xe-0/0/1     Austin
   *
   * root@Riovista-ce# run show lldp neighbors
   * Local Interface    Parent Interface    Chassis Id          Port info          System Name
   * ge-0/0/46.0        -                   00:22:83:09:57:c0   ge-0/2/0           delaware
   * ge-0/0/0.0         -                   80:71:1f:8f:af:c0   ge-1/2/1           penrose-mx480
   *
   */
  @Test
  @JUnitSnmpAgents(
      value = {
        @JUnitSnmpAgent(host = PENROSE_IP, port = 161, resource = PENROSE_SNMP_RESOURCE),
        @JUnitSnmpAgent(host = DELAWARE_IP, port = 161, resource = DELAWARE_SNMP_RESOURCE),
        @JUnitSnmpAgent(host = PHOENIX_IP, port = 161, resource = PHOENIX_SNMP_RESOURCE),
        @JUnitSnmpAgent(host = AUSTIN_IP, port = 161, resource = AUSTIN_SNMP_RESOURCE),
        @JUnitSnmpAgent(host = SANJOSE_IP, port = 161, resource = SANJOSE_SNMP_RESOURCE),
        @JUnitSnmpAgent(host = RIOVISTA_IP, port = 161, resource = RIOVISTA_SNMP_RESOURCE)
      })
  public void testNetwork1055Links() throws Exception {
    m_nodeDao.save(builder.getPenrose());
    m_nodeDao.save(builder.getDelaware());
    m_nodeDao.save(builder.getPhoenix());
    m_nodeDao.save(builder.getAustin());
    m_nodeDao.save(builder.getSanjose());
    m_nodeDao.save(builder.getRiovista());
    m_nodeDao.flush();

    HibernateEventWriter queryManager = (HibernateEventWriter) m_linkd.getQueryManager();
    /*
     *         DELAWARE_IF_IFNAME_MAP.put(517, "ge-0/0/1");
     *         DELAWARE_IF_IFALIAS_MAP.put(517, "test");
     */
    assertEquals(
        517, queryManager.getFromSysnameIfAlias(DELAWARE_NAME, "test").getIfIndex().intValue());
    assertEquals(
        517, queryManager.getFromSysnameIfName(DELAWARE_NAME, "ge-0/0/1").getIfIndex().intValue());

    /*
     * DELAWARE_IF_MAC_MAP.put(585, "0022830951f5");
     */
    assertEquals(
        585,
        queryManager
            .getFromSysnameMacAddress(DELAWARE_NAME, "0022830951f5")
            .getIfIndex()
            .intValue());
    /*
     * DELAWARE_IP_IF_MAP.put(InetAddressUtils.addr("10.155.69.17"), 13);
     */
    assertEquals(
        13,
        queryManager
            .getFromSysnameIpAddress(DELAWARE_NAME, InetAddressUtils.addr("10.155.69.17"))
            .getIfIndex()
            .intValue());

    /*
     * DELAWARE_IF_IFALIAS_MAP.put(574, "<To_Penrose>");
     */
    assertEquals(
        574,
        queryManager.getFromSysnameIfAlias(DELAWARE_NAME, "<To_Penrose>").getIfIndex().intValue());

    Package example1 = m_linkdConfig.getPackage("example1");
    assertEquals(false, example1.hasForceIpRouteDiscoveryOnEthernet());
    example1.setForceIpRouteDiscoveryOnEthernet(true);

    final OnmsNode penrose = m_nodeDao.findByForeignId("linkd", PENROSE_NAME);
    final OnmsNode delaware = m_nodeDao.findByForeignId("linkd", DELAWARE_NAME);
    final OnmsNode phoenix = m_nodeDao.findByForeignId("linkd", PHOENIX_NAME);
    final OnmsNode austin = m_nodeDao.findByForeignId("linkd", AUSTIN_NAME);
    final OnmsNode sanjose = m_nodeDao.findByForeignId("linkd", SANJOSE_NAME);
    final OnmsNode riovista = m_nodeDao.findByForeignId("linkd", RIOVISTA_NAME);

    assertTrue(m_linkd.scheduleNodeCollection(penrose.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(delaware.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(phoenix.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(austin.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(sanjose.getId()));
    assertTrue(m_linkd.scheduleNodeCollection(riovista.getId()));

    assertTrue(m_linkd.runSingleSnmpCollection(penrose.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(delaware.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(phoenix.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(austin.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(sanjose.getId()));
    assertTrue(m_linkd.runSingleSnmpCollection(riovista.getId()));

    assertEquals(0, m_dataLinkInterfaceDao.countAll());

    assertTrue(m_linkd.runSingleLinkDiscovery("example1"));

    assertEquals(22, m_dataLinkInterfaceDao.countAll());
    final List<DataLinkInterface> links = m_dataLinkInterfaceDao.findAll();

    final int start = getStartPoint(links);
    for (final DataLinkInterface datalinkinterface : links) {
      Integer linkid = datalinkinterface.getId();

      if (linkid == start) {
        checkLink(penrose, phoenix, 644, 564, datalinkinterface);
        assertEquals(DiscoveryProtocol.iproute, datalinkinterface.getProtocol());
      } else if (linkid == start + 1) {
        checkLink(penrose, delaware, 535, 598, datalinkinterface);
        assertEquals(DiscoveryProtocol.iproute, datalinkinterface.getProtocol());
      } else if (linkid == start + 2) {
        checkLink(phoenix, austin, 565, 554, datalinkinterface);
        assertEquals(DiscoveryProtocol.iproute, datalinkinterface.getProtocol());
      } else if (linkid == start + 3) {
        checkLink(sanjose, phoenix, 564, 566, datalinkinterface);
        assertEquals(DiscoveryProtocol.iproute, datalinkinterface.getProtocol());
      } else if (linkid == start + 4) {
        checkLink(sanjose, austin, 8562, 586, datalinkinterface);
        assertEquals(DiscoveryProtocol.iproute, datalinkinterface.getProtocol());
      } else if (linkid == start + 5) {
        checkLink(delaware, penrose, 598, 535, datalinkinterface);
        assertEquals(DiscoveryProtocol.ospf, datalinkinterface.getProtocol());
      } else if (linkid == start + 6) {
        checkLink(phoenix, penrose, 564, 644, datalinkinterface);
        assertEquals(DiscoveryProtocol.ospf, datalinkinterface.getProtocol());
      } else if (linkid == start + 7) {
        checkLink(austin, phoenix, 554, 565, datalinkinterface);
        assertEquals(DiscoveryProtocol.ospf, datalinkinterface.getProtocol());
      } else if (linkid == start + 8) {
        checkLink(sanjose, phoenix, 564, 566, datalinkinterface);
        assertEquals(DiscoveryProtocol.ospf, datalinkinterface.getProtocol());
      } else if (linkid == start + 9) {
        checkLink(sanjose, austin, 8562, 586, datalinkinterface);
        assertEquals(DiscoveryProtocol.ospf, datalinkinterface.getProtocol());
      } else if (linkid == start + 10) {
        checkLink(penrose, riovista, 515, 584, datalinkinterface);
        assertEquals(DiscoveryProtocol.bridge, datalinkinterface.getProtocol());
      } else if (linkid == start + 11) {
        checkLink(penrose, delaware, 2693, 658, datalinkinterface);
        assertEquals(DiscoveryProtocol.bridge, datalinkinterface.getProtocol());
      } else if (linkid == start + 12) {
        checkLink(delaware, riovista, 540, 503, datalinkinterface);
        assertEquals(DiscoveryProtocol.bridge, datalinkinterface.getProtocol());
      } else if (linkid == start + 13) {
        // penrose xe-1/0/0 -> delaware xe-1/0/0 --lldp
        checkLink(delaware, penrose, 574, 510, datalinkinterface);
        assertEquals(DiscoveryProtocol.lldp, datalinkinterface.getProtocol());
      } else if (linkid == start + 14) {
        // penrose xe-1/0/1 -> phoenix xe-0/0/1  --lldp
        checkLink(phoenix, penrose, 509, 511, datalinkinterface);
        assertEquals(DiscoveryProtocol.lldp, datalinkinterface.getProtocol());
      } else if (linkid == start + 15) {
        // penrose ge-1/3/1 -> delaware ge-0/0/6 --lldp
        checkLink(delaware, penrose, 522, 525, datalinkinterface);
        assertEquals(DiscoveryProtocol.lldp, datalinkinterface.getProtocol());
      } else if (linkid == start + 16) {
        // penrose ge-1/2/1 -> riovista ge-0/0/0.0  --lldp
        // this link is also discovered using the bridge strategy
        checkLink(riovista, penrose, 584, 515, datalinkinterface);
        assertEquals(DiscoveryProtocol.lldp, datalinkinterface.getProtocol());
      } else if (linkid == start + 17) {
        // delaware xe-1/0/1 -> austin xe-0/0/1  --lldp
        checkLink(austin, delaware, 509, 575, datalinkinterface);
        assertEquals(DiscoveryProtocol.lldp, datalinkinterface.getProtocol());
      } else if (linkid == start + 18) {
        // delaware ge-0/2/0 -> riovista ge-0/0/46.0  --lldp
        // this link is also discovered using the bridge strategy
        checkLink(riovista, delaware, 503, 540, datalinkinterface);
        assertEquals(DiscoveryProtocol.lldp, datalinkinterface.getProtocol());
      } else if (linkid == start + 19) {
        // phoenix ge-1/0/3 -> sanjose ge-1/0/0  --lldp
        checkLink(sanjose, phoenix, 516, 515, datalinkinterface);
        assertEquals(DiscoveryProtocol.lldp, datalinkinterface.getProtocol());
      } else if (linkid == start + 20) {
        // phoenix ge-0/2/0 -> austin ge-0/0/46.0  --lldp
        checkLink(austin, phoenix, 508, 508, datalinkinterface);
        assertEquals(DiscoveryProtocol.lldp, datalinkinterface.getProtocol());
      } else if (linkid == start + 21) {
        // austin ge-1/0/3 -> sanjose ge-1/0/1  --lldp
        checkLink(sanjose, austin, 517, 515, datalinkinterface);
        assertEquals(DiscoveryProtocol.lldp, datalinkinterface.getProtocol());
      } else {
        checkLink(penrose, penrose, -1, -1, datalinkinterface);
      }
    }
  }