예제 #1
0
  public final void testEquals() {
    TopologyMap graph1 = new TopologyMap(NODE_1);
    TopologyMap graph2 = new TopologyMap(NODE_2);

    assertFalse(graph1.equals(graph2));

    graph1.addNode(NODE_2);

    assertFalse(graph1.equals(graph2));

    graph2.addNode(NODE_1);

    assertTrue(graph1.equals(graph2));

    graph1.addLink(NODE_1, NODE_2, CONNECTION_ID_1);

    assertFalse(graph1.equals(graph2));

    graph2.addLink(NODE_1, NODE_2, CONNECTION_ID_1);

    assertTrue(graph1.equals(graph2));
  }
예제 #2
0
  /** Test graph updates with different {@link LinkStateAdvertisement}s. */
  public final void testLsaIntegration2() {
    TopologyMap graph1 = new TopologyMap(NODE_1);
    TopologyMap graph2 = new TopologyMap(NODE_3);

    graph1.addLink(NODE_1, NODE_3, CONNECTION_ID_1);
    graph2.addLink(NODE_3, NODE_1, CONNECTION_ID_1);

    assertFalse(graph1.equals(graph2));

    graph1.update(graph2.generateNewLocalLSA());
    graph2.update(graph1.generateNewLocalLSA());

    assertEquals(graph2.generateNewLocalLSA().getGraphHashCode(), graph2.hashCode());

    assertEquals(graph1, graph2);
  }
예제 #3
0
  /** @throws InterruptedException on interruption */
  public final void testLinkStateUpdate() throws InterruptedException {
    TopologyMap graph1 = new TopologyMap(NODE_1);
    // cause timestamp-based sequence numbers to be different
    Thread.sleep(SHORT_TIMESTAMP_CHANGING_DELAY);
    TopologyMap graph2 = new TopologyMap(NODE_2);
    // crude approach to ensure different timestamps; it would be better to inject an artificial
    // time source for testing -- misc_ro, June 2013
    while (graph2.getSequenceNumberOfNode(NODE_2) == graph1.getSequenceNumberOfNode(NODE_1)) {
      Thread.sleep(SHORT_TIMESTAMP_CHANGING_DELAY);
      graph2 = new TopologyMap(NODE_2);
    }

    // get the highest current sequence number (assuming node 3 was assigned the highest one)
    long node1OriginalSeqNo = graph1.getSequenceNumberOfNode(NODE_1);
    long node2OriginalSeqNo = graph2.getSequenceNumberOfNode(NODE_2);

    assertFalse(node1OriginalSeqNo == node2OriginalSeqNo);
    assertFalse(graph1.equals(graph2));

    LinkStateAdvertisement lsa = graph1.generateNewLocalLSA();

    // LSA generation should have increased the node 1 sequence number in graph 1
    long node1NewSeqNo = graph1.getSequenceNumberOfNode(NODE_1);
    assertEquals(node1NewSeqNo, lsa.getSequenceNumber());
    assertTrue(node1NewSeqNo > node1OriginalSeqNo);

    // verify graph update
    assertTrue(graph2.update(lsa));
    assertEquals(node1NewSeqNo, graph2.getSequenceNumberOfNode(NODE_1));

    lsa = graph2.generateNewLocalLSA();

    // LSA generation should have increased the node 2 sequence number in graph 2
    long node2NewSeqNo = graph2.getSequenceNumberOfNode(NODE_2);
    assertEquals(node2NewSeqNo, lsa.getSequenceNumber());
    assertTrue(node2NewSeqNo > node2OriginalSeqNo);

    // verify graph update
    assertTrue(graph1.update(lsa));
    assertEquals(node2NewSeqNo, graph1.getSequenceNumberOfNode(NODE_2));

    assertTrue(graph1.equals(graph2));

    graph1.addNode(NODE_3);
    graph1.addLink(NODE_1, NODE_3, CONNECTION_ID_1);

    assertFalse(graph1.equals(graph2));

    lsa = graph1.generateNewLocalLSA();
    assertTrue(lsa.getSequenceNumber() > node1NewSeqNo);
    node1NewSeqNo = graph1.getSequenceNumberOfNode(NODE_1);
    assertEquals(node1NewSeqNo, lsa.getSequenceNumber());

    assertTrue(graph2.update(lsa));
    assertEquals(node1NewSeqNo, graph2.getSequenceNumberOfNode(NODE_1));
    assertTrue(graph1.equals(graph2));

    graph2.addLink(NODE_2, NODE_1, CONNECTION_ID_1);

    assertFalse(graph2.equals(graph1));

    lsa = graph2.generateNewLocalLSA();
    graph1.update(lsa);

    node2NewSeqNo = graph2.getSequenceNumberOfNode(NODE_2);
    assertEquals(node2NewSeqNo, lsa.getSequenceNumber());

    assertTrue(graph2.equals(graph1));
    assertEquals(node1NewSeqNo, graph2.getSequenceNumberOfNode(NODE_1));
    assertEquals(node2NewSeqNo, graph2.getSequenceNumberOfNode(NODE_2));
    assertEquals(graph1.getSequenceNumberOfNode(NODE_3), graph2.getSequenceNumberOfNode(NODE_3));

    // log.info(NetworkFormatter.summary(graph2));
    // log.info(NetworkFormatter.summary(graph1));
  }