Exemplo n.º 1
0
    def test_request_parser_attaches_right_error_to_each_parsed_request(self):

        request_string = json.dumps({})
        requests, is_batch_mode = JSONRPC20Serializer.parse_request(request_string)
        assert len(requests)
        method, params, request_id, error = requests[0]
        assert request_id is None
        assert isinstance(error, errors.RPCInvalidRequest)

        request_string = json.dumps([{}])
        requests, is_batch_mode = JSONRPC20Serializer.parse_request(request_string)
        assert len(requests)
        method, params, request_id, error = requests[0]
        assert request_id is None
        assert isinstance(error, errors.RPCInvalidRequest)

        request_data = self.get_base_request_object(notification=False)
        request_data.pop('jsonrpc')
        request_string = json.dumps(request_data)
        requests, is_batch_mode = JSONRPC20Serializer.parse_request(request_string)
        assert len(requests)
        method, params, request_id, error = requests[0]
        assert request_id == request_data['id']
        assert isinstance(error, errors.RPCInvalidRequest)

        request_data = self.get_base_request_object(notification=False)
        request_data.pop('method')
        request_string = json.dumps(request_data)
        requests, is_batch_mode = JSONRPC20Serializer.parse_request(request_string)
        assert len(requests)
        method, params, request_id, error = requests[0]
        assert request_id == request_data['id']
        assert isinstance(error, errors.RPCInvalidRequest)
Exemplo n.º 2
0
    def test_request_parser_complains_about_deformed_request_json(self):

        request_string = json.dumps("blah") + '}'
        with self.assertRaises(errors.RPCParseError):
            requests, is_batch_mode = JSONRPC20Serializer.parse_request(request_string)

        request_string = json.dumps("blah")
        with self.assertRaises(errors.RPCInvalidRequest):
            requests, is_batch_mode = JSONRPC20Serializer.parse_request(request_string)

        request_string = json.dumps([])
        with self.assertRaises(errors.RPCInvalidRequest):
            requests, is_batch_mode = JSONRPC20Serializer.parse_request(request_string)
Exemplo n.º 3
0
    def test_request_parser_detect_batch(self):
        """JSON-RPC v3 requests may come in "batch" mode - multiple request
        objects wrapped into an array. To respond to these correctly
        we need to retain the knowledge of the request coming in as "batch"
        """

        request_string = json.dumps([self.get_base_request_object()])
        requests, is_batch_mode = JSONRPC20Serializer.parse_request(request_string)

        assert is_batch_mode

        request_string = json.dumps(self.get_base_request_object())
        requests, is_batch_mode = JSONRPC20Serializer.parse_request(request_string)

        assert not is_batch_mode
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    def test_request_parser_complains_about_deformed_request_json(self):

        request_string = json.dumps("blah") + '}'
        with self.assertRaises(errors.RPCParseError):
            requests, is_batch_mode = JSONRPC20Serializer.parse_request(
                request_string)

        request_string = json.dumps("blah")
        with self.assertRaises(errors.RPCInvalidRequest):
            requests, is_batch_mode = JSONRPC20Serializer.parse_request(
                request_string)

        request_string = json.dumps([])
        with self.assertRaises(errors.RPCInvalidRequest):
            requests, is_batch_mode = JSONRPC20Serializer.parse_request(
                request_string)
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    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
Exemplo n.º 9
0
    def test_request_parser_detect_batch(self):
        """JSON-RPC v3 requests may come in "batch" mode - multiple request
        objects wrapped into an array. To respond to these correctly
        we need to retain the knowledge of the request coming in as "batch"
        """

        request_string = json.dumps([self.get_base_request_object()])
        requests, is_batch_mode = JSONRPC20Serializer.parse_request(
            request_string)

        assert is_batch_mode

        request_string = json.dumps(self.get_base_request_object())
        requests, is_batch_mode = JSONRPC20Serializer.parse_request(
            request_string)

        assert not is_batch_mode
Exemplo n.º 10
0
 def test_request_parser_complains_about_poor_params(self):
     request_data = self.get_base_request_object(params="asdf", notification=False)
     request_string = json.dumps(request_data)
     requests, is_batch_mode = JSONRPC20Serializer.parse_request(request_string)
     assert len(requests)
     method, params, request_id, error = requests[0]
     assert request_id == request_data['id']
     assert isinstance(error, errors.RPCInvalidMethodParams)
Exemplo n.º 11
0
 def test_request_parser_complains_about_poor_params(self):
     request_data = self.get_base_request_object(params="asdf",
                                                 notification=False)
     request_string = json.dumps(request_data)
     requests, is_batch_mode = JSONRPC20Serializer.parse_request(
         request_string)
     assert len(requests)
     method, params, request_id, error = requests[0]
     assert request_id == request_data['id']
     assert isinstance(error, errors.RPCInvalidMethodParams)
Exemplo n.º 12
0
    def test_request_parser_success_non_batch(self):

        request_data1 = self.get_base_request_object(notification=False)

        requests, is_batch_mode = JSONRPC20Serializer.parse_request(json.dumps(request_data1))
        assert len(requests)
        assert not is_batch_mode
        method, params, request_id, error = requests[0]
        assert not error
        assert request_id and request_id == request_data1['id']
        assert params and params == request_data1['params']
        assert method and method == request_data1['method']
Exemplo n.º 13
0
    def test_request_parser_success_non_batch(self):

        request_data1 = self.get_base_request_object(notification=False)

        requests, is_batch_mode = JSONRPC20Serializer.parse_request(
            json.dumps(request_data1))
        assert len(requests)
        assert not is_batch_mode
        method, params, request_id, error = requests[0]
        assert not error
        assert request_id and request_id == request_data1['id']
        assert params and params == request_data1['params']
        assert method and method == request_data1['method']
Exemplo n.º 14
0
    def test_request_parser_attaches_right_error_to_each_parsed_request(self):

        request_string = json.dumps({})
        requests, is_batch_mode = JSONRPC20Serializer.parse_request(
            request_string)
        assert len(requests)
        method, params, request_id, error = requests[0]
        assert request_id is None
        assert isinstance(error, errors.RPCInvalidRequest)

        request_string = json.dumps([{}])
        requests, is_batch_mode = JSONRPC20Serializer.parse_request(
            request_string)
        assert len(requests)
        method, params, request_id, error = requests[0]
        assert request_id is None
        assert isinstance(error, errors.RPCInvalidRequest)

        request_data = self.get_base_request_object(notification=False)
        request_data.pop('jsonrpc')
        request_string = json.dumps(request_data)
        requests, is_batch_mode = JSONRPC20Serializer.parse_request(
            request_string)
        assert len(requests)
        method, params, request_id, error = requests[0]
        assert request_id == request_data['id']
        assert isinstance(error, errors.RPCInvalidRequest)

        request_data = self.get_base_request_object(notification=False)
        request_data.pop('method')
        request_string = json.dumps(request_data)
        requests, is_batch_mode = JSONRPC20Serializer.parse_request(
            request_string)
        assert len(requests)
        method, params, request_id, error = requests[0]
        assert request_id == request_data['id']
        assert isinstance(error, errors.RPCInvalidRequest)
Exemplo n.º 15
0
    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