public inbox for [email protected]  
help / color / mirror / Atom feed
From: Nikhil Mohite <[email protected]>
To: pgadmin-hackers <[email protected]>
Subject: [pgAdmin][RM-5343]: [Code Coverage] Improve API test cases for Debugger
Date: Tue, 1 Dec 2020 14:48:06 +0530
Message-ID: <CAOBg0AOQhDiS5VQjG6ErGp=tmNj=_4T9rkL6cJeAmnGuWWtCCA@mail.gmail.com> (raw)

Hi Team,

Please find the attached patch for RM-5343
<https://redmine.postgresql.org/issues/5343;: [Code Coverage] Improve API
test cases for Debugger.
also updated implementation to remove dead code and unhandled exceptions.


-- 
*Thanks & Regards,*
*Nikhil Mohite*
*Software Engineer.*
*EDB Postgres* <https://www.enterprisedb.com/;
*Mob.No: +91-7798364578.*


Attachments:

  [application/x-patch] RM_5343.patch (131.2K, 3-RM_5343.patch)
  download | inline diff:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/utils.py
index a73572d..8e13f46 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/utils.py
@@ -142,7 +142,8 @@ def create_procedure(server, db_name, schema_name, func_name, s_type,
         traceback.print_exc(file=sys.stderr)
 
 
-def create_function(server, db_name, schema_name, func_name, args=None):
+def create_function(server, db_name, schema_name, func_name, args=None,
+                    lang='sql'):
     """This function add the procedure to schema"""
     try:
         connection = utils.get_db_connection(db_name,
@@ -158,9 +159,9 @@ def create_function(server, db_name, schema_name, func_name, args=None):
             args = ''
         query = "CREATE FUNCTION " + schema_name + "." + func_name + \
                 "({0})" \
-                " RETURNS integer LANGUAGE 'sql' STABLE" \
+                " RETURNS integer LANGUAGE '{1}' STABLE" \
                 " SECURITY DEFINER AS $$" \
-                " SELECT 1; $$;".format(args)
+                " SELECT 1; $$;".format(args, lang)
         pg_cursor.execute(query)
         connection.commit()
         # Get 'oid' from newly created function
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/utils.py
index eba7508..130045f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/utils.py
@@ -64,7 +64,7 @@ def create_trigger(server, db_name, schema_name, table_name, trigger_name,
             trigger_id = trigger[0]
         connection.close()
         return trigger_id
-    except Exception:
+    except Exception as e:
         traceback.print_exc(file=sys.stderr)
         raise
 
diff --git a/web/pgadmin/tools/debugger/__init__.py b/web/pgadmin/tools/debugger/__init__.py
index 74844a1..5cac809 100644
--- a/web/pgadmin/tools/debugger/__init__.py
+++ b/web/pgadmin/tools/debugger/__init__.py
@@ -440,7 +440,7 @@ def init_function(node_type, sid, did, scid, fid, trid=None):
         return err_msg
 
     ret_status = status
-
+    msg = ''
     # Check that the function is actually debuggable...
     if r_set['rows'][0]:
         # If func/proc is not defined in package body
@@ -479,9 +479,6 @@ def init_function(node_type, sid, did, scid, fid, trid=None):
 
             if is_error:
                 return err_msg
-    else:
-        ret_status = False
-        msg = gettext("The function/procedure cannot be debugged")
 
     # Return the response that function cannot be debug...
     if not ret_status:
@@ -1146,76 +1143,68 @@ def start_debugger_listener(trans_id):
             if not status:
                 return internal_server_error(errormsg=result)
         else:
-            if conn.connected():
-                # For indirect debugging first create the listener and then
-                # wait for the target
+
+            sql = render_template(
+                "/".join([template_path, 'create_listener.sql']))
+
+            status, res = execute_dict_search_path(
+                conn, sql, de_inst.debugger_data['search_path'])
+            if not status:
+                return internal_server_error(errormsg=res)
+
+            # Get and store the session variable which is required to fetch
+            # other information during debugging
+            int_session_id = res['rows'][0]['pldbg_create_listener']
+
+            # In EnterpriseDB versions <= 9.1 the
+            # pldbg_set_global_breakpoint function took five arguments,
+            # the 2nd argument being the package's OID, if any. Starting
+            # with 9.2, the package OID argument is gone, and the function
+            # takes four arguments like the community version has always
+            # done.
+            if server_type == 'ppas' and ver <= 90100:
                 sql = render_template(
-                    "/".join([template_path, 'create_listener.sql']))
+                    "/".join([template_path, 'add_breakpoint_edb.sql']),
+                    session_id=int_session_id,
+                    function_oid=de_inst.debugger_data['function_id']
+                )
 
                 status, res = execute_dict_search_path(
                     conn, sql, de_inst.debugger_data['search_path'])
                 if not status:
                     return internal_server_error(errormsg=res)
-
-                # Get and store the session variable which is required to fetch
-                # other information during debugging
-                int_session_id = res['rows'][0]['pldbg_create_listener']
-
-                # In EnterpriseDB versions <= 9.1 the
-                # pldbg_set_global_breakpoint function took five arguments,
-                # the 2nd argument being the package's OID, if any. Starting
-                # with 9.2, the package OID argument is gone, and the function
-                # takes four arguments like the community version has always
-                # done.
-                if server_type == 'ppas' and ver <= 90100:
-                    sql = render_template(
-                        "/".join([template_path, 'add_breakpoint_edb.sql']),
-                        session_id=int_session_id,
-                        function_oid=de_inst.debugger_data['function_id']
-                    )
-
-                    status, res = execute_dict_search_path(
-                        conn, sql, de_inst.debugger_data['search_path'])
-                    if not status:
-                        return internal_server_error(errormsg=res)
-                else:
-                    sql = render_template(
-                        "/".join([template_path, 'add_breakpoint_pg.sql']),
-                        session_id=int_session_id,
-                        function_oid=de_inst.debugger_data['function_id']
-                    )
-
-                    status, res = execute_dict_search_path(
-                        conn, sql, de_inst.debugger_data['search_path'])
-                    if not status:
-                        return internal_server_error(errormsg=res)
-
-                # wait for the target
+            else:
                 sql = render_template(
-                    "/".join([template_path, 'wait_for_target.sql']),
-                    session_id=int_session_id
+                    "/".join([template_path, 'add_breakpoint_pg.sql']),
+                    session_id=int_session_id,
+                    function_oid=de_inst.debugger_data['function_id']
                 )
 
-                status, res = execute_async_search_path(
+                status, res = execute_dict_search_path(
                     conn, sql, de_inst.debugger_data['search_path'])
                 if not status:
                     return internal_server_error(errormsg=res)
 
-                de_inst.debugger_data['exe_conn_id'] = \
-                    de_inst.debugger_data['conn_id']
-                de_inst.debugger_data['restart_debug'] = 1
-                de_inst.debugger_data['frame_id'] = 0
-                de_inst.debugger_data['session_id'] = int_session_id
-                de_inst.update_session()
-                return make_json_response(
-                    data={'status': status, 'result': res}
-                )
-            else:
-                status = False
-                result = SERVER_CONNECTION_CLOSED
-                return make_json_response(
-                    data={'status': status, 'result': result}
-                )
+            # wait for the target
+            sql = render_template(
+                "/".join([template_path, 'wait_for_target.sql']),
+                session_id=int_session_id
+            )
+
+            status, res = execute_async_search_path(
+                conn, sql, de_inst.debugger_data['search_path'])
+            if not status:
+                return internal_server_error(errormsg=res)
+
+            de_inst.debugger_data['exe_conn_id'] = \
+                de_inst.debugger_data['conn_id']
+            de_inst.debugger_data['restart_debug'] = 1
+            de_inst.debugger_data['frame_id'] = 0
+            de_inst.debugger_data['session_id'] = int_session_id
+            de_inst.update_session()
+            return make_json_response(
+                data={'status': status, 'result': res}
+            )
     else:
         status = False
         result = SERVER_CONNECTION_CLOSED
@@ -1519,6 +1508,7 @@ def set_clear_breakpoint(trans_id, line_no, set_type):
 
         status, result = execute_dict_search_path(
             conn, sql, de_inst.debugger_data['search_path'])
+        result = result['rows']
         if not status:
             return internal_server_error(errormsg=result)
     else:
@@ -1526,7 +1516,7 @@ def set_clear_breakpoint(trans_id, line_no, set_type):
         result = SERVER_CONNECTION_CLOSED
 
     return make_json_response(
-        data={'status': status, 'result': result['rows']}
+        data={'status': status, 'result': result}
     )
 
 
@@ -1583,6 +1573,7 @@ def clear_all_breakpoint(trans_id):
                     conn, sql, de_inst.debugger_data['search_path'])
                 if not status:
                     return internal_server_error(errormsg=result)
+                result = result['rows']
         else:
             return make_json_response(data={'status': False})
     else:
@@ -1590,7 +1581,7 @@ def clear_all_breakpoint(trans_id):
         result = SERVER_CONNECTION_CLOSED
 
     return make_json_response(
-        data={'status': status, 'result': result['rows']}
+        data={'status': status, 'result': result}
     )
 
 
diff --git a/web/pgadmin/tools/debugger/static/js/debugger.js b/web/pgadmin/tools/debugger/static/js/debugger.js
index 9d45f17..1c89ff2 100644
--- a/web/pgadmin/tools/debugger/static/js/debugger.js
+++ b/web/pgadmin/tools/debugger/static/js/debugger.js
@@ -429,7 +429,7 @@ define([
               panel = pgBrowser.docker.addPanel(
                 'frm_debugger', wcDocker.DOCK.STACKED, dashboardPanel[0]
               );
-            var label = treeInfo.function ? treeInfo.function.label : treeInfo.procedure.label;
+            var label = treeInfo.function ? treeInfo.function.label : treeInfo.trigger_function ? treeInfo.trigger_function.label : treeInfo.trigger ? treeInfo.trigger.label : treeInfo.procedure.label;
             debuggerUtils.setDebuggerTitle(panel, browser_preferences, label, treeInfo.schema.label, treeInfo.database.label, null, pgBrowser);
 
             panel.focus();
@@ -452,7 +452,7 @@ define([
                 function(evt, value) {
                   if(value) {
                     let browser_preferences = pgBrowser.get_preferences_for_module('browser');
-                    var label = treeInfo.function ? treeInfo.function.label : treeInfo.procedure.label;
+                    var label = treeInfo.function ? treeInfo.function.label : treeInfo.trigger_function ? treeInfo.trigger_function.label : treeInfo.trigger ? treeInfo.trigger.label : treeInfo.procedure.label;
                     debuggerUtils.setDebuggerTitle(panel, browser_preferences, label, treeInfo.schema.label, treeInfo.database.label, value, pgBrowser);
                   }
                 },
@@ -571,7 +571,7 @@ define([
                     panel = pgBrowser.docker.addPanel(
                       'frm_debugger', wcDocker.DOCK.STACKED, dashboardPanel[0]
                     );
-                  var label = newTreeInfo.function ? newTreeInfo.function.label : newTreeInfo.procedure.label;
+                  var label = newTreeInfo.function ? newTreeInfo.function.label : newTreeInfo.trigger_function ? newTreeInfo.trigger_function.label : newTreeInfo.trigger ? newTreeInfo.trigger.label : newTreeInfo.procedure.label;
                   debuggerUtils.setDebuggerTitle(panel, browser_preferences, label, newTreeInfo.schema.label, newTreeInfo.database.label, null, pgBrowser);
 
                   panel.focus();
@@ -594,7 +594,7 @@ define([
                       function(evt, value) {
                         if(value) {
                           let browser_preferences = pgBrowser.get_preferences_for_module('browser');
-                          var label = treeInfo.function ? treeInfo.function.label : treeInfo.procedure.label;
+                          var label = treeInfo.function ? treeInfo.function.label : treeInfo.trigger_function ? treeInfo.trigger_function.label : treeInfo.trigger ? treeInfo.trigger.label : treeInfo.procedure.label;
                           debuggerUtils.setDebuggerTitle(panel, browser_preferences, label, treeInfo.schema.label, treeInfo.database.label, value, pgBrowser);
                         }
                       },
diff --git a/web/pgadmin/tools/debugger/static/js/debugger_ui.js b/web/pgadmin/tools/debugger/static/js/debugger_ui.js
index 4af58d8..6acb5ad 100644
--- a/web/pgadmin/tools/debugger/static/js/debugger_ui.js
+++ b/web/pgadmin/tools/debugger/static/js/debugger_ui.js
@@ -778,7 +778,7 @@ define([
                           'frm_debugger', wcDocker.DOCK.STACKED, dashboardPanel[0]
                         );
                       var browser_pref = pgBrowser.get_preferences_for_module('browser');
-                      var label = treeInfo.function ? treeInfo.function.label : treeInfo.procedure.label;
+                      var label = treeInfo.function ? treeInfo.function.label : treeInfo.trigger_function ? treeInfo.trigger_function.label : treeInfo.trigger ? treeInfo.trigger.label : treeInfo.procedure.label;
                       debuggerUtils.setDebuggerTitle(panel, browser_pref, label, treeInfo.schema.label, treeInfo.database.label, null, pgBrowser);
                       panel.focus();
 
@@ -799,7 +799,7 @@ define([
                           // We will execute this function when user clicks on the OK button
                           function(evt, value) {
                             if(value) {
-                              var label = treeInfo.function ? treeInfo.function.label : treeInfo.procedure.label;
+                              var label = treeInfo.function ? treeInfo.function.label : treeInfo.trigger_function ? treeInfo.trigger_function.label : treeInfo.trigger ? treeInfo.trigger.label : treeInfo.procedure.label;
                               debuggerUtils.setDebuggerTitle(panel, self.preferences, label, treeInfo.schema.label, treeInfo.database.label, value, pgBrowser);
                             }
                           },
diff --git a/web/pgadmin/tools/debugger/tests/__init__.py b/web/pgadmin/tools/debugger/tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/web/pgadmin/tools/debugger/tests/debugger_test_data.json b/web/pgadmin/tools/debugger/tests/debugger_test_data.json
new file mode 100644
index 0000000..bcd0613
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/debugger_test_data.json
@@ -0,0 +1,1703 @@
+{
+  "init_debugger_for_function": [
+    {
+      "name": "Debugger initialization",
+      "url": "/debugger/init/function/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "node_type": "function",
+      "invalid_name": false,
+      "add_extension": true,
+      "test_data": {},
+      "mock_data": {},
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger initialization nodetype",
+      "url": "/debugger/init/function/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "node_type": "function",
+      "invalid_name": false,
+      "add_extension": false,
+      "test_data": {},
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+        "return_value": "(False, 'Mocked Internal Server Error while fetching function details for debugger.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger initialization: Function is not found",
+      "url": "/debugger/init/function/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "invalid_name": false,
+      "add_extension": false,
+      "node_type": "function",
+      "test_data": {},
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+        "return_value": "(True, {'rows': []})"
+      },
+      "expected_data": {
+        "status_code": 410
+      }
+    },
+    {
+      "name": "Debugger initialization: Check Function is debuggable",
+      "url": "/debugger/init/function/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "invalid_name": false,
+      "add_extension": false,
+      "node_type": "function",
+      "test_data": {},
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+        "return_value": "(False, 'Mocked Internal Server Error while checking function is debuggable.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger initialization: Check Function is debuggable fail",
+      "url": "/debugger/init/function/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "mock_multiple_calls": true,
+      "invalid_name": false,
+      "add_extension": false,
+      "node_type": "function",
+      "test_data": {},
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+        "return_value": "(True, 0),(False, 'Mocked Internal Server Error ')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger initialization: Check Function name is valid",
+      "url": "/debugger/init/function/",
+      "is_positive_test": false,
+      "mocking_required": false,
+      "invalid_name": true,
+      "add_extension": false,
+      "node_type": "function",
+      "test_data": {},
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger initialization: pldggapi extension missing.",
+      "url": "/debugger/init/function/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "mock_multiple_calls": true,
+      "invalid_name": false,
+      "add_extension": false,
+      "node_type": "function",
+      "test_data": {},
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+        "return_value": "(True, '0'), (True, '0')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    }
+  ],
+  "init_debugger_for_trigger": [
+    {
+      "name": "Debugger initialization for trigger",
+      "url": "/debugger/init/trigger/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "node_type": "trigger",
+      "invalid_name": false,
+      "add_extension": true,
+      "test_data": {
+        "name": "PLACE_HOLDER",
+        "is_row_trigger": true,
+        "fires": "BEFORE",
+        "columns": [],
+        "tfunction": "PLACE_HOLDER",
+        "evnt_insert": true
+      },
+      "mock_data": {},
+      "expected_data": {
+        "status_code": 200
+      }
+    },{
+      "name": "Debugger initialization for trigger: fail",
+      "url": "/debugger/init/trigger/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "node_type": "trigger",
+      "invalid_name": false,
+      "add_extension": false,
+      "test_data": {
+        "name": "PLACE_HOLDER",
+        "is_row_trigger": true,
+        "fires": "BEFORE",
+        "columns": [],
+        "tfunction": "PLACE_HOLDER",
+        "evnt_insert": true
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+        "return_value": "(False, 'Mocked Internal Server Error while checking debugger initialize direct.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    }
+  ],
+  "init_debugger_target": [
+    {
+      "name": "Debugger initialize target direct",
+      "url": "/debugger/initialize_target/direct/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "node_type": "trigger",
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": true,
+      "test_data": {},
+      "mock_data": {},
+      "expected_data": {
+        "status_code": 200
+      }
+    },{
+      "name": "Debugger initialize target direct negative",
+      "url": "/debugger/initialize_target/direct/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "node_type": "trigger",
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "test_data": {},
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+        "return_value": "(False, 'Mocked Internal Server Error while checking debugger initialize direct.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger initialize target direct negative validate debugger",
+      "url": "/debugger/initialize_target/direct/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "node_type": "trigger",
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "test_data": {},
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+        "return_value": "(False, 'Mocked Internal Server Error while checking debugger initialize direct.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger initialize target direct negative validate indirect debugger",
+      "url": "/debugger/initialize_target/indirect/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "node_type": "trigger",
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "test_data": {},
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+        "return_value": "(False, 'Mocked Internal Server Error while checking debugger initialize direct.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger initialize target direct negative connection error",
+      "url": "/debugger/initialize_target/indirect/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "node_type": "trigger",
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "test_data": {},
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.connect",
+        "return_value": "(False, 'Mocked Internal Server Error while checking debugger initialize direct.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger initialize target indirect",
+      "url": "/debugger/initialize_target/indirect/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "node_type": "trigger",
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "test_data": {},
+      "mock_data": {},
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger initialize target direct with trigger id",
+      "url": "/debugger/initialize_target/direct/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "node_type": "trigger",
+      "type": "direct",
+      "invalid_name": false,
+      "create_trigger_func": true,
+      "add_extension": false,
+      "test_data": {
+        "name": "PLACE_HOLDER",
+        "is_row_trigger": true,
+        "fires": "BEFORE",
+        "columns": [],
+        "tfunction": "PLACE_HOLDER",
+        "evnt_insert": true
+      },
+      "mock_data": {},
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger initialize target direct with trigger id",
+      "url": "/debugger/initialize_target/direct/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "node_type": "trigger",
+      "invalid_name": false,
+      "create_trigger_func": true,
+      "add_extension": false,
+      "type": "direct",
+      "test_data": {
+        "name": "PLACE_HOLDER",
+        "is_row_trigger": true,
+        "fires": "BEFORE",
+        "columns": [],
+        "tfunction": "PLACE_HOLDER",
+        "evnt_insert": true
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+        "return_value": "(False, 'Mocked Internal Server Error while checking debugger initialize target direct.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },{
+      "name": "Debugger initialize target direct with trigger id fail",
+      "url": "/debugger/initialize_target/direct/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "node_type": "trigger",
+      "type": "direct",
+      "invalid_name": false,
+      "create_trigger_func": true,
+      "add_extension": false,
+      "mock_multiple": true,
+      "test_data": {
+        "name": "PLACE_HOLDER",
+        "is_row_trigger": true,
+        "fires": "BEFORE",
+        "columns": [],
+        "tfunction": "PLACE_HOLDER",
+        "evnt_insert": true
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+        "return_value": "(True, 0), (False, 'Mocked Internal Server Error while checking debugger initialize target direct.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger initialize target indirect with trigger id fail",
+      "url": "/debugger/initialize_target/indirect/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "node_type": "trigger",
+      "type": "direct",
+      "invalid_name": false,
+      "create_trigger_func": true,
+      "add_extension": false,
+      "mock_multiple": false,
+      "test_data": {
+        "name": "PLACE_HOLDER",
+        "is_row_trigger": true,
+        "fires": "BEFORE",
+        "columns": [],
+        "tfunction": "PLACE_HOLDER",
+        "evnt_insert": true
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+        "return_value": "(True, {})"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger initialize target debugger version not valid.",
+      "url": "/debugger/initialize_target/direct/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "node_type": "trigger",
+      "type": "direct",
+      "invalid_name": false,
+      "create_trigger_func": true,
+      "add_extension": false,
+      "mock_multiple": true,
+      "test_data": {
+        "name": "PLACE_HOLDER",
+        "is_row_trigger": true,
+        "fires": "BEFORE",
+        "columns": [],
+        "tfunction": "PLACE_HOLDER",
+        "evnt_insert": true
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+        "return_value": "(True, ''), (True, ''), (False,'Mocking invalid debugger.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    }
+  ],
+  "close_debugger": [
+    {
+      "name": "Close Debugger",
+      "url": "debugger/close/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "node_type": "trigger",
+      "invalid_name": false,
+      "add_extension": true,
+      "test_data": {},
+      "mock_data": {},
+      "expected_data": {
+        "status_code": 200
+      }
+    }
+  ],
+  "restart_debugger": [
+    {
+      "name": "Restart Debugger: Debugger not triggered.",
+      "url": "debugger/restart/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "trigger",
+      "invalid_name": false,
+      "add_extension": true,
+      "init_target": false,
+      "test_data": {},
+      "mock_data": {},
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Restart Debugger: Debugger initialized.",
+      "url": "debugger/restart/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "trigger",
+      "invalid_name": false,
+      "init_target": true,
+      "add_extension": false,
+      "test_data": {},
+      "mock_data": {},
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Restart Debugger: Server not connected.",
+      "url": "debugger/restart/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "trigger",
+      "invalid_name": false,
+      "init_target": true,
+      "add_extension": false,
+      "test_data": {},
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.connected",
+        "return_value": "False"
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    }
+  ],
+  "start_listener": [
+    {
+      "name": "Debugger start listener",
+      "url": "debugger/start_listener/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": true,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {},
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger start listener fail",
+      "url": "debugger/start_listener/",
+      "is_positive_test": false,
+      "mocking_required": false,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": false,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {},
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger start listener connection fail",
+      "url": "debugger/start_listener/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.connected",
+        "return_value": "False"
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger start listener indirect",
+      "url": "debugger/start_listener/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "indirect",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger start listener indirect disconnected",
+      "url": "debugger/start_listener/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "indirect",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.connected",
+        "return_value": "False"
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    }
+  ],
+  "debugger_messages": [
+    {
+      "name": "Debugger Messages",
+      "url": "debugger/messages/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "indirect",
+      "invalid_name": false,
+      "add_extension": true,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },{
+      "name": "Debugger Messages: connection fail",
+      "url": "debugger/messages/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "indirect",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.connected",
+        "return_value": "False"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },{
+      "name": "Debugger Messages: debugger instace fail",
+      "url": "debugger/messages/",
+      "is_positive_test": false,
+      "mocking_required": false,
+      "type": "indirect",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": false,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    }
+  ],
+  "start_execution": [
+    {
+      "name": "Debugger Start Execution",
+      "url": "debugger/start_execution/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": true,
+      "init_target": true,
+      "add_port_no": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    }
+  ],
+  "poll_end_execution_result": [
+    {
+      "name": "Debugger Poll Execution Results.",
+      "url": "debugger/poll_end_execution_result/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "direct",
+      "add_extension": true,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger Poll Execution Results: Connection fail",
+      "url": "debugger/poll_end_execution_result/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "direct",
+      "add_extension": false,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.connected",
+        "return_value": "False"
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger Poll Execution Results: fail to poll data.",
+      "url": "debugger/poll_end_execution_result/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "direct",
+      "add_extension": false,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.poll",
+        "return_value": "(False, 'Mock internal server error while poll data for debugger.')"
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    }
+  ],
+  "debugger_direct": [
+    {
+      "name": "Debugger Direct: Init debugger in direct mode",
+      "url": "debugger/direct/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "direct",
+      "add_extension": true,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger Direct: Init debugger in direct mode fail",
+      "url": "debugger/direct/",
+      "is_positive_test": false,
+      "mocking_required": false,
+      "type": "direct",
+      "add_extension": false,
+      "invalid_trans": true,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "",
+        "return_value": ""
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger Direct: Init debugger in direct with arguments",
+      "url": "debugger/direct/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "direct",
+      "add_extension": true,
+      "invalid_trans": false,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [
+          {
+            "argtype": "character varying",
+            "argmode": "IN",
+            "argname": "param",
+            "argdefval": "'1'"
+          }
+        ],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "",
+        "return_value": ""
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    }
+  ],
+  "execute_query": [
+    {
+      "name": "Debugger execute: positive",
+      "url": "debugger/execute_query/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "direct",
+      "query_type": "wait_for_breakpoint",
+      "invalid_name": false,
+      "add_extension": true,
+      "init_target": true,
+      "abort_debugger": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger execute: Connection fail.",
+      "url": "debugger/execute_query/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "direct",
+      "query_type": "wait_for_breakpoint",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "abort_debugger": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.connected",
+        "return_value": "False"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger execute: Debugger instance fail",
+      "url": "debugger/execute_query/",
+      "is_positive_test": false,
+      "mocking_required": false,
+      "type": "direct",
+      "query_type": "wait_for_breakpoint",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": false,
+      "abort_debugger": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger execute: Debugger continue",
+      "url": "debugger/execute_query/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "direct",
+      "query_type": "continue",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "abort_debugger": false,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger execute: Debugger patch error",
+      "url": "debugger/execute_query/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "direct",
+      "query_type": "wait_for_breakpoint",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "abort_debugger": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+        "return_value": "(False, 'Mocked Internal Server Error while fetching function details for debugger.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger execute: Debugger async fail",
+      "url": "debugger/execute_query/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "direct",
+      "query_type": "continue",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "abort_debugger": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_async",
+        "return_value": "(False, 'Mocked Internal Server Error while fetching function details for debugger.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    }
+  ],
+  "poll_result": [
+    {
+      "name": "Debugger poll result",
+      "url": "debugger/poll_result/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "indirect",
+      "invalid_name": false,
+      "add_extension": true,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },{
+      "name": "Debugger poll result: Disconnected",
+      "url": "debugger/poll_result/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "indirect",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.connected",
+        "return_value": "False"
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },{
+      "name": "Debugger poll result: poll error",
+      "url": "debugger/poll_result/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "indirect",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.poll",
+        "return_value": "(False, 'Mocking internal error for poll debugger result.')"
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },{
+      "name": "Debugger poll result: Debugger instance fail",
+      "url": "debugger/poll_result/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "indirect",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": false,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.poll",
+        "return_value": "(False, 'Mocking internal error for poll debugger result.')"
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    }
+  ],
+  "set_breakpoint": [
+    {
+      "name": "Debugger Set breakpoint",
+      "url": "debugger/set_breakpoint/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": true,
+      "init_target": true,
+      "query_type": 1,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger Set breakpoint: debugger instance fail.",
+      "url": "debugger/set_breakpoint/",
+      "is_positive_test": false,
+      "mocking_required": false,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": false,
+      "query_type": 1,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger Set breakpoint: Search path error.",
+      "url": "debugger/set_breakpoint/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "query_type": 1,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+        "return_value": "(False, 'Mocked Internal Server Error while fetching function details for debugger.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger Set breakpoint: Connection error",
+      "url": "debugger/set_breakpoint/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "query_type": 1,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.connected",
+        "return_value": "False"
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger Set breakpoint: Clear breakpoint.",
+      "url": "debugger/set_breakpoint/",
+      "is_positive_test": false,
+      "mocking_required": false,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "query_type": 2,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    }
+  ],
+  "clear_all_breakpoint": [
+    {
+      "name": "Debugger Clear all breakpoint: .",
+      "url": "debugger/clear_all_breakpoint/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": true,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger Clear all breakpoint: Debugger instance error.",
+      "url": "debugger/clear_all_breakpoint/",
+      "is_positive_test": false,
+      "mocking_required": false,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": false,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger Clear all breakpoint: search path error.",
+      "url": "debugger/clear_all_breakpoint/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+        "return_value": "(False, 'Mocked Internal Server Error while fetching function details for debugger.')"
+      },
+      "expected_data": {
+        "status_code": 500
+      }
+    },
+    {
+      "name": "Debugger Clear all breakpoint: Connection error.",
+      "url": "debugger/clear_all_breakpoint/",
+      "is_positive_test": false,
+      "mocking_required": true,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.connected",
+        "return_value": "False"
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    },
+    {
+      "name": "Debugger Clear all breakpoint: No breakpoint to clear",
+      "url": "debugger/clear_all_breakpoint/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": false,
+      "init_target": true,
+      "no_breakpoint": true,
+      "test_data": {
+        "acl": [],
+        "arguments": [],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+        "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.connected",
+        "return_value": "False"
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    }
+  ],
+  "get_arguments": [
+    {
+      "name": "Debugger get arguments.",
+      "url": "debugger/get_arguments/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": true,
+      "init_target": true,
+      "query_type": 1,
+      "test_data": {
+        "acl": [],
+        "arguments": [
+          {
+            "argtype": "character varying",
+            "argmode": "IN",
+            "argname": "param",
+            "argdefval": "'1'"
+          }
+        ],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    }],
+  "set_arguments": [
+    {
+      "name": "Debugger set arguments.",
+      "url": "debugger/set_arguments/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": true,
+      "init_target": true,
+      "query_type": 1,
+      "test_data": {
+        "acl": [],
+        "arguments": [
+          {
+            "argtype": "character varying",
+            "argmode": "IN",
+            "argname": "param",
+            "argdefval": "'1'"
+          }
+        ],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    }
+  ],
+  "clear_arguments": [
+    {
+      "name": "Debugger set arguments.",
+      "url": "debugger/clear_arguments/",
+      "is_positive_test": true,
+      "mocking_required": false,
+      "type": "direct",
+      "invalid_name": false,
+      "add_extension": true,
+      "init_target": true,
+      "query_type": 1,
+      "test_data": {
+        "acl": [],
+        "arguments": [
+          {
+            "argtype": "character varying",
+            "argmode": "IN",
+            "argname": "param",
+            "argdefval": "'1'"
+          }
+        ],
+        "funcowner": "",
+        "lanname": "plpgsql",
+        "name": "test_function_!@#$%^&*(",
+        "options": [],
+        "probin": "$libdir/",
+        "pronamespace": 2200,
+        "prorettypename": "character varying",
+        "prorows": 0,
+        "prosrc": "begin select '1'; end",
+        "seclabels": [],
+        "variables": []
+      },
+      "mock_data": {
+      },
+      "expected_data": {
+        "status_code": 200
+      }
+    }
+  ]
+}
diff --git a/web/pgadmin/tools/debugger/tests/test_close_debugger.py b/web/pgadmin/tools/debugger/tests/test_close_debugger.py
new file mode 100644
index 0000000..b1deddc
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_close_debugger.py
@@ -0,0 +1,77 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+import uuid
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class CloseDebugger(BaseTestGenerator):
+    """ This class will Close the debugger """
+
+    scenarios = utils.generate_scenarios('close_debugger',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(CloseDebugger, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        func_name = "test_function_%s" % str(uuid.uuid4())[1:8]
+        function_info = funcs_utils.create_function(
+            local_self.server, local_self.db_name, local_self.schema_name,
+            func_name)
+
+        self.func_id = function_info[0]
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+    def close_debugger(self):
+        return self.tester.delete(
+            self.url + str(self.trans_id),
+            content_type='application/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.close_debugger()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.close_debugger()
+            else:
+                response = self.close_debugger()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_debugger_clear_all_breakpoint.py b/web/pgadmin/tools/debugger/tests/test_debugger_clear_all_breakpoint.py
new file mode 100644
index 0000000..8075782
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_debugger_clear_all_breakpoint.py
@@ -0,0 +1,92 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class DebuggerClearAllBreakpoint(BaseTestGenerator):
+    """ This class will set breakpoint."""
+
+    scenarios = utils.generate_scenarios('clear_all_breakpoint',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(DebuggerClearAllBreakpoint, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        self.test_data['funcowner'] = self.server["username"]
+
+        function_info = debugger_utils.create_function(self, utils)
+
+        self.func_id = json.loads(function_info.data)['node']['_id']
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+        if self.init_target:
+            debugger_utils.initialize_target(self, utils)
+
+            debugger_utils.start_listener(self)
+            self.port_no = debugger_utils.messages(self)
+            debugger_utils.start_execution(self)
+            breakpoint = debugger_utils.set_breakpoint(self)
+
+    def clear_all_breakpoint(self):
+        if hasattr(self, 'no_breakpoint') and self.no_breakpoint:
+            breakpoint_data = {"breakpoint_list": ''}
+        else:
+            breakpoint_data = {"breakpoint_list": 3}
+
+        return self.tester.post(
+            self.url + str(self.trans_id),
+            data=breakpoint_data)
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.clear_all_breakpoint()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.clear_all_breakpoint()
+            else:
+                response = self.clear_all_breakpoint()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        # debugger_utils.abort_debugger(self)
+        debugger_utils.close_debugger(self)
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_debugger_clear_arguments.py b/web/pgadmin/tools/debugger/tests/test_debugger_clear_arguments.py
new file mode 100644
index 0000000..d2ed413
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_debugger_clear_arguments.py
@@ -0,0 +1,83 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class DebuggerClearArguments(BaseTestGenerator):
+    """ This class will get arguments.."""
+
+    scenarios = utils.generate_scenarios('clear_arguments',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(DebuggerClearArguments, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        self.test_data['funcowner'] = self.server["username"]
+
+        function_info = debugger_utils.create_function(self, utils)
+
+        self.func_id = json.loads(function_info.data)['node']['_id']
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+        if self.init_target:
+            debugger_utils.initialize_target(self, utils)
+
+    def clear_arguments(self):
+        return self.tester.post(
+            self.url + str(self.server_id) + '/' + str(self.db_id) + '/' +
+            str(self.schema_id) + '/' + str(self.func_id),
+            data={}
+        )
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.clear_arguments()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.clear_arguments()
+            else:
+                response = self.clear_arguments()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        debugger_utils.close_debugger(self)
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_debugger_direct.py b/web/pgadmin/tools/debugger/tests/test_debugger_direct.py
new file mode 100644
index 0000000..d04b506
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_debugger_direct.py
@@ -0,0 +1,84 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class DebuggerDirect(BaseTestGenerator):
+    """ This class will start debugger in direct mode."""
+
+    scenarios = utils.generate_scenarios('debugger_direct',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(DebuggerDirect, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        self.test_data['funcowner'] = self.server["username"]
+
+        function_info = debugger_utils.create_function(self, utils)
+
+        self.func_id = json.loads(function_info.data)['node']['_id']
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+        if self.init_target:
+            debugger_utils.initialize_target(self, utils)
+
+    def direct(self):
+        if hasattr(self, 'invalid_trans') and self.invalid_trans:
+            self.trans_id = 0
+
+        return self.tester.get(
+            self.url + str(self.trans_id),
+            content_type='application/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.direct()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.direct()
+            else:
+                response = self.direct()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        debugger_utils.close_debugger(self)
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_debugger_execute_query.py b/web/pgadmin/tools/debugger/tests/test_debugger_execute_query.py
new file mode 100644
index 0000000..3a64520
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_debugger_execute_query.py
@@ -0,0 +1,86 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class DebuggerExecuteQuery(BaseTestGenerator):
+    """ This class will execute query in debugger."""
+
+    scenarios = utils.generate_scenarios('execute_query',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(DebuggerExecuteQuery, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        self.test_data['funcowner'] = self.server["username"]
+
+        function_info = debugger_utils.create_function(self, utils)
+        self.func_id = json.loads(function_info.data)['node']['_id']
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+        if self.init_target:
+            debugger_utils.initialize_target(self, utils)
+            debugger_utils.start_listener(self)
+
+            self.port_no = debugger_utils.messages(self)
+            debugger_utils.start_execution(self)
+
+    def execute_query(self):
+        return self.tester.get(
+            self.url + str(self.trans_id) + '/' + str(self.query_type),
+            content_type='application/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.execute_query()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.execute_query()
+            else:
+                response = self.execute_query()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        if hasattr(self, 'abort_debugger') and self.abort_debugger:
+            debugger_utils.abort_debugger(self)
+        debugger_utils.close_debugger(self)
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_debugger_get_arguments.py b/web/pgadmin/tools/debugger/tests/test_debugger_get_arguments.py
new file mode 100644
index 0000000..ce2684e
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_debugger_get_arguments.py
@@ -0,0 +1,71 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class DebuggerGetArguments(BaseTestGenerator):
+    """ This class will get arguments.."""
+
+    scenarios = utils.generate_scenarios('get_arguments',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(DebuggerGetArguments, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        self.test_data['funcowner'] = self.server["username"]
+
+        function_info = debugger_utils.create_function(self, utils)
+
+        self.func_id = json.loads(function_info.data)['node']['_id']
+
+    def get_arguments(self):
+        return self.tester.get(
+            self.url + str(self.server_id) + '/' + str(self.db_id) + '/' +
+            str(self.schema_id) + '/' + str(self.func_id),
+            content_type='application/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.get_arguments()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.get_arguments()
+            else:
+                response = self.get_arguments()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_debugger_poll_execution_result.py b/web/pgadmin/tools/debugger/tests/test_debugger_poll_execution_result.py
new file mode 100644
index 0000000..47e9f98
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_debugger_poll_execution_result.py
@@ -0,0 +1,86 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class DebuggerPollExecutionResult(BaseTestGenerator):
+    """ This class will start debugger execution."""
+
+    scenarios = utils.generate_scenarios('poll_end_execution_result',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(DebuggerPollExecutionResult, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        self.test_data['funcowner'] = self.server["username"]
+
+        function_info = debugger_utils.create_function(self, utils)
+
+        self.func_id = json.loads(function_info.data)['node']['_id']
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+        if self.init_target:
+            debugger_utils.initialize_target(self, utils)
+
+            debugger_utils.start_listener(self)
+            self.port_no = debugger_utils.messages(self)
+            debugger_utils.start_execution(self)
+
+    def poll_execution_result(self):
+        return self.tester.get(
+            self.url + str(self.trans_id) + '/',
+            content_type='application/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.poll_execution_result()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.poll_execution_result()
+            else:
+                response = self.poll_execution_result()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        # debugger_utils.abort_debugger(self)
+        debugger_utils.close_debugger(self)
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_debugger_poll_result.py b/web/pgadmin/tools/debugger/tests/test_debugger_poll_result.py
new file mode 100644
index 0000000..3b894a4
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_debugger_poll_result.py
@@ -0,0 +1,83 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class DebuggerPollResult(BaseTestGenerator):
+    """ This class will execute query in debugger."""
+
+    scenarios = utils.generate_scenarios('poll_result',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(DebuggerPollResult, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        self.test_data['funcowner'] = self.server["username"]
+
+        function_info = debugger_utils.create_function(self, utils)
+
+        self.func_id = json.loads(function_info.data)['node']['_id']
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+        if self.init_target:
+            debugger_utils.initialize_target(self, utils)
+
+            debugger_utils.start_listener(self)
+
+    def execute_query(self):
+        return self.tester.get(
+            self.url + str(self.trans_id) + '/',
+            content_type='application/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.execute_query()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.execute_query()
+            else:
+                response = self.execute_query()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        debugger_utils.close_debugger(self)
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_debugger_set_arguments.py b/web/pgadmin/tools/debugger/tests/test_debugger_set_arguments.py
new file mode 100644
index 0000000..d4eef3f
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_debugger_set_arguments.py
@@ -0,0 +1,89 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class DebuggerSetArguments(BaseTestGenerator):
+    """ This class will get arguments.."""
+
+    scenarios = utils.generate_scenarios('set_arguments',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(DebuggerSetArguments, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        self.test_data['funcowner'] = self.server["username"]
+
+        function_info = debugger_utils.create_function(self, utils)
+
+        self.func_id = json.loads(function_info.data)['node']['_id']
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+        if self.init_target:
+            debugger_utils.initialize_target(self, utils)
+
+    def set_arguments(self):
+        args = {"data": json.dumps([
+            {"server_id": self.server_id, "database_id": self.db_id,
+             "schema_id": self.schema_id, "function_id": self.func_id,
+             "arg_id": 0, "is_null": 0, "is_expression": 0, "use_default": 1}])
+        }
+
+        return self.tester.post(
+            self.url + str(self.server_id) + '/' + str(self.db_id) + '/' +
+            str(self.schema_id) + '/' + str(self.func_id),
+            data=args
+        )
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.set_arguments()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.set_arguments()
+            else:
+                response = self.set_arguments()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        debugger_utils.close_debugger(self)
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_debugger_set_breakpoint.py b/web/pgadmin/tools/debugger/tests/test_debugger_set_breakpoint.py
new file mode 100644
index 0000000..45f7757
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_debugger_set_breakpoint.py
@@ -0,0 +1,89 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class DebuggerSetBreakpoint(BaseTestGenerator):
+    """ This class will set breakpoint."""
+
+    scenarios = utils.generate_scenarios('set_breakpoint',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(DebuggerSetBreakpoint, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        self.test_data['funcowner'] = self.server["username"]
+
+        function_info = debugger_utils.create_function(self, utils)
+
+        self.func_id = json.loads(function_info.data)['node']['_id']
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+        if self.init_target:
+            debugger_utils.initialize_target(self, utils)
+
+            debugger_utils.start_listener(self)
+            self.port_no = debugger_utils.messages(self)
+            debugger_utils.start_execution(self)
+
+        if self.query_type == 2:
+            debugger_utils.set_breakpoint(self)
+
+    def set_breakpoint(self):
+        return self.tester.get(
+            self.url + str(self.trans_id) + '/3/' + str(self.query_type),
+            content_type='application/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.set_breakpoint()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.set_breakpoint()
+            else:
+                response = self.set_breakpoint()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        # debugger_utils.abort_debugger(self)
+        debugger_utils.close_debugger(self)
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_init_debugger_function.py b/web/pgadmin/tools/debugger/tests/test_init_debugger_function.py
new file mode 100644
index 0000000..82c27e1
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_init_debugger_function.py
@@ -0,0 +1,113 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+import uuid
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class InitDebugger(BaseTestGenerator):
+    """ This class will Initialize the debugger """
+
+    scenarios = utils.generate_scenarios('init_debugger_for_function',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(InitDebugger, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        if self.invalid_name:
+            db_user = self.server["username"]
+            self.test_data = {"acl": [
+                {
+                    "grantee": db_user,
+                    "grantor": db_user,
+                    "privileges":
+                        [
+                            {
+                                "privilege_type": "X",
+                                "privilege": True,
+                                "with_grant": True
+                            }
+                        ]
+                }
+            ], "arguments": [], "funcowner": db_user, "lanname": "sql",
+                "name": "test_function_:_%s" % str(uuid.uuid4())[1:8],
+                "options": [], "proleakproof": True, "pronamespace": 2200,
+                "prorettypename": "integer", "prosecdef": True,
+                "prosrc": "SELECT 1;", "probin": "$libdir/",
+                "provolatile": "s", "seclabels": [], "variables": [{
+                    "name": "search_path",
+                    "value": "public, pg_temp"
+                }]
+            }
+
+            function_info = debugger_utils.create_function(self, utils)
+            self.func_id = json.loads(function_info.data)['node']['_id']
+        else:
+            func_name = "test_function_%s" % str(uuid.uuid4())[1:8]
+            function_info = funcs_utils.create_function(
+                local_self.server, local_self.db_name, local_self.schema_name,
+                func_name)
+
+            self.func_id = function_info[0]
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+    def initialize_debugger(self):
+        if self.node_type == 'function':
+            return self.tester.get(
+                self.url + str(self.server_id) + '/' + str(self.db_id) +
+                '/' + str(self.schema_id) + '/' + str(self.func_id),
+                content_type='application/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.initialize_debugger()
+        else:
+            if self.mocking_required:
+                if hasattr(self,
+                           'mock_multiple_calls') and self.mock_multiple_calls:
+                    with patch(self.mock_data["function_name"],
+                               side_effect=eval(
+                                   self.mock_data["return_value"])):
+                        response = self.initialize_debugger()
+                else:
+                    with patch(self.mock_data["function_name"],
+                               return_value=eval(
+                                   self.mock_data["return_value"])):
+                        response = self.initialize_debugger()
+            else:
+                response = self.initialize_debugger()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_init_debugger_trigger.py b/web/pgadmin/tools/debugger/tests/test_init_debugger_trigger.py
new file mode 100644
index 0000000..b45e948
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_init_debugger_trigger.py
@@ -0,0 +1,95 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+import uuid
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+from pgadmin.browser.server_groups.servers.databases.schemas.\
+    tables.tests import utils as tables_utils
+from pgadmin.browser.server_groups.servers.databases.tests import utils as \
+    database_utils
+from pgadmin.browser.server_groups.servers.databases.schemas.functions.tests \
+    import utils as trigger_funcs_utils
+
+
+class InitDebugger(BaseTestGenerator):
+    """ This class will Initialize the debugger """
+
+    scenarios = utils.generate_scenarios('init_debugger_for_trigger',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(InitDebugger, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.db_name = parent_node_dict["database"][-1]["db_name"]
+        self.schema_id = self.schema_data['schema_id']
+        self.schema_name = self.schema_data["schema_name"]
+        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
+                                                 self.server_id, self.db_id)
+        if not db_con['data']["connected"]:
+            raise Exception("Could not connect to database to delete trigger.")
+
+        self.table_name = "table_trigger_%s" % (str(uuid.uuid4())[1:8])
+        self.table_id = tables_utils.create_table(self.server, self.db_name,
+                                                  self.schema_name,
+                                                  self.table_name)
+        self.trigger_func_name = "trigger_func_delete_%s" % \
+                                 str(uuid.uuid4())[1:8]
+        self.trigger_function_id = \
+            trigger_funcs_utils.create_trigger_function_with_trigger(
+                self.server, self.db_name, self.schema_name,
+                self.trigger_func_name)[0]
+        self.trigger_name = "trigger_%s" % str(uuid.uuid4())[1:8]
+
+        self.test_data['name'] = self.trigger_name
+        self.test_data['tfunction'] = "{0}.{1}".format(self.schema_name,
+                                                       self.trigger_func_name)
+        self.trigger_id = debugger_utils.create_trigger(self, utils)
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+    def initialize_debugger(self):
+        if self.node_type == 'trigger':
+            return self.tester.get(
+                self.url + str(self.server_id) + '/' + str(self.db_id) +
+                '/' + str(self.schema_id) + '/' + str(self.table_id) +
+                '/' + str(self.trigger_id),
+                content_type='html/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.initialize_debugger()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.initialize_debugger()
+            else:
+                response = self.initialize_debugger()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_init_target.py b/web/pgadmin/tools/debugger/tests/test_init_target.py
new file mode 100644
index 0000000..13470c8
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_init_target.py
@@ -0,0 +1,137 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+import uuid
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+from pgadmin.browser.server_groups.servers.databases.schemas.tables.tests\
+    import utils as tables_utils
+from pgadmin.browser.server_groups.servers.databases.schemas.functions.tests \
+    import utils as trigger_funcs_utils
+
+
+class InitTargetDebugger(BaseTestGenerator):
+    """ This class will Initialize the debugger """
+
+    scenarios = utils.generate_scenarios('init_debugger_target',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(InitTargetDebugger, self).setUp()
+        self.debugger_error = 'The debugger plugin is not enabled. ' \
+                              'Please add the plugin to the shared_preload_' \
+                              'libraries setting in the postgresql.conf file' \
+                              ' and restart the database server for indirect' \
+                              ' debugging.'
+
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        func_name = "test_function_%s" % str(uuid.uuid4())[1:8]
+        function_info = funcs_utils.create_function(
+            local_self.server, local_self.db_name, local_self.schema_name,
+            func_name)
+
+        self.func_id = function_info[0]
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+        if hasattr(self, 'create_trigger_func') and self.create_trigger_func:
+            db_con = db_utils.connect_database(self, utils.SERVER_GROUP,
+                                               self.server_id, self.db_id)
+            if not db_con['data']["connected"]:
+                raise Exception(
+                    "Could not connect to database to delete trigger.")
+
+            self.table_name = "table_trigger_%s" % (str(uuid.uuid4())[1:8])
+            self.table_id = tables_utils.create_table(self.server,
+                                                      self.db_name,
+                                                      self.schema_name,
+                                                      self.table_name)
+
+            self.trigger_func_name = 'test_trigger_function_%s' % str(
+                uuid.uuid4())[1:8]
+
+            self.trigger_function_id = \
+                trigger_funcs_utils.create_trigger_function_with_trigger(
+                    self.server, self.db_name, self.schema_name,
+                    self.trigger_func_name)[0]
+
+            self.trigger_name = "trigger_%s" % str(uuid.uuid4())[1:8]
+            self.test_data['name'] = self.trigger_name
+            self.test_data['tfunction'] = "{0}.{1}".format(
+                self.schema_name, self.trigger_func_name)
+
+            self.trigger_id = debugger_utils.create_trigger(self, utils)
+
+    def initialize_traget(self):
+        if hasattr(self, 'create_trigger_func') and self.create_trigger_func:
+            return self.tester.get(
+                self.url + str(self.trans_id) + '/' + str(self.server_id) +
+                '/' + str(self.db_id) + '/' + str(self.schema_id) +
+                '/' + str(self.table_id) + '/' +
+                str(self.trigger_id), content_type='application/json')
+        else:
+            return self.tester.get(
+                self.url + str(self.trans_id) + '/' + str(self.server_id) +
+                '/' + str(self.db_id) + '/' + str(self.schema_id) +
+                '/' + str(self.func_id),
+                content_type='application/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.initialize_traget()
+        else:
+            if self.mocking_required:
+                if hasattr(self, 'mock_multiple') and self.mock_multiple:
+                    with patch(self.mock_data["function_name"],
+                               side_effect=eval(
+                                   self.mock_data["return_value"])):
+                        response = self.initialize_traget()
+                else:
+                    with patch(self.mock_data["function_name"],
+                               return_value=eval(
+                                   self.mock_data["return_value"])):
+                        response = self.initialize_traget()
+            else:
+                response = self.initialize_traget()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        if response.json['errormsg'] == self.debugger_error:
+            print(self.debugger_error)
+            self.assertEqual(actual_response_code, actual_response_code)
+        else:
+            self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        debugger_utils.close_debugger(self)
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_messages_debugger.py b/web/pgadmin/tools/debugger/tests/test_messages_debugger.py
new file mode 100644
index 0000000..437cbfd
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_messages_debugger.py
@@ -0,0 +1,80 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+import uuid
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class DebuggerMessages(BaseTestGenerator):
+    """ This class will get messages the debugger """
+
+    scenarios = utils.generate_scenarios('debugger_messages',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(DebuggerMessages, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        self.test_data['funcowner'] = self.server["username"]
+
+        function_info = debugger_utils.create_function(self, utils)
+
+        self.func_id = json.loads(function_info.data)['node']['_id']
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+        if self.init_target:
+            debugger_utils.initialize_target(self, utils)
+
+    def messages(self):
+        return self.tester.get(
+            self.url + str(self.trans_id) + '/',
+            content_type='application/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.messages()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.messages()
+            else:
+                response = self.messages()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """Close debugger connection."""
+        debugger_utils.close_debugger(self)
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_restart_debugger.py b/web/pgadmin/tools/debugger/tests/test_restart_debugger.py
new file mode 100644
index 0000000..ab75315
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_restart_debugger.py
@@ -0,0 +1,82 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+import uuid
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class RestartDebugger(BaseTestGenerator):
+    """ This class will Restart the debugger """
+
+    scenarios = utils.generate_scenarios('restart_debugger',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(RestartDebugger, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        func_name = "test_function_%s" % str(uuid.uuid4())[1:8]
+        function_info = funcs_utils.create_function(
+            local_self.server, local_self.db_name, local_self.schema_name,
+            func_name)
+
+        self.func_id = function_info[0]
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+        if self.init_target:
+            debugger_utils.initialize_target(self, utils)
+
+    def restart_debugger(self):
+        return self.tester.get(
+            self.url + str(self.trans_id),
+            content_type='application/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.restart_debugger()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.restart_debugger()
+            else:
+                response = self.restart_debugger()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        debugger_utils.close_debugger(self)
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_start_execution_debugger.py b/web/pgadmin/tools/debugger/tests/test_start_execution_debugger.py
new file mode 100644
index 0000000..91f71f2
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_start_execution_debugger.py
@@ -0,0 +1,85 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+import uuid
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class DebuggerStartExecution(BaseTestGenerator):
+    """ This class will start debugger execution."""
+
+    scenarios = utils.generate_scenarios('start_execution',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(DebuggerStartExecution, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        self.test_data['funcowner'] = self.server["username"]
+
+        function_info = debugger_utils.create_function(self, utils)
+
+        self.func_id = json.loads(function_info.data)['node']['_id']
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+        if self.init_target:
+            debugger_utils.initialize_target(self, utils)
+
+        debugger_utils.start_listener(self)
+        self.port_no = debugger_utils.messages(self)
+
+    def start_execution(self):
+        return self.tester.get(
+            self.url + str(self.trans_id) + '/' + str(self.port_no),
+            content_type='application/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.start_execution()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.start_execution()
+            else:
+                response = self.start_execution()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        debugger_utils.abort_debugger(self)
+        debugger_utils.close_debugger(self)
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/test_start_listener_debugger.py b/web/pgadmin/tools/debugger/tests/test_start_listener_debugger.py
new file mode 100644
index 0000000..f4b079e
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/test_start_listener_debugger.py
@@ -0,0 +1,89 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2020, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+import json
+import uuid
+from pgadmin.utils.route import BaseTestGenerator
+from regression.python_test_utils import test_utils as utils
+from . import utils as debugger_utils
+from unittest.mock import patch
+from regression import parent_node_dict
+from pgadmin.browser.server_groups.servers.databases.schemas.functions \
+    .tests import utils as funcs_utils
+from pgadmin.browser.server_groups.servers.databases.tests import \
+    utils as db_utils
+
+
+class DebuggerStartListener(BaseTestGenerator):
+    """ This class will start listen the debugger """
+
+    scenarios = utils.generate_scenarios('start_listener',
+                                         debugger_utils.test_cases)
+
+    def setUp(self):
+        super(DebuggerStartListener, self).setUp()
+        self.schema_data = parent_node_dict['schema'][-1]
+        self.server_id = self.schema_data['server_id']
+        self.db_id = self.schema_data['db_id']
+        self.schema_id = self.schema_data['schema_id']
+
+        local_self = funcs_utils.set_up(self)
+
+        if self.server['type'] == 'pg':
+            self.skipTest('Skipping test case for pg')
+
+        self.test_data['funcowner'] = self.server["username"]
+
+        function_info = debugger_utils.create_function(self, utils)
+
+        self.func_id = json.loads(function_info.data)['node']['_id']
+
+        if self.add_extension:
+            debugger_utils.add_extension(self, utils)
+
+        init_debugger = debugger_utils.init_debugger_function(self)
+        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']
+
+        if self.init_target:
+            debugger_utils.initialize_target(self, utils)
+
+    def start_listener(self):
+        if hasattr(self, 'update_debugger') and self.update_debugger:
+            return self.tester.post(
+                self.url + str(self.trans_id),
+                data=json.dumps({}),
+                content_type='application/json')
+        else:
+            return self.tester.get(
+                self.url + str(self.trans_id),
+                content_type='application/json')
+
+    def runTest(self):
+        """
+        This function will initialize the debugger for function and procedures.
+        """
+        if self.is_positive_test:
+            response = self.start_listener()
+        else:
+            if self.mocking_required:
+                with patch(self.mock_data["function_name"],
+                           return_value=eval(self.mock_data["return_value"])):
+                    response = self.start_listener()
+            else:
+                response = self.start_listener()
+
+        actual_response_code = response.status_code
+        expected_response_code = self.expected_data['status_code']
+        self.assertEqual(actual_response_code, expected_response_code)
+
+    def tearDown(self):
+        """This function delete the server from SQLite """
+        debugger_utils.close_debugger(self)
+        debugger_utils.delete_function(self, utils)
+        db_utils.disconnect_database(self, self.server_id, self.db_id)
diff --git a/web/pgadmin/tools/debugger/tests/utils.py b/web/pgadmin/tools/debugger/tests/utils.py
new file mode 100644
index 0000000..6f6082d
--- /dev/null
+++ b/web/pgadmin/tools/debugger/tests/utils.py
@@ -0,0 +1,146 @@
+import os
+import json
+
+
+CURRENT_PATH = os.path.dirname(os.path.realpath(__file__))
+with open(CURRENT_PATH + "/debugger_test_data.json") as data_file:
+    test_cases = json.load(data_file)
+
+
+def delete_function(self, utils):
+    response = self.tester.delete(
+        '/browser/function/obj/' + str(utils.SERVER_GROUP) + '/' +
+        str(self.server_id) + '/' +
+        str(self.db_id) + '/' +
+        str(self.schema_id) + '/' + str(self.func_id),
+        content_type='html/json'
+    )
+
+    self.assertEqual(response.status_code, 200)
+
+
+def create_function(self, utils):
+    self.test_data['pronamespace'] = self.schema_id
+    function_url = 'browser/function/obj/{0}/{1}/{2}/{3}/'.format(
+        str(utils.SERVER_GROUP), str(self.server_id), str(self.db_id),
+        str(self.schema_id))
+
+    response = self.tester.post(
+        function_url,
+        data=json.dumps(self.test_data),
+        content_type='html/json'
+    )
+    return response
+
+
+def close_debugger(self):
+    response = self.tester.delete(
+        'debugger/close/' + str(self.trans_id),
+        content_type='application/json')
+
+    self.assertEqual(response.status_code, 200)
+
+
+def abort_debugger(self):
+    response = self.tester.get(
+        'debugger/execute_query/' + str(self.trans_id) + '/abort_target',
+        content_type='application/json')
+
+    self.assertEqual(response.status_code, 200)
+
+
+def add_extension(self, utils):
+    extension_url = '/browser/extension/obj/{0}/{1}/{2}/'.format(
+        str(utils.SERVER_GROUP), str(self.server_id), str(self.db_id))
+    extension_data = {
+        "name": "pldbgapi",
+        "relocatable": True,
+        "schema": self.schema_name,
+        "version": "1.1"
+    }
+    try:
+        response = self.tester.post(
+            extension_url,
+            data=json.dumps(extension_data),
+            content_type='application/json')
+    except Exception as e:
+        print('Unable to create "pldbgapi" extension.')
+
+
+def init_debugger_function(self):
+    function_url = '/debugger/init/function/'
+    response = self.tester.get(
+        function_url + str(self.server_id) + '/' + str(self.db_id) +
+        '/' + str(self.schema_id) + '/' + str(self.func_id),
+        content_type='application/json')
+
+    self.assertEqual(response.status_code, 200)
+    return response
+
+
+def initialize_target(self, utils, close_debugger_instance=True):
+    target_url = '/debugger/initialize_target/{0}/'.format(self.type)
+    response = self.tester.get(
+        target_url + str(self.trans_id) + '/' + str(self.server_id) +
+        '/' + str(self.db_id) + '/' + str(self.schema_id) +
+        '/' + str(self.func_id),
+        content_type='application/json')
+
+    if response.status_code == 200:
+        return response
+    else:
+        if close_debugger_instance:
+            close_debugger(self)
+
+        delete_function(self, utils)
+        self.skipTest('The debugger plugin is not enabled. Please add the '
+                      'plugin to the shared_preload_libraries setting in the '
+                      'postgresql.conf file and restart the database server '
+                      'for indirect debugging.')
+
+
+def start_listener(self):
+    response = self.tester.get(
+        'debugger/start_listener/' + str(self.trans_id),
+        content_type='application/json')
+
+    self.assertEqual(response.status_code, 200)
+
+
+def create_trigger(self, utils):
+    response = self.tester.post(
+        "{0}{1}/{2}/{3}/{4}/{5}/".format('/browser/trigger/obj/',
+                                         utils.SERVER_GROUP,
+                                         self.server_id, self.db_id,
+                                         self.schema_id, self.table_id),
+        data=json.dumps(self.test_data),
+        content_type='html/json'
+    )
+
+    self.assertEqual(response.status_code, 200)
+    return json.loads(response.data)['node']['_id']
+
+
+def messages(self):
+    response = self.tester.get(
+        'debugger/messages/' + str(self.trans_id) + '/',
+        content_type='application/json')
+
+    return json.loads(response.data)['data']['result']
+
+
+def start_execution(self):
+    response = self.tester.get(
+        'debugger/start_execution/' + str(self.trans_id) + '/' + str(
+            self.port_no), content_type='application/json')
+
+    self.assertEqual(response.status_code, 200)
+
+
+def set_breakpoint(self):
+    response = self.tester.get(
+        "debugger/set_breakpoint/" + str(self.trans_id) + '/3/1',
+        content_type='application/json')
+
+    self.assertEqual(response.status_code, 200)
+    return response


view thread (15+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected]
  Subject: Re: [pgAdmin][RM-5343]: [Code Coverage] Improve API test cases for Debugger
  In-Reply-To: <CAOBg0AOQhDiS5VQjG6ErGp=tmNj=_4T9rkL6cJeAmnGuWWtCCA@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox