summaryrefslogtreecommitdiff
path: root/src/couch_epi/test/eunit/couch_epi_basic_test.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/couch_epi/test/eunit/couch_epi_basic_test.erl')
-rw-r--r--src/couch_epi/test/eunit/couch_epi_basic_test.erl149
1 files changed, 149 insertions, 0 deletions
diff --git a/src/couch_epi/test/eunit/couch_epi_basic_test.erl b/src/couch_epi/test/eunit/couch_epi_basic_test.erl
new file mode 100644
index 000000000..5ba6c9f87
--- /dev/null
+++ b/src/couch_epi/test/eunit/couch_epi_basic_test.erl
@@ -0,0 +1,149 @@
+% 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]}]},
+ {?MODULE, [#{id => to_replace_map,
+ start => {new, start_link, [bar]}, modules => [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 = [
+ {extra_process, [], [extra_process]},
+ {to_replace, [bar], [bar]},
+ {to_replace_map, [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]},
+ #{id => to_replace_map, start => {old, start_link, [foo]}}
+ ],
+ Children = lists:sort(couch_epi_sup:plugin_childspecs(
+ ?MODULE, [?MODULE], ToReplace)),
+
+ Results = lists:map(fun
+ ({Id, {_M, _F, Args}, _, _, _, Modules}) ->
+ {parse_child_id(Id), Args, lists:sort(Modules)};
+ (#{id := Id, start := {_M, _F, Args}, modules := Modules}) ->
+ {parse_child_id(Id), Args, lists:sort(Modules)}
+ end, Children),
+
+ Tests = lists:zip(lists:sort(Expected), lists:sort(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)),
+
+ ExpectedMapChildSpec = #{id => to_replace_map,
+ start => {new, start_link, [bar]}, modules => [bar]},
+ [MapChildSpec] = [E || #{id := to_replace_map} = E <- Children],
+ ?assertEqual(ExpectedMapChildSpec, MapChildSpec),
+ ok.