Esempio n. 1
0
    def test_query(self):
        def callback(request, uri, response_headers, expected_body,
                     expected_skip, expected_limit, expected_sort,
                     response_body):
            content_type = request.headers.get('Content-Type').split(';', 1)[0]
            self.assertEqual(content_type, 'application/json')
            self.assertEqual(request.querystring['skip'][0],
                             str(expected_skip))
            if expected_limit is not None:
                self.assertEqual(request.querystring['limit'][0],
                                 str(expected_limit))
            if expected_sort is not None:
                self.assertEqual(request.querystring['sort'][0],
                                 str(expected_sort))
            self.assertEqual(request.body, expected_body)
            response_headers[
                'content-type'] = 'application/json; charset=utf-8'
            return [200, response_headers, response_body]

        object_ids = [str(ObjectId()) for _ in range(5)]
        docs = [{
            '_id': object_ids[i],
            'storage_dir': f'/{object_ids[i]}',
            'uuid': uuid.uuid4()
        } for i in range(len(object_ids))]

        # test bare query
        httpretty.register_uri(httpretty.POST,
                               'http://127.0.0.1/v1/_query',
                               body=partial(callback,
                                            expected_body=b'{}',
                                            expected_skip=0,
                                            expected_limit=None,
                                            expected_sort=None,
                                            response_body=json_dumps(
                                                docs[:2])))
        ret = self.client.query()
        self.assertListEqual(ret, docs[:2])

        for obj_id in object_ids[:2]:  # test the storage dir cache
            self.assertEqual(self.client.get_storage_dir(obj_id), f'/{obj_id}')

        with pytest.raises(requests.exceptions.ConnectionError):
            _ = self.client.get_storage_dir(object_ids[2])

        # test query
        httpretty.register_uri(httpretty.POST,
                               'http://127.0.0.1/v1/_query',
                               body=partial(callback,
                                            expected_body=b'{"name":"hint"}',
                                            expected_skip=1,
                                            expected_limit=99,
                                            expected_sort='-start_time',
                                            response_body=json_dumps(
                                                docs[2:4])))
        ret = self.client.query(filter={'name': 'hint'},
                                sort='-start_time',
                                skip=1,
                                limit=99)
        self.assertListEqual(ret, docs[2:4])
Esempio n. 2
0
 def callback(request, uri, response_headers):
     content_type = request.headers.get('Content-Type').split(';', 1)[0]
     self.assertEqual(content_type, 'application/json')
     fields = json_loads(request.body)
     self.assertDictEqual(fields, {'status': 'COMPLETED'})
     response_headers[
         'content-type'] = 'application/json; charset=utf-8'
     return [200, response_headers, json_dumps(doc_fields)]
Esempio n. 3
0
 def callback(request, uri, response_headers):
     content_type = request.headers.get('Content-Type').split(';', 1)[0]
     self.assertEqual(content_type, 'application/json')
     fields = json_loads(request.body)
     self.assertDictEqual(fields, doc_fields)
     o = {'_id': object_id}
     o.update(doc_fields)
     response_headers[
         'content-type'] = 'application/json; charset=utf-8'
     return [200, response_headers, json_dumps(o)]
Esempio n. 4
0
 def callback(request, uri, response_headers):
     response_headers[
         'content-type'] = 'application/json; charset=utf-8'
     counter[0] += 1
     return [200, response_headers, json_dumps(doc_fields)]
Esempio n. 5
0
 def callback(request, uri, response_headers):
     self.assertEqual(request.body, b'')
     response_headers[
         'content-type'] = 'application/json; charset=utf-8'
     return [200, response_headers, json_dumps([object_id])]
Esempio n. 6
0
 def callback(request, uri, response_headers):
     response_headers[
         'content-type'] = 'application/json; charset=utf-8'
     o = {'_id': object_id}
     o.update(doc_fields)
     return [200, response_headers, json_dumps(o)]