summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorUlf Wiger <ulf@feuerlabs.com>2015-11-05 17:29:22 +0100
committerUlf Wiger <ulf@feuerlabs.com>2015-11-20 13:47:02 -0800
commitca1f0abd9f0f1478da8380bff28cb25aada34c1d (patch)
tree814c4a3c17b247cc300f62673771dad5a5c6ed77 /test
parent1b44c2448344a10ae63904a796b6211c40a3f212 (diff)
downloadrvi_core-ca1f0abd9f0f1478da8380bff28cb25aada34c1d.tar.gz
All tests (incl remote method inv) pass
- No signatures on messages (dlink_tls) - dlink_bt wasn't actually tested (test case passed erroneously) - added proto_msgpack component - fixed sneaky bug in 'setup'
Diffstat (limited to 'test')
-rw-r--r--test/config/backend.config1
-rw-r--r--test/config/basic_backend.config6
-rw-r--r--test/config/basic_sample.config6
-rw-r--r--test/config/bt_backend.config2
-rw-r--r--test/config/tls_backend.config5
-rw-r--r--test/config/tls_sample.config3
-rw-r--r--test/rvi_core_SUITE.erl101
7 files changed, 101 insertions, 23 deletions
diff --git a/test/config/backend.config b/test/config/backend.config
index c2b1aed..3a7be0b 100644
--- a/test/config/backend.config
+++ b/test/config/backend.config
@@ -2,7 +2,6 @@
{ok, CurDir} = file:get_cwd().
[
{include_lib, "rvi_core/backend.config"},
- {remove_apps, [bt, dlink_bt]},
{set_env,
[
{rvi_core,
diff --git a/test/config/basic_backend.config b/test/config/basic_backend.config
new file mode 100644
index 0000000..c4078e3
--- /dev/null
+++ b/test/config/basic_backend.config
@@ -0,0 +1,6 @@
+%% -*- erlang -*-
+{ok, CurDir} = file:get_cwd().
+[
+ {include_lib, "rvi_core/test/config/backend.config"},
+ {remove_apps, [bt, dlink_bt]}
+].
diff --git a/test/config/basic_sample.config b/test/config/basic_sample.config
new file mode 100644
index 0000000..d91d235
--- /dev/null
+++ b/test/config/basic_sample.config
@@ -0,0 +1,6 @@
+%% -*- erlang -*-
+{ok, CurDir} = file:get_cwd().
+[
+ {include_lib, "rvi_core/test/config/sample.config"},
+ {remove_apps, [bt, dlink_bt]}
+].
diff --git a/test/config/bt_backend.config b/test/config/bt_backend.config
index 3bb266b..9ff0b9b 100644
--- a/test/config/bt_backend.config
+++ b/test/config/bt_backend.config
@@ -7,7 +7,7 @@
[
{rvi_core,
[
- { [routing_rules, ""], {proto_json, dlink_bt_rpc} },
+ { [routing_rules, ""], [{proto_json, dlink_bt_rpc}] },
{ [components, data_link], [{dlink_bt_rpc, gen_server,
[{server_opts, [{test_mode, tcp},
{port, 8007}]}]}]}
diff --git a/test/config/tls_backend.config b/test/config/tls_backend.config
index 7ad6011..d2356f2 100644
--- a/test/config/tls_backend.config
+++ b/test/config/tls_backend.config
@@ -5,9 +5,10 @@
[
{rvi_core,
[
- { [routing_rules, ""], [{proto_json, dlink_tls_rpc}] },
+ { [routing_rules, ""], [{proto_msgpack_rpc, dlink_tls_rpc}] },
{ [components, data_link], [{dlink_tls_rpc, gen_server,
- [{server_opts, [{port, 8007}]}]}]}
+ [{server_opts, [{port, 8007}]}]}]},
+ { [components, protocol], [{proto_msgpack_rpc, gen_server, []}] }
]}
]}
].
diff --git a/test/config/tls_sample.config b/test/config/tls_sample.config
index 6b88ae1..8559b8c 100644
--- a/test/config/tls_sample.config
+++ b/test/config/tls_sample.config
@@ -9,7 +9,8 @@
{ [components, data_link], [{dlink_tls_rpc, gen_server,
[{server_opts, [{port, 9007}]},
{persistent_connections,
- ["localhost:8007"]}]}]}
+ ["localhost:8007"]}]}]},
+ { [components, protocol], [{ proto_msgpack, gen_server, [] }] }
]}
]}
].
diff --git a/test/rvi_core_SUITE.erl b/test/rvi_core_SUITE.erl
index 4ed5be9..c154eee 100644
--- a/test/rvi_core_SUITE.erl
+++ b/test/rvi_core_SUITE.erl
@@ -30,6 +30,7 @@
t_start_tls_sample/1,
t_register_lock_service/1,
t_call_lock_service/1,
+ t_remote_call_lock_service/1,
t_no_errors/1
]).
@@ -68,6 +69,7 @@ groups() ->
t_start_basic_sample,
t_register_lock_service,
t_call_lock_service,
+ t_remote_call_lock_service,
t_no_errors
]},
{test_run_bt, [],
@@ -76,6 +78,7 @@ groups() ->
t_start_bt_sample,
t_register_lock_service,
t_call_lock_service,
+ t_remote_call_lock_service,
t_no_errors
]},
{test_run_tls, [],
@@ -84,6 +87,7 @@ groups() ->
t_start_tls_sample,
t_register_lock_service,
t_call_lock_service,
+ t_remote_call_lock_service,
t_no_errors
]}
].
@@ -126,6 +130,7 @@ end_per_group(_, _) ->
init_per_testcase(Case, Config) ->
ct:log("DATA bef. ~p: ~p~n", [Case, ets:tab2list(?DATA)]),
+ save(group_leader, group_leader()),
Config.
end_per_testcase(Case, _Config) ->
@@ -151,11 +156,11 @@ t_sample_keys_and_cert(Config) ->
t_install_backend_node(Config) ->
install_rvi_node("basic_backend", env(),
- [root(), "/test/config/backend.config"]).
+ [root(), "/test/config/basic_backend.config"]).
t_install_sample_node(_Config) ->
- install_sample_node("basic_sample", "sample.config").
+ install_sample_node("basic_sample", "basic_sample.config").
t_install_sms_backend_node(_Config) ->
install_rvi_node("sms_backend", env(),
@@ -230,6 +235,21 @@ t_call_lock_service(_Config) ->
verify_call_res(join_stdout_msgs(CallRes)),
ct:log("CallRes = ~p~n", [CallRes]).
+t_remote_call_lock_service(Config) ->
+ CallPid = spawn_cmd(
+ [python(),
+ "/rvi_call.py -n ", service_edge("backend"),
+ " jlr.com/vin/abc/lock arg1='val2'"]),
+ timer:sleep(2000),
+ [{_, Svc}] = lookup({service, lock}),
+ ok = fetch(
+ Svc,
+ {match, <<"Service invoked![\\s]*args: {u'arg1': u'val1'}">>}),
+ ct:log("Verified service invoked~n", []),
+ CallRes = fetch(CallPid),
+ verify_call_res(join_stdout_msgs(CallRes)),
+ ct:log("CallRes = ~p~n", [CallRes]).
+
verify_service_res(Bin) ->
{match,_} =
re:run(Bin, <<"Service:[\\h]*jlr.com/vin/abc/lock">>, []),
@@ -250,6 +270,14 @@ join_stdout_msgs(L) ->
Acc
end, <<>>, L).
+join_stdout_msgs_rev(L) ->
+ lists:foldr(
+ fun({stdout,_,Bin}, Acc) ->
+ <<Acc/binary, Bin/binary>>;
+ (_, Acc) ->
+ Acc
+ end, <<>>, L).
+
spawn_cmd(Cmd0) ->
Cmd = binary_to_list(iolist_to_binary(Cmd0)),
Me = self(),
@@ -264,27 +292,64 @@ spawn_cmd(Cmd0) ->
Pid
end.
+%% Ensure that we have the right group leader
+log(Fmt, Args) ->
+ [{_, GL}] = lookup(group_leader),
+ group_leader(GL, self()),
+ ct:log(Fmt, Args).
+
fetch(Pid) ->
+ fetch(Pid, fetch).
+
+fetch(Pid, Op) ->
ct:log("fetch(~p)", [Pid]),
- Pid ! {self(), fetch},
+ Pid ! {self(), Op},
+ Fetched = receive
+ {Pid, Res} ->
+ Res
+ after 3000 ->
+ error(timeout)
+ end,
+ ct:log("Fetch result = ~p", [Fetched]),
+ Fetched.
+
+cmd_loop() -> cmd_loop([], []).
+
+cmd_loop(Acc, Pats) ->
receive
- {Pid, Res} ->
- Res
- after 3000 ->
- error(timeout)
+ {From, fetch} ->
+ log("~p <- fetch; Acc = ~p~n", [self(), Acc]),
+ From ! {self(), lists:reverse(Acc)},
+ cmd_loop(Acc, Pats);
+ {From, {match, Pat}} ->
+ log("~p <- match ~p; Acc = ~p~n", [self(), Pat, Acc]),
+ case try_match(Pat, join_stdout_msgs_rev(Acc)) of
+ true ->
+ From ! {self(), ok},
+ cmd_loop(Acc, Pats);
+ false ->
+ cmd_loop(Acc, [{From, Pat}|Pats])
+ end;
+ Msg ->
+ log("~p <- ~p~n", [self(), Msg]),
+ Acc1 = [Msg|Acc],
+ Bin = join_stdout_msgs_rev(Acc1),
+ Pats1 = lists:foldr(
+ fun({P, Pat}, Ps) ->
+ case re:run(Bin, Pat) of
+ {match,_} -> P ! {self(), ok},
+ Ps;
+ nomatch -> [{P, Pat}|Ps]
+ end
+ end, [], Pats),
+ cmd_loop(Acc1, Pats1)
end.
-cmd_loop() -> cmd_loop([]).
-
-cmd_loop(Acc) ->
- receive
- {From, fetch} ->
- From ! {self(), lists:reverse(Acc)},
- cmd_loop([]);
- Msg ->
- io:fwrite(user, "~p <- ~p", [self(), Msg]),
- cmd_loop([Msg|Acc])
- end.
+try_match(Pat, Data) ->
+ Match = re:run(Data, Pat),
+ Res = (Match =/= nomatch),
+ ct:log("try_match(S, ~p) -> ~p~nS=~s~n", [Pat, Res, Data]),
+ Res.
generate_device_keys(Dir, Config) ->
ensure_dir(Dir),