test(lwm2m): cover auto_observe mechanism
This commit is contained in:
parent
6750618d9a
commit
6db5a4872a
|
@ -15,11 +15,12 @@
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
-module(emqx_lwm2m_session).
|
-module(emqx_lwm2m_session).
|
||||||
|
|
||||||
|
-include("src/coap/include/emqx_coap.hrl").
|
||||||
|
-include("src/lwm2m/include/emqx_lwm2m.hrl").
|
||||||
-include_lib("emqx/include/logger.hrl").
|
-include_lib("emqx/include/logger.hrl").
|
||||||
-include_lib("emqx/include/emqx.hrl").
|
-include_lib("emqx/include/emqx.hrl").
|
||||||
-include_lib("emqx/include/emqx_mqtt.hrl").
|
-include_lib("emqx/include/emqx_mqtt.hrl").
|
||||||
-include("src/coap/include/emqx_coap.hrl").
|
-include_lib("snabbkaffe/include/snabbkaffe.hrl").
|
||||||
-include("src/lwm2m/include/emqx_lwm2m.hrl").
|
|
||||||
|
|
||||||
%% API
|
%% API
|
||||||
-export([
|
-export([
|
||||||
|
@ -513,13 +514,17 @@ observe_object_list(AlternatePath, ObjectList, Session) ->
|
||||||
true ->
|
true ->
|
||||||
Acc;
|
Acc;
|
||||||
false ->
|
false ->
|
||||||
case emqx_lwm2m_xml_object_db:find_objectid(binary_to_integer(ObjId)) of
|
ObjId1 = binary_to_integer(ObjId),
|
||||||
|
case emqx_lwm2m_xml_object_db:find_objectid(ObjId1) of
|
||||||
{error, no_xml_definition} ->
|
{error, no_xml_definition} ->
|
||||||
?SLOG(warning, #{
|
?tp(
|
||||||
msg => "ignore_observer_resource",
|
warning,
|
||||||
reason => no_xml_definition,
|
ignore_observer_resource,
|
||||||
object_id => ObjId
|
#{
|
||||||
}),
|
reason => no_xml_definition,
|
||||||
|
object_id => ObjId1
|
||||||
|
}
|
||||||
|
),
|
||||||
Acc;
|
Acc;
|
||||||
_ ->
|
_ ->
|
||||||
observe_object(AlternatePath, ObjectPath, Acc)
|
observe_object(AlternatePath, ObjectPath, Acc)
|
||||||
|
|
|
@ -35,29 +35,7 @@
|
||||||
-include("src/coap/include/emqx_coap.hrl").
|
-include("src/coap/include/emqx_coap.hrl").
|
||||||
-include_lib("eunit/include/eunit.hrl").
|
-include_lib("eunit/include/eunit.hrl").
|
||||||
-include_lib("common_test/include/ct.hrl").
|
-include_lib("common_test/include/ct.hrl").
|
||||||
|
-include_lib("snabbkaffe/include/snabbkaffe.hrl").
|
||||||
-define(CONF_DEFAULT, <<
|
|
||||||
"\n"
|
|
||||||
"gateway.lwm2m {\n"
|
|
||||||
" xml_dir = \"../../lib/emqx_gateway/src/lwm2m/lwm2m_xml\"\n"
|
|
||||||
" lifetime_min = 1s\n"
|
|
||||||
" lifetime_max = 86400s\n"
|
|
||||||
" qmode_time_window = 22\n"
|
|
||||||
" auto_observe = false\n"
|
|
||||||
" mountpoint = \"lwm2m/${username}\"\n"
|
|
||||||
" update_msg_publish_condition = contains_object_list\n"
|
|
||||||
" translators {\n"
|
|
||||||
" command = {topic = \"/dn/#\", qos = 0}\n"
|
|
||||||
" response = {topic = \"/up/resp\", qos = 0}\n"
|
|
||||||
" notify = {topic = \"/up/notify\", qos = 0}\n"
|
|
||||||
" register = {topic = \"/up/resp\", qos = 0}\n"
|
|
||||||
" update = {topic = \"/up/resp\", qos = 0}\n"
|
|
||||||
" }\n"
|
|
||||||
" listeners.udp.default {\n"
|
|
||||||
" bind = 5783\n"
|
|
||||||
" }\n"
|
|
||||||
"}\n"
|
|
||||||
>>).
|
|
||||||
|
|
||||||
-record(coap_content, {content_format, payload = <<>>}).
|
-record(coap_content, {content_format, payload = <<>>}).
|
||||||
|
|
||||||
|
@ -99,7 +77,8 @@ groups() ->
|
||||||
%% case06_register_wrong_lifetime, %% now, will ignore wrong lifetime
|
%% case06_register_wrong_lifetime, %% now, will ignore wrong lifetime
|
||||||
case07_register_alternate_path_01,
|
case07_register_alternate_path_01,
|
||||||
case07_register_alternate_path_02,
|
case07_register_alternate_path_02,
|
||||||
case08_reregister
|
case08_reregister,
|
||||||
|
case09_auto_observe
|
||||||
]},
|
]},
|
||||||
{test_grp_1_read, [RepeatOpt], [
|
{test_grp_1_read, [RepeatOpt], [
|
||||||
case10_read,
|
case10_read,
|
||||||
|
@ -164,8 +143,15 @@ end_per_suite(Config) ->
|
||||||
emqx_mgmt_api_test_util:end_suite([emqx_conf, emqx_authn]),
|
emqx_mgmt_api_test_util:end_suite([emqx_conf, emqx_authn]),
|
||||||
Config.
|
Config.
|
||||||
|
|
||||||
init_per_testcase(_AllTestCase, Config) ->
|
init_per_testcase(TestCase, Config) ->
|
||||||
ok = emqx_common_test_helpers:load_config(emqx_gateway_schema, ?CONF_DEFAULT),
|
GatewayConfig =
|
||||||
|
case TestCase of
|
||||||
|
case09_auto_observe ->
|
||||||
|
default_config(#{auto_observe => true});
|
||||||
|
_ ->
|
||||||
|
default_config()
|
||||||
|
end,
|
||||||
|
ok = emqx_common_test_helpers:load_config(emqx_gateway_schema, GatewayConfig),
|
||||||
|
|
||||||
{ok, _} = application:ensure_all_started(emqx_gateway),
|
{ok, _} = application:ensure_all_started(emqx_gateway),
|
||||||
{ok, ClientUdpSock} = gen_udp:open(0, [binary, {active, false}]),
|
{ok, ClientUdpSock} = gen_udp:open(0, [binary, {active, false}]),
|
||||||
|
@ -187,7 +173,37 @@ end_per_testcase(_AllTestCase, Config) ->
|
||||||
ok = application:stop(emqx_gateway).
|
ok = application:stop(emqx_gateway).
|
||||||
|
|
||||||
default_config() ->
|
default_config() ->
|
||||||
?CONF_DEFAULT.
|
default_config(#{}).
|
||||||
|
|
||||||
|
default_config(Overrides) ->
|
||||||
|
iolist_to_binary(
|
||||||
|
io_lib:format(
|
||||||
|
"\n"
|
||||||
|
"gateway.lwm2m {\n"
|
||||||
|
" xml_dir = \"../../lib/emqx_gateway/src/lwm2m/lwm2m_xml\"\n"
|
||||||
|
" lifetime_min = 1s\n"
|
||||||
|
" lifetime_max = 86400s\n"
|
||||||
|
" qmode_time_window = 22\n"
|
||||||
|
" auto_observe = ~w\n"
|
||||||
|
" mountpoint = \"lwm2m/${username}\"\n"
|
||||||
|
" update_msg_publish_condition = contains_object_list\n"
|
||||||
|
" translators {\n"
|
||||||
|
" command = {topic = \"/dn/#\", qos = 0}\n"
|
||||||
|
" response = {topic = \"/up/resp\", qos = 0}\n"
|
||||||
|
" notify = {topic = \"/up/notify\", qos = 0}\n"
|
||||||
|
" register = {topic = \"/up/resp\", qos = 0}\n"
|
||||||
|
" update = {topic = \"/up/resp\", qos = 0}\n"
|
||||||
|
" }\n"
|
||||||
|
" listeners.udp.default {\n"
|
||||||
|
" bind = ~w\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n",
|
||||||
|
[
|
||||||
|
maps:get(auto_observe, Overrides, false),
|
||||||
|
maps:get(bind, Overrides, ?PORT)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
).
|
||||||
|
|
||||||
default_port() ->
|
default_port() ->
|
||||||
?PORT.
|
?PORT.
|
||||||
|
@ -762,6 +778,52 @@ case08_reregister(Config) ->
|
||||||
%% verify the lwm2m client is still online
|
%% verify the lwm2m client is still online
|
||||||
?assertEqual(ReadResult, test_recv_mqtt_response(ReportTopic)).
|
?assertEqual(ReadResult, test_recv_mqtt_response(ReportTopic)).
|
||||||
|
|
||||||
|
case09_auto_observe(Config) ->
|
||||||
|
UdpSock = ?config(sock, Config),
|
||||||
|
Epn = "urn:oma:lwm2m:oma:3",
|
||||||
|
MsgId1 = 15,
|
||||||
|
RespTopic = list_to_binary("lwm2m/" ++ Epn ++ "/up/resp"),
|
||||||
|
emqtt:subscribe(?config(emqx_c, Config), RespTopic, qos0),
|
||||||
|
timer:sleep(200),
|
||||||
|
|
||||||
|
ok = snabbkaffe:start_trace(),
|
||||||
|
|
||||||
|
%% step 1, device register ...
|
||||||
|
test_send_coap_request(
|
||||||
|
UdpSock,
|
||||||
|
post,
|
||||||
|
sprintf("coap://127.0.0.1:~b/rd?ep=~ts<=345&lwm2m=1", [?PORT, Epn]),
|
||||||
|
#coap_content{
|
||||||
|
content_format = <<"text/plain">>,
|
||||||
|
payload = <<
|
||||||
|
"</lwm2m>;rt=\"oma.lwm2m\";ct=11543,"
|
||||||
|
"</lwm2m/1/0>,</lwm2m/2/0>,</lwm2m/3/0>,</lwm2m/59102/0>"
|
||||||
|
>>
|
||||||
|
},
|
||||||
|
[],
|
||||||
|
MsgId1
|
||||||
|
),
|
||||||
|
#coap_message{method = Method1} = test_recv_coap_response(UdpSock),
|
||||||
|
?assertEqual({ok, created}, Method1),
|
||||||
|
|
||||||
|
#coap_message{
|
||||||
|
method = Method2,
|
||||||
|
token = Token2,
|
||||||
|
options = Options2
|
||||||
|
} = test_recv_coap_request(UdpSock),
|
||||||
|
?assertEqual(get, Method2),
|
||||||
|
?assertNotEqual(<<>>, Token2),
|
||||||
|
?assertMatch(
|
||||||
|
#{
|
||||||
|
observe := 0,
|
||||||
|
uri_path := [<<"lwm2m">>, <<"3">>, <<"0">>]
|
||||||
|
},
|
||||||
|
Options2
|
||||||
|
),
|
||||||
|
|
||||||
|
{ok, _} = ?block_until(#{?snk_kind := ignore_observer_resource}, 1000),
|
||||||
|
ok.
|
||||||
|
|
||||||
case10_read(Config) ->
|
case10_read(Config) ->
|
||||||
UdpSock = ?config(sock, Config),
|
UdpSock = ?config(sock, Config),
|
||||||
Epn = "urn:oma:lwm2m:oma:3",
|
Epn = "urn:oma:lwm2m:oma:3",
|
||||||
|
|
Loading…
Reference in New Issue