+ {ok, {_, _, PacketReceived1}} = ResultOfReceive1,
+ {ok, {_, _, PacketReceived2}} = ResultOfReceive2,
+ {ok, {_, _, PacketReceived3}} = ResultOfReceive3,
+ {ok, {_, _, PacketReceived4}} = ResultOfReceive4,
+ ct:log("PacketReceived1: ~n~s~n", [PacketReceived1]),
+ ct:log("PacketReceived2: ~n~s~n", [PacketReceived2]),
+ ct:log("PacketReceived3: ~n~s~n", [PacketReceived3]),
+ ct:log("PacketReceived4: ~n~s~n", [PacketReceived4]),
+ PacketsCombined =
+ << PacketReceived1/binary
+ , PacketReceived2/binary
+ , PacketReceived3/binary
+ , PacketReceived4/binary
+ >>,
+ ct:log("PacketsCombined: ~n~s~n", [PacketsCombined]),
+ MsgsExpected =
+ [ <<"beam_stats.node_foo_host_bar.io.bytes_in:3|g">>
+ , <<"beam_stats.node_foo_host_bar.io.bytes_out:7|g">>
+ , <<"beam_stats.node_foo_host_bar.context_switches:5|g">>
+ , <<"beam_stats.node_foo_host_bar.reductions:9|g">>
+ , <<"beam_stats.node_foo_host_bar.run_queue:17|g">>
+ , <<"beam_stats.node_foo_host_bar.memory.mem_type_foo:1|g">>
+ , <<"beam_stats.node_foo_host_bar.memory.mem_type_bar:2|g">>
+ , <<"beam_stats.node_foo_host_bar.memory.mem_type_baz:3|g">>
+ , <<"beam_stats.node_foo_host_bar.ets_table.size.foo.foo:5|g">>
+ , <<"beam_stats.node_foo_host_bar.ets_table.memory.foo.foo:25|g">>
+ , <<"beam_stats.node_foo_host_bar.ets_table.size.bar.37:8|g">>
+ , <<"beam_stats.node_foo_host_bar.ets_table.memory.bar.37:38|g">>
+
+ % Processes totals
+ , <<"beam_stats.node_foo_host_bar.processes_count_all:3|g">>
+ , <<"beam_stats.node_foo_host_bar.processes_count_exiting:0|g">>
+ , <<"beam_stats.node_foo_host_bar.processes_count_garbage_collecting:0|g">>
+ , <<"beam_stats.node_foo_host_bar.processes_count_registered:1|g">>
+ , <<"beam_stats.node_foo_host_bar.processes_count_runnable:0|g">>
+ , <<"beam_stats.node_foo_host_bar.processes_count_running:3|g">>
+ , <<"beam_stats.node_foo_host_bar.processes_count_suspended:0|g">>
+ , <<"beam_stats.node_foo_host_bar.processes_count_waiting:0|g">>
+
+ % Process 1
+ , <<"beam_stats.node_foo_host_bar.process_memory.reg_name_foo.0_1_0:15|g">>
+ , <<"beam_stats.node_foo_host_bar.process_total_heap_size.reg_name_foo.0_1_0:25|g">>
+ , <<"beam_stats.node_foo_host_bar.process_stack_size.reg_name_foo.0_1_0:10|g">>
+ , <<"beam_stats.node_foo_host_bar.process_message_queue_len.reg_name_foo.0_1_0:0|g">>
+
+ % Process 2
+ , <<"beam_stats.node_foo_host_bar.process_memory.bar_mod-bar_fun-1--NONE--NONE.0_2_0:25|g">>
+ , <<"beam_stats.node_foo_host_bar.process_total_heap_size.bar_mod-bar_fun-1--NONE--NONE.0_2_0:35|g">>
+ , <<"beam_stats.node_foo_host_bar.process_stack_size.bar_mod-bar_fun-1--NONE--NONE.0_2_0:40|g">>
+ , <<"beam_stats.node_foo_host_bar.process_message_queue_len.bar_mod-bar_fun-1--NONE--NONE.0_2_0:5|g">>
+
+ % Process 3
+ , <<"beam_stats.node_foo_host_bar.process_memory.baz_mod-baz_fun-3--baz_otp_mod-baz_otp_fun-2--0_0_0-0_1_0.0_3_0:25|g">>
+ , <<"beam_stats.node_foo_host_bar.process_total_heap_size.baz_mod-baz_fun-3--baz_otp_mod-baz_otp_fun-2--0_0_0-0_1_0.0_3_0:35|g">>
+ , <<"beam_stats.node_foo_host_bar.process_stack_size.baz_mod-baz_fun-3--baz_otp_mod-baz_otp_fun-2--0_0_0-0_1_0.0_3_0:40|g">>
+ , <<"beam_stats.node_foo_host_bar.process_message_queue_len.baz_mod-baz_fun-3--baz_otp_mod-baz_otp_fun-2--0_0_0-0_1_0.0_3_0:1|g">>
+ ],
+ MsgsReceived = binary:split(PacketsCombined, <<"\n">>, [global, trim]),
+ RemoveExpectedFromReceived =
+ fun (Expected, Received) ->
+ ct:log(
+ "Looking for expected msg ~p in remaining received ~p~n",
+ [Expected, Received]
+ ),
+ true = lists:member(Expected, Received),
+ Received -- [Expected]
+ end,
+ [] = lists:foldl(RemoveExpectedFromReceived, MsgsReceived, MsgsExpected).