openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

182 lines
5.8 KiB

import json
import sys
if sys.version_info < (3, 3):
from mock import patch
else:
from unittest.mock import patch
if sys.version_info < (2, 7):
import unittest2 as unittest
else:
import unittest
# Flask is supported only for python2 and python3.3+
if sys.version_info < (3, 0) or sys.version_info >= (3, 3):
try:
from flask import Flask
except ImportError:
raise unittest.SkipTest('Flask not found for testing')
from ...backend.flask import JSONRPCAPI, api
@api.dispatcher.add_method
def dummy():
return ""
@unittest.skipIf((3, 0) <= sys.version_info < (3, 3),
'Flask does not support python 3.0 - 3.2')
class TestFlaskBackend(unittest.TestCase):
REQUEST = json.dumps({
"id": "0",
"jsonrpc": "2.0",
"method": "dummy",
})
def setUp(self):
self.client = self._get_test_client(JSONRPCAPI())
def _get_test_client(self, api):
@api.dispatcher.add_method
def dummy():
return ""
app = Flask(__name__)
app.config["TESTING"] = True
app.register_blueprint(api.as_blueprint())
return app.test_client()
def test_client(self):
response = self.client.post(
'/',
data=self.REQUEST,
content_type='application/json',
)
self.assertEqual(response.status_code, 200)
data = json.loads(response.data.decode('utf8'))
self.assertEqual(data['result'], '')
def test_method_not_allowed(self):
response = self.client.get(
'/',
content_type='application/json',
)
self.assertEqual(response.status_code, 405, "Should allow only POST")
def test_parse_error(self):
response = self.client.post(
'/',
data='{',
content_type='application/json',
)
self.assertEqual(response.status_code, 200)
data = json.loads(response.data.decode('utf8'))
self.assertEqual(data['error']['code'], -32700)
self.assertEqual(data['error']['message'], 'Parse error')
def test_wrong_content_type(self):
response = self.client.post(
'/',
data=self.REQUEST,
content_type='application/x-www-form-urlencoded',
)
self.assertEqual(response.status_code, 200)
data = json.loads(response.data.decode('utf8'))
self.assertEqual(data['error']['code'], -32700)
self.assertEqual(data['error']['message'], 'Parse error')
def test_invalid_request(self):
response = self.client.post(
'/',
data='{"method": "dummy", "id": 1}',
content_type='application/json',
)
self.assertEqual(response.status_code, 200)
data = json.loads(response.data.decode('utf8'))
self.assertEqual(data['error']['code'], -32600)
self.assertEqual(data['error']['message'], 'Invalid Request')
def test_method_not_found(self):
data = {
"jsonrpc": "2.0",
"method": "dummy2",
"id": 1
}
response = self.client.post(
'/',
data=json.dumps(data),
content_type='application/json',
)
self.assertEqual(response.status_code, 200)
data = json.loads(response.data.decode('utf8'))
self.assertEqual(data['error']['code'], -32601)
self.assertEqual(data['error']['message'], 'Method not found')
def test_invalid_parameters(self):
data = {
"jsonrpc": "2.0",
"method": "dummy",
"params": [42],
"id": 1
}
response = self.client.post(
'/',
data=json.dumps(data),
content_type='application/json',
)
self.assertEqual(response.status_code, 200)
data = json.loads(response.data.decode('utf8'))
self.assertEqual(data['error']['code'], -32602)
self.assertEqual(data['error']['message'], 'Invalid params')
def test_resource_map(self):
response = self.client.get('/map')
self.assertEqual(response.status_code, 200)
self.assertTrue("JSON-RPC map" in response.data.decode('utf8'))
def test_method_not_allowed_prefix(self):
response = self.client.get(
'/',
content_type='application/json',
)
self.assertEqual(response.status_code, 405)
def test_resource_map_prefix(self):
response = self.client.get('/map')
self.assertEqual(response.status_code, 200)
def test_as_view(self):
api = JSONRPCAPI()
with patch.object(api, 'jsonrpc') as mock_jsonrpc:
self.assertIs(api.as_view(), mock_jsonrpc)
def test_not_check_content_type(self):
client = self._get_test_client(JSONRPCAPI(check_content_type=False))
response = client.post(
'/',
data=self.REQUEST,
)
self.assertEqual(response.status_code, 200)
data = json.loads(response.data.decode('utf8'))
self.assertEqual(data['result'], '')
def test_check_content_type(self):
client = self._get_test_client(JSONRPCAPI(check_content_type=False))
response = client.post(
'/',
data=self.REQUEST,
content_type="application/x-www-form-urlencoded"
)
self.assertEqual(response.status_code, 200)
data = json.loads(response.data.decode('utf8'))
self.assertEqual(data['result'], '')
def test_empty_initial_dispatcher(self):
class SubDispatcher(type(api.dispatcher)):
pass
custom_dispatcher = SubDispatcher()
custom_api = JSONRPCAPI(custom_dispatcher)
self.assertEqual(type(custom_api.dispatcher), SubDispatcher)
self.assertEqual(id(custom_api.dispatcher), id(custom_dispatcher))