blob: 587d1564e9ef6dc5007ad9ddef79e44a30b91b12 [file] [log] [blame]
% 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.
-module(couch_epi_basic_test).
-export([
start_link/0
]).
-export([
app/0,
providers/0,
services/0,
data_providers/0,
data_subscriptions/0,
processes/0,
notify/3
]).
-define(CHILD(I, Type), {I, {I, start_link, []}, permanent, 5000, Type, [I]}).
start_link() -> ok.
%% BEGIN couch_epi_plugin behaviour callbacks
app() -> test_app.
providers() ->
[
{my_service, provider1},
{my_service, provider2}
].
services() ->
[
{my_service, ?MODULE}
].
data_providers() ->
[
{{test_app, descriptions}, {static_module, ?MODULE}, [{interval, 100}]}
].
data_subscriptions() ->
[
{test_app, descriptions}
].
processes() ->
[
{?MODULE, [?CHILD(extra_process, worker)]},
{?MODULE, [{to_replace, {new, start_link, [bar]},
permanent, 5000, worker, [bar]}]}
].
notify(_Key, _OldData, _NewData) ->
ok.
%% END couch_epi_plugin behaviour callbacks
parse_child_id(Id) when is_atom(Id) ->
Id;
parse_child_id(Id) ->
["couch_epi_codechange_monitor", ServiceName, KindStr]
= string:tokens(Id, "|"),
Kind = list_to_atom(KindStr),
case string:tokens(ServiceName, ":") of
[ServiceId, Key] ->
{{list_to_atom(ServiceId), list_to_atom(Key)}, Kind};
[Key] ->
{list_to_atom(Key), Kind}
end.
-include_lib("eunit/include/eunit.hrl").
basic_test() ->
Expected = lists:sort([
{extra_process, [], [extra_process]},
{to_replace, [bar], [bar]},
{{my_service, providers},
[couch_epi_functions_gen_my_service],
[couch_epi_codechange_monitor, couch_epi_functions_gen_my_service,
provider1, provider2]},
{{my_service, services},
[couch_epi_functions_gen_my_service],
lists:sort([couch_epi_codechange_monitor,
couch_epi_functions_gen_my_service, ?MODULE])},
{{{test_app, descriptions}, data_subscriptions},
[couch_epi_data_gen_test_app_descriptions],
lists:sort([couch_epi_codechange_monitor,
couch_epi_data_gen_test_app_descriptions, ?MODULE])},
{{{test_app, descriptions}, data_providers},
[couch_epi_data_gen_test_app_descriptions],
lists:sort([couch_epi_codechange_monitor,
couch_epi_data_gen_test_app_descriptions, ?MODULE])}
]),
ToReplace = {to_replace,
{old, start_link, [foo]}, permanent, 5000, worker, [foo]},
Children = lists:sort(couch_epi_sup:plugin_childspecs(
?MODULE, [?MODULE], [ToReplace])),
Results = [
{parse_child_id(Id), Args, lists:sort(Modules)}
|| {Id, {_M, _F, Args}, _, _, _, Modules} <- Children
],
Tests = lists:zip(Expected, Results),
[?assertEqual(Expect, Result) || {Expect, Result} <- Tests],
ExpectedChild = {to_replace, {new, start_link, [bar]},
permanent, 5000, worker, [bar]},
?assertEqual(
ExpectedChild,
lists:keyfind(to_replace, 1, Children)),
ok.