summaryrefslogtreecommitdiff
path: root/p11p-daemon/src/p11p_config.erl
diff options
context:
space:
mode:
Diffstat (limited to 'p11p-daemon/src/p11p_config.erl')
-rw-r--r--p11p-daemon/src/p11p_config.erl25
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" =>