Explorar el Código

fix(dashboard): add test case & update change

firest hace 2 años
padre
commit
13df7fa46e

+ 13 - 6
apps/emqx_dashboard/src/emqx_dashboard_listener.erl

@@ -149,12 +149,13 @@ remove_sensitive_data(Conf0) ->
 post_config_update(_, {change_i18n_lang, _}, _NewConf, _OldConf, _AppEnvs) ->
     delay_job(regenerate);
 post_config_update(_, _Req, NewConf, OldConf, _AppEnvs) ->
+    SwaggerSupport = diff_swagger_support(NewConf, OldConf),
     OldHttp = get_listener(http, OldConf),
     OldHttps = get_listener(https, OldConf),
     NewHttp = get_listener(http, NewConf),
     NewHttps = get_listener(https, NewConf),
-    {StopHttp, StartHttp} = diff_listeners(http, OldHttp, NewHttp),
-    {StopHttps, StartHttps} = diff_listeners(https, OldHttps, NewHttps),
+    {StopHttp, StartHttp} = diff_listeners(http, OldHttp, NewHttp, SwaggerSupport),
+    {StopHttps, StartHttps} = diff_listeners(https, OldHttps, NewHttps, SwaggerSupport),
     Stop = maps:merge(StopHttp, StopHttps),
     Start = maps:merge(StartHttp, StartHttps),
     delay_job({update_listeners, Stop, Start}).
@@ -168,10 +169,16 @@ delay_job(Msg) ->
 get_listener(Type, Conf) ->
     emqx_utils_maps:deep_get([listeners, Type], Conf, undefined).
 
-diff_listeners(_, Listener, Listener) -> {#{}, #{}};
-diff_listeners(Type, undefined, Start) -> {#{}, #{Type => Start}};
-diff_listeners(Type, Stop, undefined) -> {#{Type => Stop}, #{}};
-diff_listeners(Type, Stop, Start) -> {#{Type => Stop}, #{Type => Start}}.
+diff_swagger_support(NewConf, OldConf) ->
+    maps:get(swagger_support, NewConf, true) =:=
+        maps:get(swagger_support, OldConf, true).
+
+diff_listeners(_, undefined, undefined, _) -> {#{}, #{}};
+diff_listeners(_, Listener, Listener, true) -> {#{}, #{}};
+diff_listeners(Type, undefined, Start, _) -> {#{}, #{Type => Start}};
+diff_listeners(Type, Stop, undefined, _) -> {#{Type => Stop}, #{}};
+diff_listeners(Type, Listener, Listener, false) -> {#{Type => Listener}, #{Type => Listener}};
+diff_listeners(Type, Stop, Start, _) -> {#{Type => Stop}, #{Type => Start}}.
 
 -define(DIR, <<"dashboard">>).
 

+ 33 - 0
apps/emqx_dashboard/test/emqx_dashboard_SUITE.erl

@@ -31,6 +31,7 @@
 -include_lib("eunit/include/eunit.hrl").
 -include_lib("common_test/include/ct.hrl").
 -include_lib("emqx/include/emqx.hrl").
+-include_lib("snabbkaffe/include/snabbkaffe.hrl").
 -include("emqx_dashboard.hrl").
 
 -define(CONTENT_TYPE, "application/x-www-form-urlencoded").
@@ -188,6 +189,38 @@ t_swagger_json(_Config) ->
     ),
     ok.
 
+t_disable_swagger_json(_Config) ->
+    Url = ?HOST ++ "/api-docs/index.html",
+
+    ?assertMatch(
+        {ok, {{"HTTP/1.1", 200, "OK"}, __, _}},
+        httpc:request(get, {Url, []}, [], [{body_format, binary}])
+    ),
+
+    DashboardCfg = emqx:get_raw_config([dashboard]),
+    DashboardCfg2 = DashboardCfg#{<<"swagger_support">> => false},
+    emqx:update_config([dashboard], DashboardCfg2),
+    ?retry(
+        _Sleep = 1000,
+        _Attempts = 5,
+        ?assertMatch(
+            {ok, {{"HTTP/1.1", 404, "Not Found"}, _, _}},
+            httpc:request(get, {Url, []}, [], [{body_format, binary}])
+        )
+    ),
+
+    DashboardCfg3 = DashboardCfg#{<<"swagger_support">> => true},
+    emqx:update_config([dashboard], DashboardCfg3),
+    ?retry(
+        _Sleep0 = 1000,
+        _Attempts0 = 5,
+        ?assertMatch(
+            {ok, {{"HTTP/1.1", 200, "OK"}, __, _}},
+            httpc:request(get, {Url, []}, [], [{body_format, binary}])
+        )
+    ),
+    ok.
+
 t_cli(_Config) ->
     [mria:dirty_delete(?ADMIN, Admin) || Admin <- mnesia:dirty_all_keys(?ADMIN)],
     emqx_dashboard_cli:admins(["add", "username", "password_ww2"]),

+ 1 - 0
changes/ce/feat-12398.en.md

@@ -0,0 +1 @@
+Exposed the `swagger_support` option in configuration for Dashboard to disable the swagger API document.