diff --git a/test/blockchain_ct_utils.erl b/test/blockchain_ct_utils.erl index 6cb1abecb1..3db843a8b3 100644 --- a/test/blockchain_ct_utils.erl +++ b/test/blockchain_ct_utils.erl @@ -204,49 +204,57 @@ init_per_testcase(TestCase, Config) -> NodeNames = lists:map(fun(_M) -> list_to_atom(randname(5)) end, lists:seq(1, TotalNodes)), - Nodes = pmap(fun(Node) -> - start_node(Node, Config, TestCase) - end, NodeNames), - - ConfigResult = pmap(fun(Node) -> - ct_rpc:call(Node, cover, start, []), - ct_rpc:call(Node, application, load, [lager]), - ct_rpc:call(Node, application, load, [blockchain]), - ct_rpc:call(Node, application, load, [libp2p]), - ct_rpc:call(Node, application, load, [erlang_stats]), - ct_rpc:call(Node, application, load, [grpcbox]), - %% give each node its own log directory - LogRoot = LogDir ++ "_" ++ atom_to_list(Node), - ct_rpc:call(Node, application, set_env, [lager, log_root, LogRoot]), - ct_rpc:call(Node, lager, set_loglevel, [{lager_file_backend, "log/console.log"}, debug]), - - %% set blockchain configuration - #{public := PubKey, secret := PrivKey} = libp2p_crypto:generate_keys(ecc_compact), - Key = {PubKey, libp2p_crypto:mk_sig_fun(PrivKey), libp2p_crypto:mk_ecdh_fun(PrivKey)}, - BlockchainBaseDir = BaseDir ++ "_" ++ atom_to_list(Node), - ct_rpc:call(Node, application, set_env, [blockchain, testing, true]), - ct_rpc:call(Node, application, set_env, [blockchain, enable_nat, false]), - ct_rpc:call(Node, application, set_env, [blockchain, base_dir, BlockchainBaseDir]), - ct_rpc:call(Node, application, set_env, [blockchain, num_consensus_members, NumConsensusMembers]), - ct_rpc:call(Node, application, set_env, [blockchain, port, Port]), - ct_rpc:call(Node, application, set_env, [blockchain, seed_nodes, SeedNodes]), - ct_rpc:call(Node, application, set_env, [blockchain, key, Key]), - ct_rpc:call(Node, application, set_env, [blockchain, peer_cache_timeout, PeerCacheTimeout]), - ct_rpc:call(Node, application, set_env, [blockchain, sc_client_handler, sc_client_test_handler]), - ct_rpc:call(Node, application, set_env, [blockchain, sc_packet_handler, sc_packet_test_handler]), - ct_rpc:call(Node, application, set_env, [blockchain, peerbook_update_interval, 200]), - ct_rpc:call(Node, application, set_env, [blockchain, peerbook_allow_rfc1918, true]), - ct_rpc:call(Node, application, set_env, [blockchain, max_inbound_connections, TotalNodes*2]), - ct_rpc:call(Node, application, set_env, [blockchain, outbound_gossip_connections, TotalNodes]), - ct_rpc:call(Node, application, set_env, [blockchain, listen_interface, "127.0.0.1"]), - ct_rpc:call(Node, application, set_env, [blockchain, sc_client_transport_handler, SCClientTransportHandler]), - ct_rpc:call(Node, application, set_env, [blockchain, sc_sup_type, testing]), - {ok, StartedApps} = ct_rpc:call(Node, application, ensure_all_started, [blockchain]), - log("Node: ~p, StartedApps: ~p", [Node, StartedApps]) - end, Nodes), - - %% check that the config loaded correctly on each node - true = lists:all(fun(Res) -> Res == ok end, ConfigResult), + Nodes = + pmap( + fun(Node) -> + start_node(Node, Config, TestCase) + end, NodeNames), + + pmap( + fun(Node) -> + LogRoot = LogDir ++ "_" ++ atom_to_list(Node), + + %% set blockchain configuration + #{public := PubKey, secret := PrivKey} = libp2p_crypto:generate_keys(ecc_compact), + Key = {PubKey, libp2p_crypto:mk_sig_fun(PrivKey), libp2p_crypto:mk_ecdh_fun(PrivKey)}, + BlockchainBaseDir = BaseDir ++ "_" ++ atom_to_list(Node), + + ct_rpc:call(Node, cover, start, []), + + application_load(Node, + [lager, blockchain, libp2p, erlang_stats, grpcbox]), + + application_set_env(Node, [ + % give each node its own log directory + {lager, log_root, LogRoot}, + {blockchain, testing, true}, + {blockchain, enable_nat, false}, + {blockchain, base_dir, BlockchainBaseDir}, + {blockchain, num_consensus_members, NumConsensusMembers}, + {blockchain, port, Port}, + {blockchain, seed_nodes, SeedNodes}, + {blockchain, key, Key}, + {blockchain, peer_cache_timeout, PeerCacheTimeout}, + {blockchain, sc_client_handler, sc_client_test_handler}, + {blockchain, sc_packet_handler, sc_packet_test_handler}, + {blockchain, peerbook_update_interval, 200}, + {blockchain, peerbook_allow_rfc1918, true}, + {blockchain, max_inbound_connections, TotalNodes*2}, + {blockchain, outbound_gossip_connections, TotalNodes}, + {blockchain, listen_interface, "127.0.0.1"}, + {blockchain, sc_client_transport_handler, SCClientTransportHandler}, + {blockchain, sc_sup_type, testing} + ]), + + {Node, {ok, StartedApps3}} = { + Node, + ct_rpc:call(Node, + application, ensure_all_started, [blockchain])}, + log("Node: ~p, StartedApps: ~p", [Node, StartedApps3]), + + ct_rpc:call(Node, lager, set_loglevel, [{lager_file_backend, "log/console.log"}, debug]) + + end, Nodes), %% accumulate the listen addr of all the nodes Addrs = pmap( @@ -584,52 +592,39 @@ download_serialized_region(URL) -> Data. -% [{Node, PubKey}] -find_connected_node_pair(NodeAddrList) -> - AddrMap = +-spec find_connected_node_pair([{node(), libp2p_crypto:pubkey_bin()}]) -> + {node(), node()}. +find_connected_node_pair([{FirstNode, _} | NodeAddrList]) -> + AddrToNodeMap = lists:foldl( fun({Node, Addr}, Acc) -> AddrStr = libp2p_crypto:pubkey_bin_to_p2p(Addr), Acc#{AddrStr => Node} end, #{}, NodeAddrList), - ct:pal("Node map: ~p", [AddrMap]), - find_connected_node_pair(maps:next(maps:iterator(AddrMap)), AddrMap, #{}). - -find_connected_node_pair(none, _, NetworkMap) -> - ct:pal("Final Network Map~n~p", [NetworkMap]), - disjoint_network; - -% NetworkMap - #{ConnectedToNode => [ConnectedFromNode]} -find_connected_node_pair({_, Node, Iter}, AddrToNodeMap, NetworkMap) -> - GossipPeerNodes = + [ConnectedNode | _] = addr_to_node( - lists:usort( - ct_rpc:call(Node, blockchain_swarm, gossip_peers, [], 500)), + ct_rpc:call(FirstNode, blockchain_swarm, gossip_peers, [], 500), AddrToNodeMap), - ct:pal("Node ~p connected to:~n~p", [Node, GossipPeerNodes]), - - % Is Node connected to a node in NetworkMap? - case maps:get(Node, NetworkMap, []) of - [] -> - % Nope, try checking the next node - find_connected_node_pair( - maps:next(Iter), - AddrToNodeMap, - add_to_network_map(Node, GossipPeerNodes, NetworkMap)); - [ConnectedNode | _] -> - ct:pal("Found connected pair ~p <-> ~p", [Node, ConnectedNode]), - [Node, ConnectedNode] - end. + {FirstNode, ConnectedNode}. + +-spec addr_to_node([string()], #{string() => node()}) -> [node()]. addr_to_node(Addrs, AddrToNodeMap) -> [maps:get(Addr, AddrToNodeMap, undefined) || Addr <- Addrs]. -% Remember which nodes a peer node is connected to -add_to_network_map(Node, GossipPeerNodes, NetworkMap) -> - lists:foldl( - fun(PeerNode, Acc) -> - maps:update_with(PeerNode, - fun(NodeList) -> - [Node | NodeList] - end, [Node], Acc) - end, NetworkMap, GossipPeerNodes). + +-spec application_load(node(), [atom()]) -> ok. +application_load(Node, Applications) -> + lists:foreach( + fun(Application) -> + ct_rpc:call(Node, application, load, [Application]) + end, Applications). + + +-spec application_set_env(node(), [{atom(), atom(), term()}]) -> ok. +application_set_env(Node, Env) -> + lists:foreach( + fun({Application, Par, Val}) -> + ok = ct_rpc:call( + Node, application, set_env, [Application, Par, Val]) + end, Env). diff --git a/test/blockchain_state_channel_SUITE.erl b/test/blockchain_state_channel_SUITE.erl index 318b470740..920300f2b0 100644 --- a/test/blockchain_state_channel_SUITE.erl +++ b/test/blockchain_state_channel_SUITE.erl @@ -133,11 +133,10 @@ init_per_testcase(Test, Config) -> %% nodes are connected to a majority of the group but that does not %% guarantee these two nodes are connected - [RouterNode, GatewayNode] = + {RouterNode, GatewayNode} = blockchain_ct_utils:find_connected_node_pair(NodeAddrList), Nodes = - [RouterNode, GatewayNode] ++ (InitNodes -- [RouterNode, GatewayNode]), - + [RouterNode, GatewayNode | (InitNodes -- [RouterNode, GatewayNode])], Dir = os:getenv("SC_DIR", ""), debug_modules_for_node( @@ -218,8 +217,8 @@ init_per_testcase(Test, Config) -> ConsensusMembers = get_consensus_members(Nodes, ConsensusAddrs), [ {connected_nodes, [RouterNode, GatewayNode]}, - {routernode, RouterNode}, - {gatewaynode, GatewayNode}, + {router_node, RouterNode}, + {gateway_node, GatewayNode}, {nodes, Nodes}, {consensus_members, ConsensusMembers}, {master_key, MasterKey} @@ -244,8 +243,8 @@ end_per_suite(_) -> %%-------------------------------------------------------------------- full_test(Config) -> - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -379,7 +378,7 @@ diff_test(Config) -> %% Get router chain, swarm and pubkey_bin RouterChain = ct_rpc:call(RouterNode, blockchain_worker, blockchain, []), - RouterSwarm = ct_rpc:call(RouterNode, blockchain_swarm, swarm, []), + RouterSwarmTID = ct_rpc:call(RouterNode, blockchain_swarm, tid, []), RouterPubkeyBin = ct_rpc:call(RouterNode, blockchain_swarm, pubkey_bin, []), ct:pal("RouterNode ~p", [RouterNode]), ct:pal("Gateway node1 ~p", [GatewayNode1]), @@ -404,7 +403,7 @@ diff_test(Config) -> ct:pal("Block0: ~p", [Block0]), %% Fake gossip block - ok = ct_rpc:call(RouterNode, blockchain_gossip_handler, add_block, [Block0, RouterChain, Self, RouterSwarm]), + ok = ct_rpc:call(RouterNode, blockchain_gossip_handler, add_block, [Block0, RouterChain, Self, RouterSwarmTID]), %% Wait till the block is gossiped ok = blockchain_ct_utils:wait_until_height(GatewayNode1, 2), @@ -504,8 +503,8 @@ diff_test(Config) -> ok. overspent_test(Config) -> - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -633,8 +632,8 @@ overspent_test(Config) -> ok. dup_packets_test(Config) -> - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -731,8 +730,8 @@ dup_packets_test(Config) -> ok. cached_routing_test(Config) -> - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -808,8 +807,8 @@ cached_routing_test(Config) -> ok. max_actor_cache_eviction_test(Config) -> - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -946,8 +945,8 @@ max_actor_cache_eviction_test(Config) -> max_actor_test(Config) -> - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -1079,8 +1078,8 @@ max_actor_test(Config) -> ok. replay_test(Config) -> - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -1176,8 +1175,8 @@ replay_test(Config) -> ok. multiple_test(Config) -> - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -1441,8 +1440,8 @@ multi_owner_multi_sc_test(Config) -> ok. multi_active_sc_test(Config) -> - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -1603,7 +1602,7 @@ multi_active_sc_test(Config) -> ok. open_without_oui_test(Config) -> - RouterNode = ?config(routernode, Config), + RouterNode = ?config(router_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -1622,7 +1621,7 @@ open_without_oui_test(Config) -> ok. max_scs_open_test(Config) -> - RouterNode = ?config(routernode, Config), + RouterNode = ?config(router_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -1664,7 +1663,7 @@ max_scs_open_test(Config) -> ok. max_scs_open_v2_test(Config) -> - RouterNode = ?config(routernode, Config), + RouterNode = ?config(router_node, Config), ConsensusMembers = ?config(consensus_members, Config), Self = self(), @@ -1950,7 +1949,7 @@ sc_dispute_prevention_test(Config) -> oui_not_found_test(Config) -> - RouterNode = ?config(routernode, Config), + RouterNode = ?config(router_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -2022,8 +2021,8 @@ unknown_owner_test(Config) -> ok. crash_single_sc_test(Config) -> - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -2131,8 +2130,8 @@ crash_single_sc_test(Config) -> ok. crash_multi_sc_test(Config) -> - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -2313,8 +2312,8 @@ crash_multi_sc_test(Config) -> ok. crash_sc_sup_test(Config) -> - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -2424,8 +2423,8 @@ crash_sc_sup_test(Config) -> ok. hotspot_in_router_oui_test(Config) -> - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin @@ -2537,8 +2536,8 @@ hotspot_in_router_oui_test(Config) -> default_routers_test(Config) -> Nodes = ?config(nodes, Config), - RouterNode = ?config(routernode, Config), - GatewayNode1 = ?config(gatewaynode, Config), + RouterNode = ?config(router_node, Config), + GatewayNode1 = ?config(gateway_node, Config), ConsensusMembers = ?config(consensus_members, Config), %% Get router chain, swarm and pubkey_bin