Commit 328ed927 by Kyle McCormick

Add new testing decorator check_mongo_calls_range

parent 3dafdd2f
...@@ -381,35 +381,50 @@ def mongo_uses_error_check(store): ...@@ -381,35 +381,50 @@ def mongo_uses_error_check(store):
@contextmanager @contextmanager
def check_mongo_calls(num_finds=0, num_sends=None): def check_mongo_calls_range(max_finds=float("inf"), min_finds=0, max_sends=None, min_sends=None):
""" """
Instruments the given store to count the number of calls to find (incl find_one) and the number Instruments the given store to count the number of calls to find (incl find_one) and the number
of calls to send_message which is for insert, update, and remove (if you provide num_sends). At the of calls to send_message which is for insert, update, and remove (if you provide num_sends). At the
end of the with statement, it compares the counts to the num_finds and num_sends. end of the with statement, it compares the counts to the bounds provided in the arguments.
:param num_finds: the exact number of find calls expected :param max_finds: the maximum number of find calls expected
:param num_sends: If none, don't instrument the send calls. If non-none, count and compare to :param min_finds: the minimum number of find calls expected
the given int value. :param max_sends: If non-none, make sure number of send calls are <=max_sends
:param min_sends: If non-none, make sure number of send calls are >=min_sends
""" """
with check_sum_of_calls( with check_sum_of_calls(
pymongo.message, pymongo.message,
['query', 'get_more'], ['query', 'get_more'],
num_finds, max_finds,
num_finds min_finds,
): ):
if num_sends is not None: if max_sends is not None or min_sends is not None:
with check_sum_of_calls( with check_sum_of_calls(
pymongo.message, pymongo.message,
# mongo < 2.6 uses insert, update, delete and _do_batched_insert. >= 2.6 _do_batched_write # mongo < 2.6 uses insert, update, delete and _do_batched_insert. >= 2.6 _do_batched_write
['insert', 'update', 'delete', '_do_batched_write_command', '_do_batched_insert', ], ['insert', 'update', 'delete', '_do_batched_write_command', '_do_batched_insert', ],
num_sends, max_sends if max_sends is not None else float("inf"),
num_sends min_sends if min_sends is not None else 0,
): ):
yield yield
else: else:
yield yield
@contextmanager
def check_mongo_calls(num_finds=0, num_sends=None):
"""
Instruments the given store to count the number of calls to find (incl find_one) and the number
of calls to send_message which is for insert, update, and remove (if you provide num_sends). At the
end of the with statement, it compares the counts to the num_finds and num_sends.
:param num_finds: the exact number of find calls expected
:param num_sends: If none, don't instrument the send calls. If non-none, count and compare to
the given int value.
"""
with check_mongo_calls_range(num_finds, num_finds, num_sends, num_sends):
yield
# This dict represents the attribute keys for a course's 'about' info. # This dict represents the attribute keys for a course's 'about' info.
# Note: The 'video' attribute is intentionally excluded as it must be # Note: The 'video' attribute is intentionally excluded as it must be
# handled separately; its value maps to an alternate key name. # handled separately; its value maps to an alternate key name.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment