示例#1
0
 def test_receipt_processing(self):
     """it should be able to process an incoming XML receipt via HTTP"""
     publisher = TestPublisher()
     resource = transport.OperaReceiptResource(publisher)
     request = DummyRequest('/api/v1/sms/opera/receipt.xml')
     request.content = StringIO("""
     <?xml version="1.0"?>
     <!DOCTYPE receipts>
     <receipts>
       <receipt>
         <msgid>26567958</msgid>
         <reference>001efc31</reference>
         <msisdn>+27123456789</msisdn>
         <status>D</status>
         <timestamp>20080831T15:59:24</timestamp>
         <billed>NO</billed>
       </receipt>
     </receipts>
     """.strip())
     resource.render_POST(request)
     self.assertEquals(publisher.queue.pop(), (Message(**{
             'transport_name': 'Opera',
             'transport_msg_id': '001efc31',
             'transport_status': 'D',  # OK / delivered, opera specific
             'transport_delivered_at': datetime(2008, 8, 31, 15, 59, 24),
         }), {
             'routing_key': 'sms.receipt.opera'
         })
     )
示例#2
0
def request_generator(url, method='GET', content=True, headers=True):
    request = DummyRequest(url)
    request.method = method
    if content:
        request.content = StringIO()
    if headers:
        request.requestHeaders = Headers()

    return request
示例#3
0
def request_generator(url, method='GET', content=True, headers=True):
    request = DummyRequest(url)
    request.method = method
    if content:
        request.content = StringIO()
    if headers:
        request.requestHeaders = Headers()

    return request
示例#4
0
    def test_contentType(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'{"method": "echo", "id": 1, "params": ["ab"]}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assert_has_header(request.responseHeaders, name='content-type', expected='application/json')

        d.addCallback(rendered)
        return d
示例#5
0
    def test_notificationV2(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "sql", "jsonrpc": "2.0"}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assertEquals(request.written, [])

        d.addCallback(rendered)
        return d
示例#6
0
    def test_noSuchMethodNoId(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "aaaa"}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assertEquals(request.written, [])

        d.addCallback(rendered)
        return d
示例#7
0
    def test_notificationV1(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'{"method": "sql"}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assertEquals(request.written, [])

        d.addCallback(rendered)
        return d
示例#8
0
    def test_sqlOkV2(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'{"jsonrpc": "2.0", "method": "sql", "id": 1}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assert_json_values(request.written[0], jsonrpc="2.0", id=1, result=list)

        d.addCallback(rendered)
        return d
示例#9
0
    def test_noSuchMethodNoId(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "aaaa"}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assertEquals(request.written, [])

        d.addCallback(rendered)
        return d
示例#10
0
    def test_invalidIdCaseSensitive(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'{"method": "echo", "ID": "ABCD", "params": ["AB"]}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assertEquals(request.written, [])

        d.addCallback(rendered)
        return d
示例#11
0
    def test_notificationV2(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "sql", "jsonrpc": "2.0"}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assertEquals(request.written, [])

        d.addCallback(rendered)
        return d
示例#12
0
    def test_keywordsOkV2(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'{"method": "echo", "id": 1, "params": {"data": "arg"}, "jsonrpc": "2.0"}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"jsonrpc": "2.0", "id": 1, "result": "arg"}'
            self.assert_json(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#13
0
    def test_caseSensitiveParamsV2(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'{"method": "echo", "id": "ABCD", "params": ["AB"], "jsonrpc": "2.0"}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"jsonrpc": "2.0", "id": "ABCD", "result": "AB"}'
            self.assert_json(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#14
0
    def test_contentLength(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'{"method": "echo", "id": 1, "params": ["ab"]}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assert_has_header(request.responseHeaders, name='content-length',
                                   expected=str(len(request.written[0])))

        d.addCallback(rendered)
        return d
示例#15
0
    def test_invalidIdCaseSensitive(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "echo", "ID": "ABCD", ' +
                                   '"params": ["AB"]}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assertEquals(request.written, [])

        d.addCallback(rendered)
        return d
示例#16
0
    def test_idStrV1(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'{"method": "echo", "id": "abcd", "params": ["ab"]}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"error": null, "id": "abcd", "result": "ab"}'
            self.assert_json(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#17
0
    def test_sqlOkV1(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "sql", "id": 1}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"error": null, "id": 1, "result": ['
            self.assertTrue(request.written[0].startswith(expected))

        d.addCallback(rendered)
        return d
示例#18
0
    def test_sqlOkV1(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "sql", "id": 1}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"error": null, "id": 1, "result": ['
            self.assertTrue(request.written[0].startswith(expected))

        d.addCallback(rendered)
        return d
示例#19
0
    def test_contentLength(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "echo", "id": 1, ' +
                                   '"params": ["ab"]}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assertEquals(str(len(request.written[0])),
                              request.outgoingHeaders['content-length'])

        d.addCallback(rendered)
        return d
示例#20
0
    def test_caseSensitiveMethodV1(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'{"method": "ECHO", "id": "ABCD", "params": ["AB"]}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"result": null, "id": "ABCD", "error": {' + \
                       '"message": "Method ECHO not found", "code": -32601}}'
            self.assert_json(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#21
0
    def test_malformed(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "sql", "id')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"jsonrpc": "2.0", "id": null, "error": ' + \
                       '{"message": "Parse error", "code": -32700}}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#22
0
    def test_batchSingle(self):
        json = '[{"method": "echo", "id": 1, "params": ["arg"]}]'
        request = DummyRequest([''])
        request.content = StringIO(json)
        d = _render(self.srv, request)

        def rendered(_):
            expected = '[{"error": null, "id": 1, "result": "arg"}]'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#23
0
    def test_batchNotificationOnly(self):
        json = '[{"method": "echo", "params": {"data": "arg"}}, ' + \
               '{"method": "echo", "params": {"data": "arg"}}]'
        request = DummyRequest([''])
        request.content = StringIO(json)
        d = _render(self.srv, request)

        def rendered(_):
            self.assertEquals(request.written, [])

        d.addCallback(rendered)
        return d
示例#24
0
    def test_keywordsOkV1(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "echo", "id": 1, "params": ' +
                                   '{"data": "arg"}}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"error": null, "id": 1, "result": "arg"}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#25
0
    def test_invalidMethodCaseSensitive(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'{"METHOD": "echo", "id": "ABCD", "params": ["AB"]}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"result": null, "id": "ABCD", "error": ' + \
                       '{"message": "Invalid method type", "code": -32600}}'
            self.assert_json(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#26
0
    def test_invalidParamsCaseSensitive(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'{"method": "echo", "id": "ABCD", "PARAMS": ["AB"]}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"id": "ABCD", "error": {"message": "jsonrpc_echo() missing 1 required positional argument:' + \
                       ' \'data\'", "code": -32602}, "result": null}'
            self.assert_json(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#27
0
    def test_wrongParams(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'{"method": "sql", "id": 1, "params": ["aa", "bb"]}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"id": 1, "error": {"message": "jsonrpc_sql() takes 1 positional argument ' + \
                       'but 3 were given", "code": -32602}, "result": null}'
            self.assert_json(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#28
0
    def test_emptyRequest(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"jsonrpc": "2.0", "id": null, "error": ' + \
                       '{"message": "Parse error", "code": -32700}}'
            self.assert_json(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#29
0
    def test_echoOkV2(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "echo", "id": 1, ' +
                                   '"params": ["ab"], "jsonrpc": "2.0"}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"jsonrpc": "2.0", "id": 1, "result": "ab"}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#30
0
    def test_returnNone(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "returnNone", "id": 1}')

        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"error": null, "id": 1, "result": null}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#31
0
    def test_returnNone(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "returnNone", "id": 1}')

        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"error": null, "id": 1, "result": null}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#32
0
    def test_contentType(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "echo", "id": 1, ' +
                                   '"params": ["ab"]}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assertEquals(request.outgoingHeaders['content-type'],
                              'application/json')

        d.addCallback(rendered)
        return d
示例#33
0
    def test_caseSensitiveParamsV2(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "echo", "id": "ABCD", ' +
                                   '"params": ["AB"], "jsonrpc": "2.0"}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"jsonrpc": "2.0", "id": "ABCD", "result": "AB"}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#34
0
    def test_batchSingle(self):
        json = '[{"method": "echo", "id": 1, "params": ["arg"]}]'
        request = DummyRequest([''])
        request.content = StringIO(json)
        d = _render(self.srv, request)

        def rendered(_):
            expected = '[{"error": null, "id": 1, "result": "arg"}]'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#35
0
    def test_contentType(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "echo", "id": 1, ' +
                                   '"params": ["ab"]}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assertEquals(request.outgoingHeaders['content-type'],
                              'application/json')

        d.addCallback(rendered)
        return d
示例#36
0
    def test_malformed(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "sql", "id')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"jsonrpc": "2.0", "id": null, "error": ' + \
                       '{"message": "Parse error", "code": -32700}}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#37
0
    def test_contentLength(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "echo", "id": 1, ' +
                                   '"params": ["ab"]}')
        d = _render(self.srv, request)

        def rendered(_):
            self.assertEquals(str(len(request.written[0])),
                              request.outgoingHeaders['content-length'])

        d.addCallback(rendered)
        return d
示例#38
0
    def test_idStrV1(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "echo", "id": "abcd", ' +
                                   '"params": ["ab"]}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"error": null, "id": "abcd", "result": "ab"}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#39
0
    def test_batchNotificationOnly(self):
        json = '[{"method": "echo", "params": {"data": "arg"}}, ' + \
               '{"method": "echo", "params": {"data": "arg"}}]'
        request = DummyRequest([''])
        request.content = StringIO(json)
        d = _render(self.srv, request)

        def rendered(_):
            self.assertEquals(request.written, [])

        d.addCallback(rendered)
        return d
示例#40
0
    def test_keywordsOkV2(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "echo", "id": 1, "params": ' +
                                   '{"data": "arg"}, "jsonrpc": "2.0"}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"jsonrpc": "2.0", "id": 1, "result": "arg"}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#41
0
 def test_incoming_sms_processing(self):
     """
     it should be able to process in incoming sms as XML delivered via HTTP
     """
     publisher = TestPublisher()
     resource = transport.OperaReceiveResource(publisher)
     request = DummyRequest('/api/v1/sms/opera/receive.xml')
     request.content = StringIO("""
     <?xml version="1.0"?>
     <!DOCTYPE bspostevent>
     <bspostevent>
       <field name="MOReference" type = "string">282341913</field>
       <field name="IsReceipt" type = "string">NO</field>
       <field name="RemoteNetwork" type = "string">mtn-za</field>
       <field name="BSDate-tomorrow" type = "string">20100605</field>
       <field name="BSDate-today" type = "string">20100604</field>
       <field name="ReceiveDate" type = "date">2010-06-04 15:51:25 +0000</field>
       <field name="Local" type = "string">*32323</field>
       <field name="ClientID" type = "string">4</field>
       <field name="ChannelID" type = "string">111</field>
       <field name="MessageID" type = "string">373736741</field>
       <field name="ReceiptStatus" type = "string"></field>
       <field name="Prefix" type = "string"></field>
       <field name="ClientName" type = "string">Praekelt</field>
       <field name="MobileDevice" type = "string"></field>
       <field name="BSDate-yesterday" type = "string">20100603</field>
       <field name="Remote" type = "string">+27831234567</field>
       <field name="State" type = "string">5</field>
       <field name="MobileNetwork" type = "string">mtn-za</field>
       <field name="MobileNumber" type = "string">+27831234567</field>
       <field name="Text" type = "string">Hello World</field>
       <field name="ServiceID" type = "string">20222</field>
       <field name="RegType" type = "string">1</field>
       <field name="NewSubscriber" type = "string">NO</field>
       <field name="Subscriber" type = "string">+27831234567</field>
       <field name="Parsed" type = "string"></field>
       <field name="ServiceName" type = "string">Prktl Vumi</field>
       <field name="BSDate-thisweek" type = "string">20100531</field>
       <field name="ServiceEndDate" type = "string">2010-06-30 07:47:00 +0200</field>
       <field name="Now" type = "date">2010-06-04 15:51:27 +0000</field>
     </bspostevent>
     """.strip())
     resource.render_POST(request)
     self.assertEquals(publisher.queue.pop(), (Message(**{
             'to_msisdn': '*32323',
             'from_msisdn': '+27831234567',
             'message': 'Hello World',
             'transport_name': 'Opera',
             'received_at': iso8601.parse_date('2010-06-04 15:51:25 +0000'),
         }), {
             'routing_key': 'sms.inbound.opera.s32323'  # * -> s
         }))
示例#42
0
    def test_noSuchMethodV1(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "aaaa", "id": 1}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"result": null, "id": 1, "error": ' + \
                       '{"message": "Method aaaa not found", ' + \
                       '"code": -32601}}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#43
0
    def test_noSuchMethodV1(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "aaaa", "id": 1}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"result": null, "id": 1, "error": ' + \
                       '{"message": "Method aaaa not found", ' + \
                       '"code": -32601}}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#44
0
    def test_invalidMethodCaseSensitive(self):
        request = DummyRequest([''])
        request.content = StringIO('{"METHOD": "echo", "id": "ABCD", ' +
                                   '"params": ["AB"]}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"result": null, "id": "ABCD", "error": ' + \
                       '{"message": "Invalid method type", "code": -32600}}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#45
0
    def test_noSuchMethodV2(self):
        request = DummyRequest([''])
        request.content = BytesIO(b'{"method": "aaaa", "id": 1, "jsonrpc": "2.0"}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"jsonrpc": "2.0", "id": 1, "error": ' + \
                       '{"message": "Method aaaa not found", ' + \
                       '"code": -32601}}'
            self.assert_json(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#46
0
    def test_batchNotificationAndSingle(self):
        json = '[{"method": "echo", "id": 1, "params": ["arg"]}, ' + \
               '{"method": "echo", "params": ["arg"]}]'
        request = DummyRequest([''])
        request.content = BytesIO(json.encode())
        d = _render(self.srv, request)

        def rendered(_):
            expected = '[{"error": null, "id": 1, "result": "arg"}]'
            self.assert_json(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#47
0
    def test_caseSensitiveMethodV1(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "ECHO", "id": "ABCD", ' +
                                   '"params": ["AB"]}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"result": null, "id": "ABCD", "error": {' + \
                       '"message": "Method ECHO not found", "code": -32601}}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#48
0
    def testPOST(self):
        handler = webserver.JobsHandler(self.service)
        request = DummyRequest([''])
        request.content = StringIO(json.dumps(
            {'sprite_idx': 0,
             'block_idx': 0,
             'project': open(program_path('wh_words.xml')).read()}))

        # Start a job
        json_res = handler.render_POST(request)
        res = json.loads(json_res)
        self.assertTrue(res['id'], res)

        # Check job handler has the correct job_id
        job_handler = handler.children[res['id']]
        self.assertEqual(res['id'], job_handler.id)
        self.assertEqual(job_handler.state, 'running')

        # Check job process handler has the correct job_id
        job_process = job_handler.job_process
        self.assertEqual(res['id'], job_process.id)

        # Check state dict
        state = job_handler.state_dict()
        self.assertEqual(state['finished'], None)
        self.assertTrue(isinstance(parse_date(state['started']), datetime),
                        state['started'])
        self.assertEqual(state['id'], res['id'])
        self.assertEqual(state['state'], 'running')

        request = DummyRequest([''])
        d = Deferred()

        def _check_response(data):
            data = job_handler.render_GET(request)
            state = json.loads(data)
            self.assertTrue(isinstance(parse_date(state['finished']),
                                       datetime),
                            state['finished'])
            self.assertTrue(isinstance(parse_date(state['started']),
                                       datetime),
                            state['started'])
            self.assertEqual(state['id'], res['id'])
            self.assertEqual(state['state'], 'finished')
            self.assertEqual(state['result'],
                             ["whoever", "Who", "What.", "What"])

        d1 = job_process.wait_for()
        d1.addCallback(_check_response)
        d1.chainDeferred(d)
        return d
    def test_save_document(self):
        formatter = IncomingFormatter()
        doc_id, scheme = uuid4().hex, EncryptionSchemes.PUBKEY
        content = 'Incoming content'
        request = DummyRequest([self.user_uuid, doc_id])
        request.content = BytesIO(content)
        self.resource.render_PUT(request)

        open_database = self.backend_factory.open_database
        open_database.assert_called_once_with(self.user_uuid)
        self.couchdb.put_doc.assert_called_once()
        doc = self.couchdb.put_doc.call_args[0][0]
        self.assertEquals(doc_id, doc.doc_id)
        self.assertEquals(formatter.format(content, scheme), doc.content)
示例#50
0
    def test_invalidParamsCaseSensitive(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "echo", "id": "ABCD", ' +
                                   '"PARAMS": ["AB"]}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"result": null, "id": "ABCD", "error": ' + \
                       '{"message": "jsonrpc_echo() takes exactly 2 ' + \
                       'arguments (1 given)", "code": -32602}}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#51
0
    def test_wrongParams(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "sql", "id": 1, ' +
                                   '"params": ["aa", "bb"]}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"result": null, "id": 1, "error": {"message": ' + \
                       '"jsonrpc_sql() takes exactly 1 argument (3 given)"' + \
                       ', "code": -32602}}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#52
0
    def test_wrongParams(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "sql", "id": 1, ' +
                                   '"params": ["aa", "bb"]}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"result": null, "id": 1, "error": {"message": ' + \
                       '"jsonrpc_sql() takes exactly 1 argument (3 given)"' + \
                       ', "code": -32602}}'
            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#53
0
    def test_save_document(self):
        formatter = IncomingFormatter()
        doc_id, scheme = uuid4().hex, EncryptionSchemes.PUBKEY
        content = 'Incoming content'
        request = DummyRequest([self.user_uuid, doc_id])
        request.content = BytesIO(content)
        self.resource.render_PUT(request)

        open_database = self.backend_factory.open_database
        open_database.assert_called_once_with(self.user_uuid)
        self.couchdb.put_doc.assert_called_once()
        doc = self.couchdb.put_doc.call_args[0][0]
        self.assertEquals(doc_id, doc.doc_id)
        self.assertEquals(formatter.format(content, scheme), doc.content)
示例#54
0
    def test_keywordsUnexpected(self):
        request = DummyRequest([''])
        request.content = StringIO('{"method": "echo", "id": 1, "params": ' +
                                   '{"wrongname": "arg"}}')
        d = _render(self.srv, request)

        def rendered(_):
            expected = '{"result": null, "id": 1, "error": {"message": ' + \
                       '"jsonrpc_echo() got an unexpected keyword argument' + \
                       ' \'wrongname\'", "code": -32602}}'

            self.assertEquals(request.written[0], expected)

        d.addCallback(rendered)
        return d
示例#55
0
 def test_withRequest(self):
     """
     When an XML-RPC method is called and the implementation is
     decorated with L{withRequest}, the request object is passed as
     the first argument.
     """
     request = DummyRequest('/RPC2')
     request.method = "POST"
     request.content = StringIO(xmlrpclib.dumps(("foo",), 'withRequest'))
     def valid(n, request):
         data = xmlrpclib.loads(request.written[0])
         self.assertEqual(data, (('POST foo',), None))
     d = request.notifyFinish().addCallback(valid, request)
     self.resource.render_POST(request)
     return d