def test_handle_request_string(self): request1 = JSONRPC20Serializer.assemble_request( 'adder', (2, 3) ) request2 = JSONRPC20Serializer.assemble_request( 'adder', (4, 3) ) requests_string = JSONRPC20Serializer.json_dumps([request1, request2]) response_string = self.app.handle_request_string(requests_string) responses_data = JSONRPC20Serializer.json_loads(response_string) assert len(responses_data) == 2 response_json = responses_data[0] assert 'error' not in response_json assert response_json['id'] == request1['id'] assert response_json['result'] == 5 response_json = responses_data[1] assert 'error' not in response_json assert response_json['id'] == request2['id'] assert response_json['result'] == 7
def test_process_requests_with_errors(self): request1 = JSONRPC20Serializer.assemble_request( 'blow_up', (2, 3) ) request2 = JSONRPC20Serializer.assemble_request( 'adder', (4, 3) ) requests, is_batch_mode = JSONRPC20Serializer.parse_request( JSONRPC20Serializer.json_dumps([request1, request2]) ) responses = self.app.process_requests(requests) assert len(responses) == 2 response_json = responses[0] assert 'error' in response_json assert set(response_json['error'].keys()) == {'code', 'message', 'data'} assert response_json['error']['message'] == 'Blowing up on command' # actual .message from the raised error assert response_json['id'] == request1['id'] response_json = responses[1] assert 'error' not in response_json assert response_json['id'] == request2['id'] assert response_json['result'] == 7
def test_process_requests(self): request1 = JSONRPC20Serializer.assemble_request('adder', (2, 3)) request2 = JSONRPC20Serializer.assemble_request('adder', (4, 3)) request3 = JSONRPC20Serializer.assemble_request( 'adder' # note: no args. 'adder' can take it. JSONRpc app must too ) assert len({request1['id'], request2['id'], request3['id']}) == 3 requests, is_batch_mode = JSONRPC20Serializer.parse_request( JSONRPC20Serializer.json_dumps([request1, request2, request3])) responses = self.app.process_requests(requests) assert len(responses) == 3 response_json = responses[0] assert 'error' not in response_json assert response_json['id'] == request1['id'] assert response_json['result'] == 5 response_json = responses[1] assert 'error' not in response_json assert response_json['id'] == request2['id'] assert response_json['result'] == 7 response_json = responses[2] assert 'error' not in response_json assert response_json['id'] == request3['id'] assert response_json['result'] == 0
def test_handle_wsgi_request(self): request1 = JSONRPC20Serializer.assemble_request('adder', (2, 3)) request2 = JSONRPC20Serializer.assemble_request('adder', (4, 3)) requests_string = JSONRPC20Serializer.json_dumps([request1, request2]) environ = MockWSGIEnviron(requests_string, [('CONTENT_TYPE', 'application/json'), ('CONTENT_LENGTH', len(requests_string))]) start_response = MockWSGIStartResponse() response_iterable = self.app(environ, start_response) assert response_iterable response_string = ''.join(response_iterable) responses_data = JSONRPC20Serializer.json_loads(response_string) assert len(responses_data) == 2 response_json = responses_data[0] assert 'error' not in response_json assert response_json['id'] == request1['id'] assert response_json['result'] == 5 response_json = responses_data[1] assert 'error' not in response_json assert response_json['id'] == request2['id'] assert response_json['result'] == 7
def test_process_requests(self): request1 = JSONRPC20Serializer.assemble_request( 'adder', (2, 3) ) request2 = JSONRPC20Serializer.assemble_request( 'adder', (4, 3) ) requests, is_batch_mode = JSONRPC20Serializer.parse_request( json.dumps([request1, request2]) ) responses = self.app.process_requests(requests) assert len(responses) == 2 response_json = responses[0] assert 'error' not in response_json assert response_json['id'] == request2['id'] assert response_json['result'] == 5 response_json = responses[1] assert 'error' not in response_json assert response_json['id'] == request2['id'] assert response_json['result'] == 7
def test_handle_request_string(self): request1 = JSONRPC20Serializer.assemble_request( 'pass_through', (2, 3) ) request_id = request1['id'] requests_string = JSONRPC20Serializer.json_dumps(request1) response_string = self.app.handle_request_string( requests_string, some_context_data='value', more_context_data=['value'] ) response_json = JSONRPC20Serializer.json_loads(response_string) assert 'error' not in response_json assert response_json['id'] == request1['id'] args, kwargs = response_json['result'] assert args == [2, 3] self.assertEqual( dict( request_id=request_id, some_context_data='value', more_context_data=['value'] ), kwargs )
def test_serialized_request_contains_required_parts(self): request = JSONRPC20Serializer.assemble_request('method_name', (1, 'a')) self.assertEqual( {'jsonrpc', 'method', 'params', 'id'}, set(request.keys()) ) self.assertEqual( request['jsonrpc'], '2.0' ) self.assertEqual( request['method'], 'method_name' ) self.assertEqual( request['params'], (1, 'a') ) assert request['id'] # Truethy
def test_serialized_notification_request_contains_required_parts(self): """Notification requests are different in one respect - no "id (or "id" is null) """ request = JSONRPC20Serializer.assemble_request( 'method_name', (1, 'a'), notification=True ) self.assertEqual( {'jsonrpc', 'method', 'params'}, set(request.keys()) ) self.assertEqual( request['jsonrpc'], '2.0' ) self.assertEqual( request['method'], 'method_name' ) self.assertEqual( request['params'], (1, 'a') )
def test_serialized_request_contains_path_through_id(self): request = JSONRPC20Serializer.assemble_request('method_name', { "arg1": 1, "arg2": 'a' }) self.assertEqual(request['params'], {"arg1": 1, "arg2": 'a'}) self.assertIn('id', request) assert request['id']
def test_handle_wsgi_request(self): request1 = JSONRPC20Serializer.assemble_request( 'adder', (2, 3) ) request2 = JSONRPC20Serializer.assemble_request( 'adder', (4, 3) ) requests_string = JSONRPC20Serializer.json_dumps([request1, request2]) environ = MockWSGIEnviron( requests_string, [ ('CONTENT_TYPE', 'application/json'), ('CONTENT_LENGTH', len(requests_string)) ] ) start_response = MockWSGIStartResponse() response_iterable = self.app(environ, start_response) assert response_iterable response_string = ''.join(response_iterable) responses_data = JSONRPC20Serializer.json_loads(response_string) assert len(responses_data) == 2 response_json = responses_data[0] assert 'error' not in response_json assert response_json['id'] == request1['id'] assert response_json['result'] == 5 response_json = responses_data[1] assert 'error' not in response_json assert response_json['id'] == request2['id'] assert response_json['result'] == 7
def test_process_requests(self): request1 = JSONRPC20Serializer.assemble_request( 'adder', (2, 3) ) request2 = JSONRPC20Serializer.assemble_request( 'adder', (4, 3) ) request3 = JSONRPC20Serializer.assemble_request( 'adder' # note: no args. 'adder' can take it. JSONRpc app must too ) assert len({request1['id'], request2['id'], request3['id']}) == 3 requests, is_batch_mode = JSONRPC20Serializer.parse_request( JSONRPC20Serializer.json_dumps([request1, request2, request3]) ) responses = self.app.process_requests(requests) assert len(responses) == 3 response_json = responses[0] assert 'error' not in response_json assert response_json['id'] == request1['id'] assert response_json['result'] == 5 response_json = responses[1] assert 'error' not in response_json assert response_json['id'] == request2['id'] assert response_json['result'] == 7 response_json = responses[2] assert 'error' not in response_json assert response_json['id'] == request3['id'] assert response_json['result'] == 0
def test_serialized_request_contains_required_parts(self): request = JSONRPC20Serializer.assemble_request('method_name', (1, 'a')) self.assertEqual({'jsonrpc', 'method', 'params', 'id'}, set(request.keys())) self.assertEqual(request['jsonrpc'], '2.0') self.assertEqual(request['method'], 'method_name') self.assertEqual(request['params'], (1, 'a')) assert request['id'] # Truethy
def test_serialized_notification_request_contains_required_parts(self): """Notification requests are different in one respect - no "id (or "id" is null) """ request = JSONRPC20Serializer.assemble_request('method_name', (1, 'a'), notification=True) self.assertEqual({'jsonrpc', 'method', 'params'}, set(request.keys())) self.assertEqual(request['jsonrpc'], '2.0') self.assertEqual(request['method'], 'method_name') self.assertEqual(request['params'], (1, 'a'))
def test_serialized_request_contains_path_through_id(self): request = JSONRPC20Serializer.assemble_request( 'method_name', {"arg1":1, "arg2":'a'} ) self.assertEqual( request['params'], {"arg1":1, "arg2":'a'} ) self.assertIn( 'id', request ) assert request['id']