Limit number of StatsD messages per packet.
[beam_stats.git] / test / beam_stats_consumer_statsd_SUITE.erl
CommitLineData
b0ab6ee2
SK
1-module(beam_stats_consumer_statsd_SUITE).
2
da5f2544 3-include_lib("beam_stats/include/beam_stats.hrl").
a8d431d1 4-include_lib("beam_stats/include/beam_stats_ets_table.hrl").
da5f2544 5
b0ab6ee2
SK
6-export(
7 [ all/0
8 , groups/0
9 ]).
10
11%% Test cases
12-export(
5681263f 13 [ t_send/1
b0ab6ee2
SK
14 ]).
15
5681263f 16-define(GROUP, beam_stats_consumer_statsd).
b0ab6ee2
SK
17
18%% ============================================================================
19%% Common Test callbacks
20%% ============================================================================
21
22all() ->
23 [{group, ?GROUP}].
24
25groups() ->
26 Tests =
5681263f 27 [ t_send
b0ab6ee2
SK
28 ],
29 Properties = [],
30 [{?GROUP, Properties, Tests}].
31
32%% =============================================================================
33%% Test cases
34%% =============================================================================
35
da5f2544 36t_send(_Cfg) ->
a8d431d1
SK
37 ETSTableStatsFoo =
38 #beam_stats_ets_table
39 { id = foo
40 , name = foo
41 , size = 5
42 , memory = 25
43 },
44 ETSTableStatsBar =
45 #beam_stats_ets_table
46 { id = 37
47 , name = bar
48 , size = 8
49 , memory = 38
50 },
51 % TODO: Indent #beam_stats as #beam_stats_ets_table
da5f2544
SK
52 BEAMStats = #beam_stats
53 { timestamp = {1, 2, 3}
54 , node_id = 'node_foo@host_bar'
4d24f3b7 55 , memory = [{mem_type_foo, 1}, {mem_type_bar, 2}, {mem_type_baz, 3}]
b4e2333f
SK
56 , io_bytes_in = 3
57 , io_bytes_out = 7
3fe887d7 58 , context_switches = 5
142c0796 59 , reductions = 9
deefeb3c 60 , run_queue = 17
a8d431d1 61 , ets = [ETSTableStatsFoo, ETSTableStatsBar]
da5f2544
SK
62 },
63 ServerPort = 8125,
64 {ok, ServerSocket} = gen_udp:open(ServerPort, [binary, {active, false}]),
65 BEAMStatsQ = queue:in(BEAMStats, queue:new()),
66 Options = [{dst_port, ServerPort}],
67 {_, State1} = beam_stats_consumer_statsd:init(Options),
68 State2 = beam_stats_consumer_statsd:consume(BEAMStatsQ, State1),
69 {} = beam_stats_consumer_statsd:terminate(State2),
4d24f3b7
SK
70 ResultOfReceive1 = gen_udp:recv(ServerSocket, 0),
71 {ok, {_, _, PacketReceived1}} = ResultOfReceive1,
72 ResultOfReceive2 = gen_udp:recv(ServerSocket, 0),
73 {ok, {_, _, PacketReceived2}} = ResultOfReceive2,
da5f2544 74 ok = gen_udp:close(ServerSocket),
4d24f3b7
SK
75 ct:log("PacketReceived1: ~n~s~n", [PacketReceived1]),
76 ct:log("PacketReceived2: ~n~s~n", [PacketReceived2]),
77 PacketsCombined = <<PacketReceived1/binary, PacketReceived2/binary>>,
78 ct:log("PacketsCombined: ~n~s~n", [PacketsCombined]),
79 MsgsExpected =
80 [ <<"beam_stats.node_foo_host_bar.io.bytes_in:3|g">>
81 , <<"beam_stats.node_foo_host_bar.io.bytes_out:7|g">>
82 , <<"beam_stats.node_foo_host_bar.context_switches:5|g">>
83 , <<"beam_stats.node_foo_host_bar.reductions:9|g">>
84 , <<"beam_stats.node_foo_host_bar.run_queue:17|g">>
85 , <<"beam_stats.node_foo_host_bar.memory.mem_type_foo:1|g">>
86 , <<"beam_stats.node_foo_host_bar.memory.mem_type_bar:2|g">>
87 , <<"beam_stats.node_foo_host_bar.memory.mem_type_baz:3|g">>
88 , <<"beam_stats.node_foo_host_bar.ets_table.size.foo.foo:5|g">>
89 , <<"beam_stats.node_foo_host_bar.ets_table.memory.foo.foo:25|g">>
90 , <<"beam_stats.node_foo_host_bar.ets_table.size.bar.37:8|g">>
91 , <<"beam_stats.node_foo_host_bar.ets_table.memory.bar.37:38|g">>
92 ],
93 MsgsReceived = binary:split(PacketsCombined, <<"\n">>, [global, trim]),
94 RemoveExpectedFromReceived =
95 fun (Expected, Received) ->
96 ct:log(
97 "Looking for expected msg ~p in remaining received ~p~n",
98 [Expected, Received]
99 ),
100 true = lists:member(Expected, Received),
101 Received -- [Expected]
102 end,
103 [] = lists:foldl(RemoveExpectedFromReceived, MsgsReceived, MsgsExpected).
This page took 0.045211 seconds and 4 git commands to generate.