mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-08-20 23:53:44 +08:00
Merge pyextra subtree
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
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))
|
||||
Reference in New Issue
Block a user