Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
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
Esempio n. 4
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
Esempio n. 5
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
Esempio n. 6
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
Esempio n. 7
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
Esempio n. 8
0
    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
        )
Esempio n. 9
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
Esempio n. 10
0
    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')
        )
Esempio n. 11
0
    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
Esempio n. 13
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
Esempio n. 14
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
Esempio n. 15
0
    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'))
Esempio n. 16
0
    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']