You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: listening_addresses.rs
    path of file: ./repos/rust-ipfs/tests
    
    the code of the file until where you have to start completion: #[tokio::test]
async fn multiple_consecutive_ephemeral_listening_addresses() {
    let node = ipfs::Node::new("test_node").await;

    let target = libp2p::build_multiaddr!(Ip4([127, 0, 0, 1]), Tcp(0u16));

    let first = node.add_listening_address(target.clone()).await.unwrap();
    assert_ne!(target, first);

    let second = node.add_listening_address(target.clone()).await.unwrap();
    assert_ne!(target, second);
    assert_ne!(first, second);
}

#[tokio::test]
async fn multiple_concurre
    
async fn multiple_concurrent_ephemeral_listening_addresses_on_different_ip() {
    let node = ipfs::Node::new("test_node").await;

    // it doesnt work on mac os x as 127.0.0.2 is not enabled by default.
    let first =
        node.add_listening_address(libp2p::build_multiaddr!(Ip4([127, 0, 0, 1]), Tcp(0u16)));
    let second =
        node.add_listening_address(libp2p::build_multiaddr!(Ip4([127, 0, 0, 2]), Tcp(0u16)));

    let (first, second) = futures::future::join(first, second).await;

    // both should succeed
    first.unwrap();
    second.unwrap();
}