JR3F3TQ3A7I2K5AWRK7SKAOZI5XE3ZGAS3VK4O7FKODUONQSY35QC 3RUDKBK2XSZZSMORSCHSLHZCVSQFCCZEHQFB2BFSPCGXC5XVLJMQC QTLCENKPK4QOQJTHEAWAJYTJWVH7ZI5KQ2CQTMJRMA4TOMCHTVBAC JMYRP5MUPSBHABHBPIO45F6RC7QSQSNO2EJDUDUIQXX3MEEFDOAQC 2R3WFEOT3WWS6NFBBABSVRUNUPTXHFFMGPZZQOCPLTD2WB3U55HQC 6RQQDL46IO2ZFTJSEJREWJIMTNHOH4UBSO2VXAYNLEWNUR72OWHQC EDLKGFB5NWTZTHEO6IAR5M4W4533KJI4O6673MKJNTW3JPHQZP5AC 55WLMLEEVBRSTAFRZ5RGF7TOGUF5OPVCPA2TMHAQK45OUO7PA3YQC IHBNW3GI2XB6KAWUYRLL6KDOBUNUOU3N7RRLS6BFNW6SE7ZDHLWQC M4TNRFRPHEH6T673JAMJ3CHABASCWMAJVU57HH2XEMDJCB3QPT5QC DJ7EM5ZXZRSOBHEAA5EVZNVULJCQ7EX4DQBSK2PKPXITWJDPIUXQC ST7Y5WTYIQNKUOVXW6T5PQZL6R3VUYC37BAEQOA2FL6AYVPR4OLAC JVURIEXR72OUGZ2EHP5HB6OMXUNPHMAV66YUUP2444TPOG5XGASQC BSISJB2O2HKYGSCX6HIIMLBIXCZ66BRCZH3622G2NOQJRJ5S3HLAC CBHKQGLDCAH2E4ZNACITBSMADOKPERFCWQPUGMH7UN5TLJXLYI4QC timer:sleep(500),
timer:sleep(1000),%% Bob should have received Alice's channel list{ok, AliceChannels} = peer:peer_channel_list(Bob, AliceAddr),?assertEqual(3, length(AliceChannels)),?assert(lists:member("general", AliceChannels)),?assert(lists:member("random", AliceChannels)),?assert(lists:member("dev", AliceChannels)),
%% The responses will be logged to console%% (not stored anywhere yet - just testing the protocol works)
%% Alice should have received Bob's channel list{ok, BobChannels} = peer:peer_channel_list(Alice, BobAddr),?assertEqual(1, length(BobChannels)),?assert(lists:member("announcements", BobChannels)),
%% Wait for a peer to appear in the peer list (connection established)wait_for_peer(_Pid, _PeerAddr, 0) ->timeout;wait_for_peer(Pid, PeerAddr, Retries) ->PeerList = peer:peer_list(Pid),case lists:keyfind(PeerAddr, 1, PeerList) offalse ->timer:sleep(100),wait_for_peer(Pid, PeerAddr, Retries - 1);_Found ->okend.
terminate(_Reason, #state{listener_pid = ListenerPid}) ->
terminate(_Reason, #state{listener_pid = ListenerPid, conn_to_peer = Connections}) ->%% Note: Don't use io:format here - group leader may be dead during test cleanup%% Close all active connectionsmaps:foreach(fun(ConnPid, _Peer) ->catch enoise_cable:close(ConnPid)end,Connections),%% Close the listener
{ok, {ReqId, _Msg, Size}} = send_channel_list_request(State, Peer, 0, 100),io:format("[Peer] Sent channel list request (~p) to ~p~n", [hex:bin_to_hexstr(ReqId), Peer]),NewActiveOut = maps:put(ReqId, {Peer, channel_list_request}, ActiveOut),NewPeers = update_peer_sent(Peers, Peer, Size),State#state{activeOut = NewActiveOut, peers = NewPeers};
case send_channel_list_request(State, Peer, 0, 100) of{ok, {ReqId, _Msg, Size}} ->io:format("[Peer] Sent channel list request (~p) to ~p~n", [hex:bin_to_hexstr(ReqId), Peer]),NewActiveOut = maps:put(ReqId, {Peer, channel_list_request}, ActiveOut),NewPeers = update_peer_sent(Peers, Peer, Size),State#state{activeOut = NewActiveOut, peers = NewPeers};{error, Reason} ->io:format("[Peer] Failed to send channel list request to ~p: ~p~n", [Peer, Reason]),Stateend;
%% TODO: Could store these in a separate table or emit an event%% For now, just log themS#state{peers = NewPeers}
%% Store the received channel listPeerChannelLists = S#state.peerChannelLists,NewPeerChannelLists = maps:put(Peer, Channels, PeerChannelLists),S#state{peers = NewPeers, peerChannelLists = NewPeerChannelLists}