Files
asyncio-mongo_tailablecursor/tests/test_queries.py
2014-01-27 22:36:36 -07:00

153 lines
5.2 KiB
Python

# coding: utf-8
# Copyright 2010 Mark L.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from tests.base import async, MongoTest
class TestMongoQueries(MongoTest):
@async
def test_SingleCursorIteration(self):
yield from self.coll.insert([{'v':i} for i in range(10)], safe=True)
res = yield from self.coll.find()
self.assertEqual(len(res), 10)
@async
def test_MultipleCursorIterations(self):
yield from self.coll.insert([{'v':i} for i in range(450)], safe=True)
res = yield from self.coll.find()
self.assertEqual(len(res), 450)
@async
def test_LargeData(self):
yield from self.coll.insert([{'v':' '*(2**19)} for i in range(4)], safe=True)
res = yield from self.coll.find()
self.assertEqual(len(res), 4)
class TestMongoQueriesEdgeCases(MongoTest):
@async
def test_BelowBatchThreshold(self):
yield from self.coll.insert([{'v':i} for i in range(100)], safe=True)
res = yield from self.coll.find()
self.assertEqual(len(res), 100)
@async
def test_EqualToBatchThreshold(self):
yield from self.coll.insert([{'v':i} for i in range(101)], safe=True)
res = yield from self.coll.find()
self.assertEqual(len(res), 101)
@async
def test_AboveBatchThreshold(self):
yield from self.coll.insert([{'v':i} for i in range(102)], safe=True)
res = yield from self.coll.find()
self.assertEqual(len(res), 102)
class TestLimit(MongoTest):
@async
def test_LimitBelowBatchThreshold(self):
yield from self.coll.insert([{'v':i} for i in range(50)], safe=True)
res = yield from self.coll.find(limit=20)
self.assertEqual(len(res), 20)
@async
def test_LimitAboveBatchThreshold(self):
yield from self.coll.insert([{'v':i} for i in range(200)], safe=True)
res = yield from self.coll.find(limit=150)
self.assertEqual(len(res), 150)
@async
def test_LimitAtBatchThresholdEdge(self):
yield from self.coll.insert([{'v':i} for i in range(200)], safe=True)
res = yield from self.coll.find(limit=100)
self.assertEqual(len(res), 100)
yield from self.coll.drop(safe=True)
yield from self.coll.insert([{'v':i} for i in range(200)], safe=True)
res = yield from self.coll.find(limit=101)
self.assertEqual(len(res), 101)
yield from self.coll.drop(safe=True)
yield from self.coll.insert([{'v':i} for i in range(200)], safe=True)
res = yield from self.coll.find(limit=102)
self.assertEqual(len(res), 102)
@async
def test_LimitAboveMessageSizeThreshold(self):
yield from self.coll.insert([{'v':' '*(2**20)} for i in range(8)], safe=True)
res = yield from self.coll.find(limit=5)
self.assertEqual(len(res), 5)
@async
def test_HardLimit(self):
yield from self.coll.insert([{'v':i} for i in range(200)], safe=True)
res = yield from self.coll.find(limit=-150)
self.assertEqual(len(res), 150)
@async
def test_HardLimitAboveMessageSizeThreshold(self):
yield from self.coll.insert([{'v':' '*(2**20)} for i in range(8)], safe=True)
res = yield from self.coll.find(limit=-6)
self.assertEqual(len(res), 4)
class TestSkip(MongoTest):
@async
def test_Skip(self):
yield from self.coll.insert([{'v':i} for i in range(5)], safe=True)
res = yield from self.coll.find(skip=3)
self.assertEqual(len(res), 2)
yield from self.coll.drop(safe=True)
yield from self.coll.insert([{'v':i} for i in range(5)], safe=True)
res = yield from self.coll.find(skip=5)
self.assertEqual(len(res), 0)
yield from self.coll.drop(safe=True)
yield from self.coll.insert([{'v':i} for i in range(5)], safe=True)
res = yield from self.coll.find(skip=6)
self.assertEqual(len(res), 0)
@async
def test_SkipWithLimit(self):
yield from self.coll.insert([{'v':i} for i in range(5)], safe=True)
res = yield from self.coll.find(skip=3, limit=1)
self.assertEqual(len(res), 1)
yield from self.coll.drop(safe=True)
yield from self.coll.insert([{'v':i} for i in range(5)], safe=True)
res = yield from self.coll.find(skip=4, limit=2)
self.assertEqual(len(res), 1)
yield from self.coll.drop(safe=True)
yield from self.coll.insert([{'v':i} for i in range(5)], safe=True)
res = yield from self.coll.find(skip=4, limit=1)
self.assertEqual(len(res), 1)
yield from self.coll.drop(safe=True)
yield from self.coll.insert([{'v':i} for i in range(5)], safe=True)
res = yield from self.coll.find(skip=5, limit=1)
self.assertEqual(len(res), 0)