"""
Test Script for Lua Interpreter Flask server.
"""
import unittest
import app
from bs4 import BeautifulSoup
class TestWebApp(unittest.TestCase):
def setUp(self):
"""This method will be run before each of the test methods in the class."""
self.client = app.app.test_client()
def test_home_page_render(self):
response = self.client.get('/')
self.assertIn('Lua Telemetry Interpreter', str(response.data))
def test_get_published_data_file_names_and_content(self):
response = self.client.post('/get_published_data_file_names_and_content')
data = response.get_json()['file_names']
self.assertCountEqual([
'activity_foreground_state_changed', 'anr_occurred',
'app_start_memory_state_captured', 'app_crash_occurred',
'connectivity_publisher', 'memory_publisher', 'process_cpu_time',
'process_memory_snapshot', 'process_memory_state',
'vehicle_property_publisher', 'wtf_occurred'
], data)
data = response.get_json()['memory_publisher']
self.assertIn('"mem.timestamp_millis": 1664995933733', data)
def test_execute_script_output(self):
response = self.client.post(
'/execute_script',
data={
'script':
'function test(data,state) ' \
'tbl = {}; tbl[\'sessionId\'] = state.data + data.id;' \
'on_metrics_report(tbl) end',
'function-name': 'test',
'published-data': '{"id": 2}',
'saved-state': '{"data": 5}'
})
rendered_html = BeautifulSoup(response.data.decode('UTF-8'), 'html.parser')
self.assertIn('{
"sessionId": 7
}',
str(rendered_html.find(id='script-output')))
def test_execute_script_loading_error(self):
response = self.client.post(
'/execute_script',
data={
'script': 'function test(data, state) x == 1 end',
'function-name': 'test',
'published-data': "{}",
'saved-state': "{}"
})
rendered_html = BeautifulSoup(response.data.decode('UTF-8'), 'html.parser')
span = rendered_html.find(id='script-output').find('span')
self.assertIn(
'Error encountered while loading the script. A possible cause could ' \
'be syntax errors in the script.',
str(span))
def test_execute_script_running_error(self):
response = self.client.post(
'/execute_script',
data={
'script': 'function test(data, state) call() end',
'function-name': 'test',
'published-data': "{}",
'saved-state': "{}"
})
rendered_html = BeautifulSoup(response.data.decode('UTF-8'), 'html.parser')
span = rendered_html.find(id='script-output').find('span')
self.assertIn('Error encountered while running the script.', str(span))
def test_execute_script_running_error_with_stacktrace(self):
response = self.client.post(
'/execute_script',
data={
'script': 'function func_1(data, state) func_2() end function func_2() func_3() end',
'function-name': 'func_1',
'published-data': "{}",
'saved-state': "{}"
})
rendered_html = BeautifulSoup(response.data.decode('UTF-8'), 'html.parser')
span = rendered_html.find(id='script-output').find('span')
self.assertIn('Error encountered while running the script.', str(span))
self.assertIn('func_3', str(span))
self.assertIn('func_2', str(span))
self.assertIn('func_1', str(span))
def test_execute_script_saved_state_unchanged(self):
response = self.client.post(
'/execute_script',
data={
'script': 'function test(data, state) log(2) end',
'function-name': 'test',
'published-data': "{}",
'saved-state': '{"test": "state"}'
})
rendered_html = BeautifulSoup(response.data.decode('UTF-8'), 'html.parser')
span = rendered_html.find(id='saved-state-input').getText()
self.assertIn('{"test": "state"}', str(span))
def test_execute_script_saved_state_changed(self):
response = self.client.post(
'/execute_script',
data={
'script': 'function test(data, state) on_success(data) end',
'function-name': 'test',
'published-data': '{"test": "data"}',
'saved-state': '{"test": "state"}'
})
rendered_html = BeautifulSoup(response.data.decode('UTF-8'), 'html.parser')
span = rendered_html.find(id='saved-state-input').getText()
self.assertIn('{\n "test": "data"\n}', str(span))
def test_execute_script_faulty_published_data(self):
response = self.client.post('/execute_script',
data={
'script': 'function test(data, state) end',
'function-name': 'test',
'published-data': "",
'saved-state': "{}"
})
rendered_html = BeautifulSoup(response.data.decode('UTF-8'), 'html.parser')
span = rendered_html.find(id='script-output').find('span')
self.assertIn('Error from parsing published data', str(span))
def test_execute_script_faulty_saved_state(self):
response = self.client.post('/execute_script',
data={
'script': 'function test(data, state) end',
'function-name': 'test',
'published-data': "{}",
'saved-state': "f"
})
rendered_html = BeautifulSoup(response.data.decode('UTF-8'), 'html.parser')
span = rendered_html.find(id='script-output').find('span')
self.assertIn('Error from parsing saved state', str(span))
def test_execute_script_wrong_function(self):
response = self.client.post('/execute_script',
data={
'script': 'function test(data, state) end',
'function-name': 'tes',
'published-data': "{}",
'saved-state': "{}"
})
rendered_html = BeautifulSoup(response.data.decode('UTF-8'), 'html.parser')
span = rendered_html.find(id='script-output').find('span')
self.assertIn('Wrong function name.', str(span))
def test_prettify_json_success(self):
self.assertEqual('{\n "test": 2\n}', app.prettify_json('{"test":2}'))
def test_prettify_json_failure(self):
self.assertEqual('not_a_json', 'not_a_json')
if __name__ == '__main__':
unittest.main()