diff options
Diffstat (limited to 'p11p-daemon/src/p11p_config.erl')
-rw-r--r-- | p11p-daemon/src/p11p_config.erl | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/p11p-daemon/src/p11p_config.erl b/p11p-daemon/src/p11p_config.erl index a8fde91..23b79bb 100644 --- a/p11p-daemon/src/p11p_config.erl +++ b/p11p-daemon/src/p11p_config.erl @@ -7,6 +7,7 @@ -export([nameof/1]). -export([tokens/0]). -export([modules_for_token/1, module_path/1, token_mode/1]). +-export_type([token_mode_t/0]). %% Genserver callbacks. -export([init/1, handle_call/3, handle_cast/2, handle_info/2, @@ -19,11 +20,11 @@ }). -type p11module() :: #p11module{}. --type token_mode() :: {failover | balance, [term()]}. +-type token_mode_t() :: {failover, [timeout]} | {balance, [non_neg_integer()]}. -record(token, { name :: string(), - mode :: token_mode(), + mode :: token_mode_t(), modules = #{} :: #{string() => p11module()} }). -type token() :: #token{}. @@ -45,7 +46,7 @@ start_link() -> tokens() -> gen_server:call(?MODULE, tokens). --spec token_mode(string()) -> token_mode(). +-spec token_mode(string()) -> token_mode_t(). token_mode(TokName) -> gen_server:call(?MODULE, {token_mode, TokName}). @@ -115,10 +116,13 @@ conf_tokens([H = {Name, _}|T], Acc) -> -spec new_token({string(), [tuple()]}) -> token(). new_token({Name, Settings}) -> + Modules = conf_modules(proplists:get_value(modules, Settings)), + Mode = mode(proplists:get_value(mode, Settings, {failover, [timeout]}), + maps:size(Modules)), #token{ name = Name, - mode = proplists:get_value(mode, Settings, {failover, [timeout]}), - modules = conf_modules(proplists:get_value(modules, Settings)) + mode = Mode, + modules = Modules }. conf_modules(L) -> @@ -134,6 +138,12 @@ new_module(Name, Path) -> path = Path }. +-spec mode(p11p_config:token_mode_t(), non_neg_integer()) -> p11p_config:token_mode_t(). +mode({balance, Args}, NModules) -> + {balance, Args ++ [1 || _ <- lists:seq(1, NModules - length(Args))]}; +mode(Conf, _) -> + Conf. + %%%%%%%%%%%%%% %% Unit tests. @@ -145,7 +155,8 @@ tokens_init_test_() -> conf_tokens( [ {"vtoken0", - [{modules, [{"bogusmod0_0", "/path/to/bogusmod0_0"}, + [{mode, {balance, [3]}}, + {modules, [{"bogusmod0_0", "/path/to/bogusmod0_0"}, {"bogusmod0_1", "/path/to/bogusmod0_1"} ]}]}, {"vtoken1", @@ -156,7 +167,7 @@ tokens_init_test_() -> [?_assertEqual( #{"vtoken0" => {token,"vtoken0", - {failover,[timeout]}, + {balance,[3,1]}, #{"bogusmod0_0" => {p11module,"bogusmod0_0", "/path/to/bogusmod0_0"}, "bogusmod0_1" => |