• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3"""
4Copyright (c) 2024 Huawei Device Co., Ltd.
5Licensed under the Apache License, Version 2.0 (the "License");
6you may not use this file except in compliance with the License.
7You may obtain a copy of the License at
8
9    http://www.apache.org/licenses/LICENSE-2.0
10
11Unless required by applicable law or agreed to in writing, software
12distributed under the License is distributed on an "AS IS" BASIS,
13WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14See the License for the specific language governing permissions and
15limitations under the License.
16
17Description: Scenario test case.
18"""
19
20import json
21import logging
22import os
23import time
24
25import pytest
26
27from aw import Application
28from aw import Utils
29from aw import communicate_with_debugger_server
30from aw import debugger, runtime
31
32
33@pytest.mark.debug
34@pytest.mark.timeout(30)
35class TestDebug01:
36    """
37    测试用例:多实例调试_01
38    测试步骤:
39        1.  连接 connect server
40        2.  连接主线程 debugger server
41        3.  主线程文件 Index.ts 设置断点,恢复执行并命中断点
42        4.  连接 worker 线程 debugger server
43        5.  子线程文件 Worker.ts 设置断点
44        6.  主线程 step over,发送消息给子线程,主线程暂停在下一行,子线程命中断点
45        7.  子线程 step over,暂停在下一行,随后 getProperties
46        8.  主线程 step over,暂停在下一行
47        9.  主线程 resume,命中断点
48        10. 主线程 step over,暂停在下一行
49        11. 主线程 resume, 执行结束
50        12. 子线程销毁,对应的 debugger server 连接断开
51        13. 关闭主线程 debugger server 和 connect server 连接
52    """
53
54    def setup_method(self):
55        logging.info('Start running TestDebug01: setup')
56
57        self.log_path = rf'{os.path.dirname(__file__)}\..\log'
58        self.hilog_file_name = 'test_debug_01.hilog.txt'
59        self.id_generator = Utils.message_id_generator()
60
61        # receive the hilog before the test start
62        Utils.clear_fault_log()
63        self.hilog_process, self.write_thread = Utils.save_hilog(log_path=self.log_path,
64                                                                 file_name=self.hilog_file_name,
65                                                                 debug_on=True)
66
67    def teardown_method(self):
68        Application.uninstall(self.config['bundle_name'])
69
70        # terminate the hilog receive process after the test done
71        time.sleep(3)
72        self.hilog_process.stdout.close()
73        self.hilog_process.terminate()
74        self.hilog_process.wait()
75        self.write_thread.join()
76
77        Utils.save_fault_log(log_path=self.log_path)
78        logging.info('TestDebug01 done')
79
80    def test(self, test_suite_debug_01):
81        logging.info('Start running TestDebug01: test')
82        self.config = test_suite_debug_01
83        websocket = self.config['websocket']
84        taskpool = self.config['taskpool']
85        pid = self.config['pid']
86
87        taskpool.submit(websocket.main_task(taskpool, websocket, self.procedure, pid))
88        taskpool.await_taskpool()
89        taskpool.task_join()
90        if taskpool.task_exception:
91            raise taskpool.task_exception
92
93    async def procedure(self, websocket):
94        ################################################################################################################
95        # main thread: connect the debugger server
96        ################################################################################################################
97        send_msg = {"type": "connected"}
98        await websocket.send_msg_to_connect_server(send_msg)
99        response = await websocket.recv_msg_of_connect_server()
100        response = json.loads(response)
101        assert response['type'] == 'addInstance'
102        assert response['instanceId'] == 0, logging.error('instance id of the main thread not equal to 0')
103        assert response['tid'] == self.config['pid']
104        main_thread_instance_id = await websocket.get_instance()
105        main_thread_to_send_queue = websocket.to_send_msg_queues[main_thread_instance_id]
106        main_thread_received_queue = websocket.received_msg_queues[main_thread_instance_id]
107        logging.info(f'Connect to the debugger server of instance: {main_thread_instance_id}')
108        ################################################################################################################
109        # main thread: runtime.enable
110        ################################################################################################################
111        message_id = next(self.id_generator)
112        response = await communicate_with_debugger_server(main_thread_instance_id,
113                                                          main_thread_to_send_queue,
114                                                          main_thread_received_queue,
115                                                          runtime.enable(), message_id)
116        assert json.loads(response) == {"id": message_id, "result": {"protocols": []}}
117
118        ################################################################################################################
119        # main thread: debugger.enable
120        ################################################################################################################
121        message_id = next(self.id_generator)
122        response = await communicate_with_debugger_server(main_thread_instance_id,
123                                                          main_thread_to_send_queue,
124                                                          main_thread_received_queue,
125                                                          debugger.enable(), message_id)
126        assert json.loads(response) == {"id": message_id, "result": {"debuggerId": "0",
127                                                                     "protocols": Utils.get_custom_protocols()}}
128        ################################################################################################################
129        # main thread: runtime.run_if_waiting_for_debugger
130        ################################################################################################################
131        message_id = next(self.id_generator)
132        response = await communicate_with_debugger_server(main_thread_instance_id,
133                                                          main_thread_to_send_queue,
134                                                          main_thread_received_queue,
135                                                          runtime.run_if_waiting_for_debugger(), message_id)
136        assert json.loads(response) == {"id": message_id, "result": {}}
137        ################################################################################################################
138        # main thread: Debugger.scriptParsed
139        ################################################################################################################
140        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id,
141                                                               main_thread_received_queue)
142        response = json.loads(response)
143        assert response['method'] == 'Debugger.scriptParsed'
144        assert response['params']['url'] == 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts'
145        assert response['params']['endLine'] == 0
146        ################################################################################################################
147        # main thread: Debugger.paused
148        ################################################################################################################
149        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id,
150                                                               main_thread_received_queue)
151        response = json.loads(response)
152        assert response['method'] == 'Debugger.paused'
153        assert (response['params']['callFrames'][0]['url'] ==
154                'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts')
155        assert response['params']['reason'] == 'Break on start'
156        ################################################################################################################
157        # main thread: Debugger.resume
158        ################################################################################################################
159        message_id = next(self.id_generator)
160        response = await communicate_with_debugger_server(main_thread_instance_id,
161                                                          main_thread_to_send_queue,
162                                                          main_thread_received_queue,
163                                                          debugger.resume(), message_id)
164        assert json.loads(response) == {"method": "Debugger.resumed", "params": {}}
165        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id,
166                                                               main_thread_received_queue)
167        assert json.loads(response) == {"id": message_id, "result": {}}
168        ################################################################################################################
169        # main thread: Debugger.scriptParsed
170        ################################################################################################################
171        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id,
172                                                               main_thread_received_queue)
173        response = json.loads(response)
174        assert response['method'] == 'Debugger.scriptParsed'
175        assert response['params']['url'] == 'entry|entry|1.0.0|src/main/ets/pages/Index.ts'
176        assert response['params']['endLine'] == 0
177        ################################################################################################################
178        # main thread: Debugger.paused
179        ################################################################################################################
180        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id,
181                                                               main_thread_received_queue)
182        response = json.loads(response)
183        assert response['method'] == 'Debugger.paused'
184        assert response['params']['callFrames'][0]['url'] == 'entry|entry|1.0.0|src/main/ets/pages/Index.ts'
185        assert response['params']['reason'] == 'Break on start'
186        ################################################################################################################
187        # main thread: Debugger.removeBreakpointsByUrl
188        ################################################################################################################
189        url = 'entry|entry|1.0.0|src/main/ets/pages/Index.ts'
190        message_id = next(self.id_generator)
191        response = await communicate_with_debugger_server(main_thread_instance_id,
192                                                          main_thread_to_send_queue,
193                                                          main_thread_received_queue,
194                                                          debugger.remove_breakpoints_by_url(url), message_id)
195        assert json.loads(response) == {"id": message_id, "result": {}}
196        ################################################################################################################
197        # main thread: Debugger.getPossibleAndSetBreakpointByUrl
198        ################################################################################################################
199        message_id = next(self.id_generator)
200        locations = [debugger.BreakLocationUrl(url='entry|entry|1.0.0|src/main/ets/pages/Index.ts', line_number=22),
201                     debugger.BreakLocationUrl(url='entry|entry|1.0.0|src/main/ets/pages/Index.ts', line_number=26)]
202        response = await communicate_with_debugger_server(main_thread_instance_id,
203                                                          main_thread_to_send_queue,
204                                                          main_thread_received_queue,
205                                                          debugger.get_possible_and_set_breakpoint_by_url(locations),
206                                                          message_id)
207        response = json.loads(response)
208        assert response['id'] == message_id
209        assert response['result']['locations'][0]['id'] == 'id:22:0:entry|entry|1.0.0|src/main/ets/pages/Index.ts'
210        assert response['result']['locations'][1]['id'] == 'id:26:0:entry|entry|1.0.0|src/main/ets/pages/Index.ts'
211        ################################################################################################################
212        # main thread: Debugger.resume
213        ################################################################################################################
214        message_id = next(self.id_generator)
215        response = await communicate_with_debugger_server(main_thread_instance_id,
216                                                          main_thread_to_send_queue,
217                                                          main_thread_received_queue,
218                                                          debugger.resume(), message_id)
219        assert json.loads(response) == {"method": "Debugger.resumed", "params": {}}
220        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id, main_thread_received_queue)
221        assert json.loads(response) == {"id": message_id, "result": {}}
222        ################################################################################################################
223        # main thread: Debugger.paused, hit breakpoint
224        ################################################################################################################
225        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id,
226                                                               main_thread_received_queue)
227        response = json.loads(response)
228        assert response['method'] == 'Debugger.paused'
229        assert response['params']['callFrames'][0]['url'] == 'entry|entry|1.0.0|src/main/ets/pages/Index.ts'
230        assert response['params']['hitBreakpoints'] == ["id:22:4:entry|entry|1.0.0|src/main/ets/pages/Index.ts"]
231        ################################################################################################################
232        # worker thread: connect the debugger server
233        ################################################################################################################
234        response = await websocket.recv_msg_of_connect_server()
235        response = json.loads(response)
236        assert response['type'] == 'addInstance'
237        assert response['instanceId'] != 0
238        assert response['tid'] != self.config['pid']
239        assert 'workerThread_' in response['name']
240        worker_instance_id = await websocket.get_instance()
241        worker_thread_to_send_queue = websocket.to_send_msg_queues[worker_instance_id]
242        worker_thread_received_queue = websocket.received_msg_queues[worker_instance_id]
243        logging.info(f'Connect to the debugger server of instance: {worker_instance_id}')
244        ################################################################################################################
245        # main thread: Runtime.getProperties.
246        ################################################################################################################
247        message_id = next(self.id_generator)
248        response = await communicate_with_debugger_server(main_thread_instance_id,
249                                                          main_thread_to_send_queue,
250                                                          main_thread_received_queue,
251                                                          runtime.get_properties(object_id='0',
252                                                                                 own_properties=True,
253                                                                                 accessor_properties_only=False,
254                                                                                 generate_preview=True),
255                                                          message_id)
256        response = json.loads(response)
257        assert response['id'] == message_id
258        assert response['result']['result'][0]['name'] == 'newWorker'
259        assert response['result']['result'][0]['value']['type'] == 'function'
260        ################################################################################################################
261        # worker thread: runtime.enable
262        ################################################################################################################
263        message_id = next(self.id_generator)
264        response = await communicate_with_debugger_server(worker_instance_id,
265                                                          worker_thread_to_send_queue,
266                                                          worker_thread_received_queue,
267                                                          runtime.enable(), message_id)
268        assert json.loads(response) == {"id": message_id, "result": {"protocols": []}}
269        ################################################################################################################
270        # worker thread: debugger.enable
271        ################################################################################################################
272        message_id = next(self.id_generator)
273        response = await communicate_with_debugger_server(worker_instance_id,
274                                                          worker_thread_to_send_queue,
275                                                          worker_thread_received_queue,
276                                                          debugger.enable(), message_id)
277        assert json.loads(response) == {"id": message_id, "result": {"debuggerId": "0",
278                                                                     "protocols": Utils.get_custom_protocols()}}
279        ################################################################################################################
280        # worker thread: runtime.run_if_waiting_for_debugger
281        ################################################################################################################
282        message_id = next(self.id_generator)
283        response = await communicate_with_debugger_server(worker_instance_id,
284                                                          worker_thread_to_send_queue,
285                                                          worker_thread_received_queue,
286                                                          runtime.run_if_waiting_for_debugger(), message_id)
287        assert json.loads(response) == {"id": message_id, "result": {}}
288        ################################################################################################################
289        # worker thread: Debugger.scriptParsed
290        ################################################################################################################
291        response = await websocket.recv_msg_of_debugger_server(worker_instance_id, worker_thread_received_queue)
292        response = json.loads(response)
293        assert response['method'] == 'Debugger.scriptParsed'
294        assert response['params']['url'] == 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts'
295        assert response['params']['endLine'] == 0
296        ################################################################################################################
297        # worker thread: Debugger.paused
298        ################################################################################################################
299        response = await websocket.recv_msg_of_debugger_server(worker_instance_id, worker_thread_received_queue)
300        response = json.loads(response)
301        assert response['method'] == 'Debugger.paused'
302        assert response['params']['callFrames'][0]['url'] == 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts'
303        assert response['params']['reason'] == 'Break on start'
304        ################################################################################################################
305        # worker thread: Debugger.removeBreakpointsByUrl
306        ################################################################################################################
307        url = 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts'
308        message_id = next(self.id_generator)
309        response = await communicate_with_debugger_server(worker_instance_id,
310                                                          worker_thread_to_send_queue,
311                                                          worker_thread_received_queue,
312                                                          debugger.remove_breakpoints_by_url(url), message_id)
313        assert json.loads(response) == {"id": message_id, "result": {}}
314        ################################################################################################################
315        # worker thread: Debugger.getPossibleAndSetBreakpointByUrl
316        ################################################################################################################
317        message_id = next(self.id_generator)
318        locations = [debugger.BreakLocationUrl(url='entry|entry|1.0.0|src/main/ets/workers/Worker.ts', line_number=17),
319                     debugger.BreakLocationUrl(url='entry|entry|1.0.0|src/main/ets/workers/Worker.ts', line_number=20)]
320        response = await communicate_with_debugger_server(worker_instance_id,
321                                                          worker_thread_to_send_queue,
322                                                          worker_thread_received_queue,
323                                                          debugger.get_possible_and_set_breakpoint_by_url(locations),
324                                                          message_id)
325        response = json.loads(response)
326        assert response['id'] == message_id
327        assert response['result']['locations'][0]['id'] == 'id:17:0:entry|entry|1.0.0|src/main/ets/workers/Worker.ts'
328        assert response['result']['locations'][1]['id'] == 'id:20:0:entry|entry|1.0.0|src/main/ets/workers/Worker.ts'
329        ################################################################################################################
330        # worker thread: Debugger.resume
331        ################################################################################################################
332        message_id = next(self.id_generator)
333        response = await communicate_with_debugger_server(worker_instance_id,
334                                                          worker_thread_to_send_queue,
335                                                          worker_thread_received_queue,
336                                                          debugger.resume(), message_id)
337        assert json.loads(response) == {"method": "Debugger.resumed", "params": {}}
338        response = await websocket.recv_msg_of_debugger_server(worker_instance_id, worker_thread_received_queue)
339        assert json.loads(response) == {"id": message_id, "result": {}}
340        ################################################################################################################
341        # main thread: step over
342        ################################################################################################################
343        message_id = next(self.id_generator)
344        response = await communicate_with_debugger_server(main_thread_instance_id,
345                                                          main_thread_to_send_queue,
346                                                          main_thread_received_queue,
347                                                          debugger.step_over(), message_id)
348        assert json.loads(response) == {"method": "Debugger.resumed", "params": {}}
349        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id, main_thread_received_queue)
350        assert json.loads(response) == {"id": message_id, "result": {}}
351        # main thread: Debugger.paused
352        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id, main_thread_received_queue)
353        response = json.loads(response)
354        assert response['method'] == 'Debugger.paused'
355        assert response['params']['callFrames'][0]['url'] == 'entry|entry|1.0.0|src/main/ets/pages/Index.ts'
356        assert response['params']['reason'] == 'other'
357        assert response['params']['hitBreakpoints'] == []
358        # worker thread: Debugger.paused
359        response = await websocket.recv_msg_of_debugger_server(worker_instance_id, worker_thread_received_queue)
360        response = json.loads(response)
361        assert response['method'] == 'Debugger.paused'
362        assert response['params']['callFrames'][0]['url'] == 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts'
363        assert response['params']['reason'] == 'other'
364        assert response['params']['hitBreakpoints'] == ["id:17:8:entry|entry|1.0.0|src/main/ets/workers/Worker.ts"]
365        ################################################################################################################
366        # worker thread: step over
367        ################################################################################################################
368        message_id = next(self.id_generator)
369        response = await communicate_with_debugger_server(worker_instance_id,
370                                                          worker_thread_to_send_queue,
371                                                          worker_thread_received_queue,
372                                                          debugger.step_over(), message_id)
373        assert json.loads(response) == {"method": "Debugger.resumed", "params": {}}
374        response = await websocket.recv_msg_of_debugger_server(worker_instance_id, worker_thread_received_queue)
375        assert json.loads(response) == {"id": message_id, "result": {}}
376        # worker thread: Debugger.paused
377        response = await websocket.recv_msg_of_debugger_server(worker_instance_id, worker_thread_received_queue)
378        response = json.loads(response)
379        assert response['method'] == 'Debugger.paused'
380        assert response['params']['callFrames'][0]['url'] == 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts'
381        assert response['params']['reason'] == 'other'
382        assert response['params']['hitBreakpoints'] == []
383        ################################################################################################################
384        # worker thread: Runtime.getProperties.
385        ################################################################################################################
386        message_id = next(self.id_generator)
387        response = await communicate_with_debugger_server(worker_instance_id,
388                                                          worker_thread_to_send_queue,
389                                                          worker_thread_received_queue,
390                                                          runtime.get_properties(object_id='0',
391                                                                                 own_properties=True,
392                                                                                 accessor_properties_only=False,
393                                                                                 generate_preview=True),
394                                                          message_id)
395        response = json.loads(response)
396        assert response['id'] == message_id
397        assert response['result']['result'][0]['name'] == ''
398        assert response['result']['result'][0]['value']['type'] == 'function'
399        assert response['result']['result'][1]['name'] == 'str'
400        assert response['result']['result'][1]['value']['type'] == 'string'
401        assert response['result']['result'][2]['name'] == 'e'
402        assert response['result']['result'][2]['value']['type'] == 'object'
403        ################################################################################################################
404        # main thread: step over
405        ################################################################################################################
406        message_id = next(self.id_generator)
407        response = await communicate_with_debugger_server(main_thread_instance_id,
408                                                          main_thread_to_send_queue,
409                                                          main_thread_received_queue,
410                                                          debugger.step_over(), message_id)
411        assert json.loads(response) == {"method": "Debugger.resumed", "params": {}}
412        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id, main_thread_received_queue)
413        assert json.loads(response) == {"id": message_id, "result": {}}
414        # main thread: Debugger.paused
415        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id, main_thread_received_queue)
416        response = json.loads(response)
417        assert response['method'] == 'Debugger.paused'
418        assert response['params']['callFrames'][0]['location']['lineNumber'] == 25
419        assert response['params']['callFrames'][0]['url'] == 'entry|entry|1.0.0|src/main/ets/pages/Index.ts'
420        assert response['params']['callFrames'][1]['location']['lineNumber'] == 40
421        assert response['params']['reason'] == 'other'
422        assert response['params']['hitBreakpoints'] == []
423        ################################################################################################################
424        # main thread: Debugger.resume
425        ################################################################################################################
426        message_id = next(self.id_generator)
427        response = await communicate_with_debugger_server(main_thread_instance_id,
428                                                          main_thread_to_send_queue,
429                                                          main_thread_received_queue,
430                                                          debugger.resume(), message_id)
431        assert json.loads(response) == {"method": "Debugger.resumed", "params": {}}
432        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id, main_thread_received_queue)
433        assert json.loads(response) == {"id": message_id, "result": {}}
434        # main thread: Debugger.paused
435        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id, main_thread_received_queue)
436        response = json.loads(response)
437        assert response['method'] == 'Debugger.paused'
438        assert response['params']['callFrames'][0]['location']['lineNumber'] == 26
439        assert response['params']['callFrames'][0]['url'] == 'entry|entry|1.0.0|src/main/ets/pages/Index.ts'
440        assert response['params']['reason'] == 'other'
441        assert response['params']['hitBreakpoints'] == ['id:26:8:entry|entry|1.0.0|src/main/ets/pages/Index.ts']
442        ################################################################################################################
443        # main thread: step over
444        ################################################################################################################
445        message_id = next(self.id_generator)
446        response = await communicate_with_debugger_server(main_thread_instance_id,
447                                                          main_thread_to_send_queue,
448                                                          main_thread_received_queue,
449                                                          debugger.step_over(), message_id)
450        assert json.loads(response) == {"method": "Debugger.resumed", "params": {}}
451        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id, main_thread_received_queue)
452        assert json.loads(response) == {"id": message_id, "result": {}}
453        # main thread: Debugger.paused
454        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id, main_thread_received_queue)
455        response = json.loads(response)
456        assert response['method'] == 'Debugger.paused'
457        assert response['params']['callFrames'][0]['location']['lineNumber'] == 27
458        assert response['params']['callFrames'][0]['url'] == 'entry|entry|1.0.0|src/main/ets/pages/Index.ts'
459        assert response['params']['reason'] == 'other'
460        assert response['params']['hitBreakpoints'] == []
461        ################################################################################################################
462        # main thread: Debugger.resume
463        ################################################################################################################
464        message_id = next(self.id_generator)
465        response = await communicate_with_debugger_server(main_thread_instance_id,
466                                                          main_thread_to_send_queue,
467                                                          main_thread_received_queue,
468                                                          debugger.resume(), message_id)
469        assert json.loads(response) == {"method": "Debugger.resumed", "params": {}}
470        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id, main_thread_received_queue)
471        assert json.loads(response) == {"id": message_id, "result": {}}
472        ################################################################################################################
473        # worker thread: Debugger.disable
474        ################################################################################################################
475        message_id = next(self.id_generator)
476        response = await communicate_with_debugger_server(worker_instance_id,
477                                                          worker_thread_to_send_queue,
478                                                          worker_thread_received_queue,
479                                                          debugger.disable(), message_id)
480        assert json.loads(response) == {"method": "Debugger.resumed", "params": {}}
481        response = await websocket.recv_msg_of_debugger_server(worker_instance_id, worker_thread_received_queue)
482        assert json.loads(response) == {"id": message_id, "result": {}}
483        ################################################################################################################
484        # worker thread: destroy instance
485        ################################################################################################################
486        response = await websocket.recv_msg_of_connect_server()
487        response = json.loads(response)
488        assert response['type'] == 'destroyInstance'
489        assert response['instanceId'] == worker_instance_id
490        ################################################################################################################
491        # main thread: Debugger.disable
492        ################################################################################################################
493        message_id = next(self.id_generator)
494        response = await communicate_with_debugger_server(main_thread_instance_id,
495                                                          main_thread_to_send_queue,
496                                                          main_thread_received_queue,
497                                                          debugger.disable(), message_id)
498        assert json.loads(response) == {"method": "Debugger.resumed", "params": {}}
499        response = await websocket.recv_msg_of_debugger_server(main_thread_instance_id, main_thread_received_queue)
500        assert json.loads(response) == {"id": message_id, "result": {}}
501        ################################################################################################################
502        # close the websocket connections
503        ################################################################################################################
504        await websocket.send_msg_to_debugger_server(main_thread_instance_id, main_thread_to_send_queue, 'close')
505        await websocket.send_msg_to_connect_server('close')
506        ################################################################################################################
507