Exemple #1
0
def test_str_route_mismatch_error():
    """Call ``str`` on a ``RouteMismatchError``."""
    node = Node(str(uuid.uuid4()))
    node.start()
    mesh = Mesh()
    mesh.add_node(node)
    err = RouteMismatchError(mesh, (node, ))
    str(err)
Exemple #2
0
def test_node_pgid_v1():
    """Call ``Node.pgid`` on a not-yet-started node.

    Assert ``NodeUnavailableError`` is raised.
    """
    node = Node(str(uuid.uuid4()))
    with pytest.raises(NodeUnavailableError):
        node.pgid
Exemple #3
0
def test_add_remove_node(random_mesh):
    nodeX = Node("nodeX",
                 connections=["controller"],
                 stats_enable=True,
                 stats_port=random_port())
    random_mesh.add_node(nodeX)
    nodeX.start()
    wait_for(random_mesh.validate_all_node_routes, delay=6, num_sec=30)
    assert nodeX.ping(1) != "Failed"
    wait_for(random_mesh.validate_all_node_routes, delay=6, num_sec=30)
    assert "nodeX" in str(random_mesh.nodes["controller"].get_routes())
    assert random_mesh.validate_all_node_routes()
    nodeX.stop()
Exemple #4
0
def test_add_remove_node(random_mesh):
    nodeX = Node("nodeX",
                 connections=["controller"],
                 stats_enable=True,
                 stats_port=random_port())
    random_mesh.add_node(nodeX)
    nodeX.start()
    random_mesh.settle()
    assert nodeX.ping(1) != "Failed"
    random_mesh.settle()
    assert "nodeX" in str(random_mesh.nodes["controller"].get_routes())
    random_mesh.validate_routes()
    nodeX.stop()
Exemple #5
0
def test_node_pgid_v3():
    """Call ``Node.pgid`` on a node that has been started and stopped.

    Assert ``NodeUnavailableError`` is raised.
    """
    node = Node(str(uuid.uuid4()))
    node.start()
    node.stop()
    with pytest.raises(NodeUnavailableError):
        node.pgid
Exemple #6
0
def test_node_pgid_v2():
    """Call ``Node.pgid`` on a started node.

    Assert an int is returned.
    """
    node = Node(str(uuid.uuid4()))
    node.start()
    try:
        node_pgid = node.pgid
        assert isinstance(node_pgid, int)
    finally:
        node.stop()
Exemple #7
0
def test_alternative_route(tree_mesh):
    nodeX = Node("nodeX",
                 connections=["node4", "node3"],
                 stats_enable=True,
                 stats_port=random_port())
    tree_mesh.add_node(nodeX)
    nodeX.start()
    wait_for(tree_mesh.validate_all_node_routes, delay=6, num_sec=30)
    assert nodeX.ping(1) != "Failed"
    wait_for(tree_mesh.validate_all_node_routes, delay=6, num_sec=30)
    assert "nodeX" in str(tree_mesh.nodes["controller"].get_routes())
    assert tree_mesh.validate_all_node_routes()
    tree_mesh.nodes["node3"].stop()
    time.sleep(7)
    wait_for(tree_mesh.validate_all_node_routes, num_sec=30)
    # TODO make ping return quicker if it can't ping then reenable to ensure node3 is dead
    # assert tree_mesh.nodes['node3'].ping() != "Failed"
    assert nodeX.ping(1) != "Failed"
    tree_mesh.nodes["node3"].start()
    wait_for(tree_mesh.validate_all_node_routes, num_sec=30)
    tree_mesh.nodes["node4"].stop()
    time.sleep(7)
    assert nodeX.ping(1) != "Failed"
    nodeX.stop()
Exemple #8
0
def test_websocket_reconnect(random_mesh):
    nodeX = Node("nodeX", connections=["node1"], stats_enable=True, stats_port=random_port(),
                 listen=f"ws://127.0.0.1:{random_port()}")
    nodeY = Node("nodeY", connections=["nodeX"], stats_enable=True, stats_port=random_port(),
                 listen=f"ws://127.0.0.1:{random_port()}")
    random_mesh.add_node(nodeX)
    random_mesh.add_node(nodeY)
    nodeX.start()
    nodeY.start()
    random_mesh.settle()
    assert nodeY.ping(1) != "Failed"
    nodeX.stop()
    time.sleep(7)
    assert nodeY.ping(1) == "Failed"
    nodeX.start()
    time.sleep(7)
    random_mesh.settle()
    assert nodeY.ping(1) != "Failed"
    nodeY.stop()
    nodeX.stop()
Exemple #9
0
def test_str_stopped_node_error():
    """Call ``str`` on a ``NodeUnavailableError``."""
    node = Node(str(uuid.uuid4()))
    err = NodeUnavailableError(node)
    str(err)
Exemple #10
0
def test_node_listen_port_v2():
    """Call ``Node.listen_port`` on a node for which no port is specified."""
    node = Node(str(uuid.uuid4()), listen="receptor://127.0.0.1")
    assert node.listen_port == 8888
Exemple #11
0
def test_websocket_reconnect(random_mesh):
    nodeX = Node("nodeX",
                 connections=["node1"],
                 stats_enable=True,
                 stats_port=random_port(),
                 listen=f"ws://127.0.0.1:{random_port()}")
    nodeY = Node("nodeY",
                 connections=["nodeX"],
                 stats_enable=True,
                 stats_port=random_port(),
                 listen=f"ws://127.0.0.1:{random_port()}")
    random_mesh.add_node(nodeX)
    random_mesh.add_node(nodeY)
    nodeX.start()
    nodeY.start()
    wait_for(random_mesh.validate_all_node_routes, delay=6, num_sec=30)
    assert nodeY.ping(1) != "Failed"
    nodeX.stop()
    time.sleep(7)
    assert nodeY.ping(1) == "Failed"
    nodeX.start()
    time.sleep(7)
    wait_for(random_mesh.validate_all_node_routes, delay=6, num_sec=30)
    assert nodeY.ping(1) != "Failed"
    nodeY.stop()
    nodeX.stop()