Added more Gdb Apis

This commit is contained in:
Shubh942 2024-06-11 19:26:04 +05:30
parent cbde5832fd
commit fdb657ffe9
2 changed files with 206 additions and 16 deletions

View file

@ -1,10 +1,9 @@
import unittest
import json
import tempfile
import os
from flask import Flask
from flask_testing import TestCase # type: ignore
from main import app
from flask_testing import TestCase
from main import app
class TestGDBRoutes(TestCase):
def create_app(self):
@ -12,35 +11,23 @@ class TestGDBRoutes(TestCase):
return app
def setUp(self):
# Create a temporary directory for compiling C++ programs
self.temp_dir = tempfile.TemporaryDirectory()
# Compile a simple C++ program for testing
compile_payload = {
"code": "#include <iostream>\nint main() { std::cout << 'Hello, World!'; return 0; }",
"name": "test_program",
"temp_dir": self.temp_dir.name # Pass the temporary directory path
}
self.client.post('/compile', data=json.dumps(compile_payload), content_type='application/json')
def tearDown(self):
# Clean up the temporary directory
self.temp_dir.cleanup()
def test_compile_code(self):
# Create a temporary directory for compiling the test program
temp_dir = tempfile.TemporaryDirectory()
payload = {
"code": "#include <iostream>\nint main() { std::cout << 'Hello, Universe!'; return 0; }",
"name": "test_program2",
"temp_dir": temp_dir.name # Pass the temporary directory path
}
response = self.client.post('/compile', data=json.dumps(payload), content_type='application/json')
# Clean up the temporary directory
temp_dir.cleanup()
self.assertEqual(response.status_code, 200)
self.assertTrue(response.json['success'])
@ -118,11 +105,67 @@ class TestGDBRoutes(TestCase):
def test_memory_map(self):
memory_map_payload = {
"name": "test_program"
"name": "test_program"
}
response = self.client.post('/memory_map', data=json.dumps(memory_map_payload), content_type='application/json')
self.assertEqual(response.status_code, 200)
self.assertTrue(response.json['success'])
def test_continue_execution(self):
continue_payload = {
"name": "test_program"
}
response = self.client.post('/continue', data=json.dumps(continue_payload), content_type='application/json')
self.assertEqual(response.status_code, 200)
self.assertTrue(response.json['success'])
def test_step_over(self):
step_over_payload = {
"name": "test_program"
}
response = self.client.post('/step_over', data=json.dumps(step_over_payload), content_type='application/json')
self.assertEqual(response.status_code, 200)
self.assertTrue(response.json['success'])
def test_step_into(self):
step_into_payload = {
"name": "test_program"
}
response = self.client.post('/step_into', data=json.dumps(step_into_payload), content_type='application/json')
self.assertEqual(response.status_code, 200)
self.assertTrue(response.json['success'])
def test_step_out(self):
step_out_payload = {
"name": "test_program"
}
response = self.client.post('/step_out', data=json.dumps(step_out_payload), content_type='application/json')
self.assertEqual(response.status_code, 200)
self.assertTrue(response.json['success'])
def test_add_watchpoint(self):
add_watchpoint_payload = {
"variable": "var",
"name": "test_program"
}
response = self.client.post('/add_watchpoint', data=json.dumps(add_watchpoint_payload), content_type='application/json')
self.assertEqual(response.status_code, 200)
self.assertTrue(response.json['success'])
def test_delete_breakpoint(self):
set_breakpoint_payload = {
"location": "main",
"name": "test_program"
}
self.client.post('/set_breakpoint', data=json.dumps(set_breakpoint_payload), content_type='application/json')
delete_breakpoint_payload = {
"breakpoint_number": 1,
"name": "test_program"
}
response = self.client.post('/delete_breakpoint', data=json.dumps(delete_breakpoint_payload), content_type='application/json')
self.assertEqual(response.status_code, 200)
self.assertTrue(response.json['success'])
if __name__ == '__main__':
unittest.main()

View file

@ -278,5 +278,152 @@ def memory_map():
return jsonify(response)
@app.route('/continue', methods=['POST'])
def continue_execution():
global program_name
data = request.get_json()
file = data.get('name')
if program_name != file:
start_gdb_session(f'{file}')
try:
result = execute_gdb_command("continue")
response = {
'success': True,
'result': result,
'code': "execute_gdb_command('continue')"
}
except Exception as e:
response = {
'success': False,
'error': str(e),
'code': "execute_gdb_command('continue')"
}
return jsonify(response)
@app.route('/step_over', methods=['POST'])
def step_over():
global program_name
data = request.get_json()
file = data.get('name')
if program_name != file:
start_gdb_session(f'{file}')
try:
result = execute_gdb_command("next")
response = {
'success': True,
'result': result,
'code': "execute_gdb_command('next')"
}
except Exception as e:
response = {
'success': False,
'error': str(e),
'code': "execute_gdb_command('next')"
}
return jsonify(response)
@app.route('/step_into', methods=['POST'])
def step_into():
global program_name
data = request.get_json()
file = data.get('name')
if program_name != file:
start_gdb_session(f'{file}')
try:
result = execute_gdb_command("step")
response = {
'success': True,
'result': result,
'code': "execute_gdb_command('step')"
}
except Exception as e:
response = {
'success': False,
'error': str(e),
'code': "execute_gdb_command('step')"
}
return jsonify(response)
@app.route('/step_out', methods=['POST'])
def step_out():
global program_name
data = request.get_json()
file = data.get('name')
if program_name != file:
start_gdb_session(f'{file}')
try:
result = execute_gdb_command("finish")
response = {
'success': True,
'result': result,
'code': "execute_gdb_command('finish')"
}
except Exception as e:
response = {
'success': False,
'error': str(e),
'code': "execute_gdb_command('finish')"
}
return jsonify(response)
@app.route('/add_watchpoint', methods=['POST'])
def add_watchpoint():
global program_name
data = request.get_json()
variable = data.get('variable')
file = data.get('name')
if program_name != file:
start_gdb_session(f'{file}')
try:
result = execute_gdb_command(f"watch {variable}")
response = {
'success': True,
'result': result,
'code': f"execute_gdb_command('watch {variable}')"
}
except Exception as e:
response = {
'success': False,
'error': str(e),
'code': f"execute_gdb_command('watch {variable}')"
}
return jsonify(response)
@app.route('/delete_breakpoint', methods=['POST'])
def delete_breakpoint():
global program_name
data = request.get_json()
breakpoint_number = data.get('breakpoint_number')
file = data.get('name')
if program_name != file:
start_gdb_session(f'{file}')
try:
result = execute_gdb_command(f"delete {breakpoint_number}")
response = {
'success': True,
'result': result,
'code': f"execute_gdb_command('delete {breakpoint_number}')"
}
except Exception as e:
response = {
'success': False,
'error': str(e),
'code': f"execute_gdb_command('delete {breakpoint_number}')"
}
return jsonify(response)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=10000)