emqx_telemetry_api_SUITE.erl 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. %%--------------------------------------------------------------------
  2. %% Copyright (c) 2022-2024 EMQ Technologies Co., Ltd. All Rights Reserved.
  3. %%
  4. %% Licensed under the Apache License, Version 2.0 (the "License");
  5. %% you may not use this file except in compliance with the License.
  6. %% You may obtain a copy of the License at
  7. %% http://www.apache.org/licenses/LICENSE-2.0
  8. %%
  9. %% Unless required by applicable law or agreed to in writing, software
  10. %% distributed under the License is distributed on an "AS IS" BASIS,
  11. %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. %% See the License for the specific language governing permissions and
  13. %% limitations under the License.
  14. %%--------------------------------------------------------------------
  15. -module(emqx_telemetry_api_SUITE).
  16. -compile(nowarn_export_all).
  17. -compile(export_all).
  18. -import(emqx_mgmt_api_test_util, [request/2, request/3, uri/1]).
  19. -include_lib("eunit/include/eunit.hrl").
  20. -include_lib("common_test/include/ct.hrl").
  21. -define(BASE_CONF, #{}).
  22. all() ->
  23. emqx_common_test_helpers:all(?MODULE).
  24. init_per_suite(Config) ->
  25. ok = emqx_common_test_helpers:load_config(emqx_modules_schema, ?BASE_CONF),
  26. ok = emqx_common_test_helpers:load_config(emqx_telemetry_schema, ?BASE_CONF),
  27. ok = emqx_mgmt_api_test_util:init_suite(
  28. [emqx_conf, emqx_auth, emqx_management, emqx_telemetry],
  29. fun set_special_configs/1
  30. ),
  31. Config.
  32. end_per_suite(_Config) ->
  33. {ok, _} = emqx:update_config(
  34. [authorization],
  35. #{
  36. <<"no_match">> => <<"allow">>,
  37. <<"cache">> => #{<<"enable">> => <<"true">>},
  38. <<"sources">> => []
  39. }
  40. ),
  41. emqx_mgmt_api_test_util:end_suite([
  42. emqx_conf, emqx_auth, emqx_management, emqx_telemetry
  43. ]),
  44. ok.
  45. init_per_testcase(t_status_non_official, Config) ->
  46. meck:new(emqx_telemetry_config, [non_strict, passthrough]),
  47. meck:expect(emqx_telemetry_config, is_official_version, 0, false),
  48. %% check non-official telemetry is disable by default
  49. {ok, _} = emqx:update_config([telemetry], #{}),
  50. Config;
  51. init_per_testcase(t_status_official, Config) ->
  52. meck:new(emqx_telemetry_config, [non_strict, passthrough]),
  53. meck:expect(emqx_telemetry_config, is_official_version, 0, true),
  54. %% check official telemetry is enable by default
  55. {ok, _} = emqx:update_config([telemetry], #{}),
  56. Config;
  57. init_per_testcase(_TestCase, Config) ->
  58. %% Force enable telemetry to check data.
  59. {ok, _} = emqx:update_config([telemetry], #{<<"enable">> => true}),
  60. Config.
  61. end_per_testcase(t_status_non_official, _Config) ->
  62. meck:unload(emqx_telemetry_config);
  63. end_per_testcase(t_status, _Config) ->
  64. meck:unload(emqx_telemetry_config);
  65. end_per_testcase(_TestCase, _Config) ->
  66. ok.
  67. set_special_configs(emqx_dashboard) ->
  68. emqx_dashboard_api_test_helpers:set_default_config();
  69. set_special_configs(emqx_authz) ->
  70. {ok, _} = emqx:update_config([authorization, cache, enable], false),
  71. {ok, _} = emqx:update_config([authorization, no_match], deny),
  72. {ok, _} = emqx:update_config([authorization, sources], []),
  73. ok;
  74. set_special_configs(_App) ->
  75. ok.
  76. %%------------------------------------------------------------------------------
  77. %% Tests
  78. %%------------------------------------------------------------------------------
  79. %% official's telemetry is enabled by default
  80. t_status_official(_) ->
  81. check_status(true).
  82. %% non official's telemetry is disabled by default
  83. t_status_non_official(_) ->
  84. check_status(false).
  85. check_status(Default) ->
  86. ct:pal("Check telemetry status:~p~n", [emqx_telemetry_config:is_official_version()]),
  87. ?assertEqual(Default, is_telemetry_process_enabled()),
  88. ?assertMatch(
  89. {ok, 200, _},
  90. request(
  91. put,
  92. uri(["telemetry", "status"]),
  93. #{<<"enable">> => (not Default)}
  94. )
  95. ),
  96. {ok, 200, Result0} =
  97. request(get, uri(["telemetry", "status"])),
  98. ?assertEqual(
  99. #{<<"enable">> => (not Default)},
  100. emqx_utils_json:decode(Result0)
  101. ),
  102. ?assertEqual((not Default), is_telemetry_process_enabled()),
  103. ?assertMatch(
  104. {ok, 400, _},
  105. request(
  106. put,
  107. uri(["telemetry", "status"]),
  108. #{<<"enable">> => (not Default)}
  109. )
  110. ),
  111. ?assertEqual((not Default), is_telemetry_process_enabled()),
  112. ?assertMatch(
  113. {ok, 200, _},
  114. request(
  115. put,
  116. uri(["telemetry", "status"]),
  117. #{<<"enable">> => Default}
  118. )
  119. ),
  120. {ok, 200, Result1} =
  121. request(get, uri(["telemetry", "status"])),
  122. ?assertEqual(
  123. #{<<"enable">> => Default},
  124. emqx_utils_json:decode(Result1)
  125. ),
  126. ?assertEqual(Default, is_telemetry_process_enabled()),
  127. ?assertMatch(
  128. {ok, 400, _},
  129. request(
  130. put,
  131. uri(["telemetry", "status"]),
  132. #{<<"enable">> => Default}
  133. )
  134. ),
  135. ?assertEqual(Default, is_telemetry_process_enabled()),
  136. ok.
  137. t_data(_) ->
  138. ?assert(is_telemetry_process_enabled()),
  139. {ok, 200, Result} =
  140. request(get, uri(["telemetry", "data"])),
  141. ?assertMatch(
  142. #{
  143. <<"active_plugins">> := _,
  144. <<"advanced_mqtt_features">> := _,
  145. <<"build_info">> := _,
  146. <<"emqx_version">> := _,
  147. <<"license">> := _,
  148. <<"messages_received">> := _,
  149. <<"mqtt_runtime_insights">> := _,
  150. <<"nodes_uuid">> := _,
  151. <<"os_name">> := _,
  152. <<"otp_version">> := _,
  153. <<"uuid">> := _,
  154. <<"vm_specs">> := _
  155. },
  156. emqx_utils_json:decode(Result)
  157. ),
  158. {ok, 200, _} =
  159. request(
  160. put,
  161. uri(["telemetry", "status"]),
  162. #{<<"enable">> => false}
  163. ),
  164. {ok, 404, _} =
  165. request(get, uri(["telemetry", "data"])),
  166. ok.
  167. %% Support emqx:update_config([telemetry], Conf).
  168. t_conf_update(_) ->
  169. Conf = emqx:get_raw_config([telemetry]),
  170. ?assert(is_telemetry_process_enabled()),
  171. {ok, 200, Result1} = request(get, uri(["telemetry", "status"])),
  172. ?assertEqual(#{<<"enable">> => true}, emqx_utils_json:decode(Result1)),
  173. {ok, _} = emqx:update_config([telemetry], Conf#{<<"enable">> => false}),
  174. {ok, 200, Result2} = request(get, uri(["telemetry", "status"])),
  175. ?assertEqual(#{<<"enable">> => false}, emqx_utils_json:decode(Result2)),
  176. ?assertNot(is_telemetry_process_enabled()),
  177. %% reset to true
  178. {ok, _} = emqx:update_config([telemetry], Conf#{<<"enable">> => true}),
  179. ?assert(is_telemetry_process_enabled()),
  180. ok.
  181. is_telemetry_process_enabled() ->
  182. %% timer is not undefined.
  183. Timer = element(6, sys:get_state(emqx_telemetry)),
  184. is_reference(Timer).