blob: 0917b8fc1764951f628315bec5e3aa187bb6aae1 [file] [log] [blame]
%%%
%%% Copyright 2011, Boundary
%%%
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License.
%%% You may obtain a copy of the License at
%%%
%%% http://www.apache.org/licenses/LICENSE-2.0
%%%
%%% Unless required by applicable law or agreed to in writing, software
%%% distributed under the License is distributed on an "AS IS" BASIS,
%%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%%% See the License for the specific language governing permissions and
%%% limitations under the License.
%%%
%%%-------------------------------------------------------------------
%%% File: folsom_tests.erl
%%% @author joe williams <j@boundary.com>
%%% @doc
%%% @end
%%%------------------------------------------------------------------
-module(folsom_tests).
-include_lib("eunit/include/eunit.hrl").
run_test_() ->
{setup,
fun () -> folsom:start() end,
fun (_) -> folsom:stop() end,
[{"creating metrics",
fun folsom_erlang_checks:create_metrics/0},
{"tagging metrics",
fun folsom_erlang_checks:tag_metrics/0},
{"populating metrics",
{timeout, 30, fun folsom_erlang_checks:populate_metrics/0}},
{"checking metrics",
fun folsom_erlang_checks:check_metrics/0},
{"checking counter metric",
fun () ->
folsom_erlang_checks:counter_metric(10000, testcounter)
end},
{"checking group metrics",
fun folsom_erlang_checks:check_group_metrics/0},
{"checking erlang vm metrics",
fun folsom_erlang_checks:vm_metrics/0},
{"deleting metrics",
fun folsom_erlang_checks:delete_metrics/0},
{"cpu topology test",
fun folsom_erlang_checks:cpu_topology/0},
{"c compiler test",
fun folsom_erlang_checks:c_compiler_used/0},
{"create and delete tests",
fun folsom_erlang_checks:create_delete_metrics/0}]}.
configure_test_() ->
{foreach, fun setup_app/0, fun cleanup_app/1,
[{"start with configured metrics",
fun() ->
?assertMatch(ok, application:start(folsom)),
[counter, slide, <<"gauge">>, <<"uniform">>] =
lists:sort(folsom_metrics:get_metrics())
end}]}.
setup_app() ->
application:unload(folsom),
Env = [{counter, counter},
{gauge, <<"gauge">>},
{histogram, [[<<"uniform">>, uniform, 5000],
[slide, slide_uniform, {60, 1028}]]}],
application:load({application, folsom, [{mod, {folsom, []}}, {env, Env}]}),
ok.
cleanup_app(ok) ->
lists:foreach(fun folsom_metrics:delete_metric/1,
[counter, slide, <<"gauge">>, <<"uniform">>]),
application:stop(folsom),
application:unload(folsom),
ok.
update_counter_test() ->
Tid = ets:new(sometable, [public, set]),
Workers = [spawn_monitor(fun() -> timer:sleep(100-N), folsom_utils:update_counter(Tid, hello, N) end) || N <- lists:seq(1, 100)],
wait_for_results(Workers),
?assertEqual([{hello, 5050}], ets:lookup(Tid, hello)).
wait_for_results([]) ->
ok;
wait_for_results(Workers) ->
receive
{'DOWN', _, _, Pid, Reason} ->
case lists:keyfind(Pid, 1, Workers) of
false ->
wait_for_results(Workers);
_ ->
case Reason of
normal ->
wait_for_results(lists:keydelete(Pid, 1, Workers));
_ ->
erlang:error(Reason)
end
end
end.