async def METHOD_NAME(num_nodes, adjacency_map, action_func, assertion_func):
    """
    Helper function to allow for easy construction of custom tests for dummy
    account nodes in various network topologies.
    :param num_nodes: number of nodes in the test
    :param adjacency_map: adjacency map defining each node and its list of neighbors
    :param action_func: function to execute that includes actions by the nodes,
    such as send crypto and set crypto
    :param assertion_func: assertions for testing the results of the actions are correct
    """
    async with DummyAccountNode.create(num_nodes) as dummy_nodes:
        # Create connections between nodes according to `adjacency_map`
        async with trio.open_nursery() as nursery:
            for source_num in adjacency_map:
                target_nums = adjacency_map[source_num]
                for target_num in target_nums:
                    nursery.start_soon(
                        connect,
                        dummy_nodes[source_num].host,
                        dummy_nodes[target_num].host,
                    )
        # Allow time for network creation to take place
        await trio.sleep(0.25)
        # Perform action function
        await action_func(dummy_nodes)
        # Allow time for action function to be performed (i.e. messages to propogate)
        await trio.sleep(1)
        # Perform assertion function
        for dummy_node in dummy_nodes:
            assertion_func(dummy_node)
    # Success, terminate pending tasks.