@@ -3,6 +3,7 @@ local yaml = require('yaml')
33local socket = require (' socket' )
44local helpers = require (' test.helpers' )
55local server = require (' test.helpers.server' )
6+ local http_client = require (' http.client' ):new ()
67
78local t = require (' luatest' )
89local g = t .group ()
@@ -57,6 +58,26 @@ local function change_listen_target_in_config(cg, old_addr, new_addr)
5758 file :close ()
5859end
5960
61+ local function change_http_addr_in_config (cg , new_addr , server_name )
62+ if server_name == nil then
63+ server_name = ' default'
64+ end
65+
66+ local file = fio .open (fio .pathjoin (cg .workdir , ' config.yaml' ), {' O_RDONLY' })
67+ t .assert (file ~= nil )
68+
69+ local cfg = file :read ()
70+ file :close ()
71+
72+ cfg = yaml .decode (cfg )
73+ cfg .groups [' group-001' ].replicasets [' replicaset-001' ].
74+ instances .master .roles_cfg [' roles.httpd' ][server_name ].listen = new_addr
75+
76+ file = fio .open (fio .pathjoin (cg .workdir , ' config.yaml' ), {' O_CREAT' , ' O_WRONLY' , ' O_TRUNC' }, tonumber (' 644' , 8 ))
77+ file :write (yaml .encode (cfg ))
78+ file :close ()
79+ end
80+
6081g .test_reload_config_update_addr = function (cg )
6182 cg .server = server :new ({
6283 config_file = fio .pathjoin (cg .workdir , ' config.yaml' ),
@@ -100,3 +121,36 @@ g.test_reload_config_global_addr_conflict = function(cg)
100121 function () cg .server :eval (" require('config'):reload()" ) end
101122 )
102123end
124+
125+ g .test_reload_config_routes_exists = function (cg )
126+ cg .server = server :new ({
127+ config_file = fio .pathjoin (cg .workdir , ' config.yaml' ),
128+ chdir = cg .workdir ,
129+ alias = ' master' ,
130+ workdir = cg .workdir ,
131+ })
132+
133+ cg .server :start ({wait_until_ready = true })
134+
135+ local response = http_client :get (' localhost:8085/metrics/prometheus' )
136+ t .assert_equals (response .status , 200 )
137+ t .assert (response .body )
138+
139+ local _ , err = cg .server :eval (" require('config'):reload()" )
140+ t .assert_not (err )
141+
142+ response = http_client :get (' localhost:8085/metrics/prometheus' )
143+ t .assert_equals (response .status , 200 )
144+ t .assert (response .body )
145+
146+ change_http_addr_in_config (cg , 8088 )
147+ _ , err = cg .server :eval (" require('config'):reload()" )
148+ t .assert_not (err )
149+
150+ response = http_client :get (' localhost:8085/metrics/prometheus' )
151+ t .assert_equals (response .status , 595 )
152+
153+ response = http_client :get (' localhost:8088/metrics/prometheus' )
154+ t .assert_equals (response .status , 200 )
155+ t .assert (response .body )
156+ end
0 commit comments