mirror of https://github.com/zulip/zulip.git
tests: Add assert_memcached_count.
We use a specific name to distinguish from other caches like per-request caches.
This commit is contained in:
parent
0eea42b48c
commit
549891266d
|
@ -70,7 +70,12 @@ from zerver.lib.test_console_output import (
|
|||
tee_stderr_and_find_extra_console_output,
|
||||
tee_stdout_and_find_extra_console_output,
|
||||
)
|
||||
from zerver.lib.test_helpers import find_key_by_email, instrument_url, queries_captured
|
||||
from zerver.lib.test_helpers import (
|
||||
cache_tries_captured,
|
||||
find_key_by_email,
|
||||
instrument_url,
|
||||
queries_captured,
|
||||
)
|
||||
from zerver.lib.topic import RESOLVED_TOPIC_PREFIX, filter_by_topic_name_via_message
|
||||
from zerver.lib.user_groups import get_system_user_group_for_user
|
||||
from zerver.lib.users import get_api_key
|
||||
|
@ -1223,6 +1228,12 @@ Output:
|
|||
print(f"\nexpected length: {count}\nactual length: {actual_count}")
|
||||
raise AssertionError(f"{type(items)} is of unexpected size!")
|
||||
|
||||
@contextmanager
|
||||
def assert_memcached_count(self, count: int) -> Iterator[None]:
|
||||
with cache_tries_captured() as cache_tries:
|
||||
yield
|
||||
self.assert_length(cache_tries, count)
|
||||
|
||||
@contextmanager
|
||||
def assert_database_query_count(
|
||||
self, count: int, include_savepoints: bool = False, keep_cache_warm: bool = False
|
||||
|
|
|
@ -24,7 +24,6 @@ from zerver.lib.digest import (
|
|||
from zerver.lib.message import get_last_message_id
|
||||
from zerver.lib.streams import create_stream_if_needed
|
||||
from zerver.lib.test_classes import ZulipTestCase
|
||||
from zerver.lib.test_helpers import cache_tries_captured
|
||||
from zerver.models import (
|
||||
Client,
|
||||
Message,
|
||||
|
@ -209,11 +208,9 @@ class TestDigestEmailMessages(ZulipTestCase):
|
|||
digest_user_ids = [user.id for user in digest_users]
|
||||
|
||||
with self.assert_database_query_count(12):
|
||||
with cache_tries_captured() as cache_tries:
|
||||
with self.assert_memcached_count(0):
|
||||
bulk_handle_digest_email(digest_user_ids, cutoff)
|
||||
|
||||
self.assert_length(cache_tries, 0)
|
||||
|
||||
self.assert_length(digest_users, mock_send_future_email.call_count)
|
||||
|
||||
for i, digest_user in enumerate(digest_users):
|
||||
|
|
|
@ -21,7 +21,7 @@ from zerver.actions.user_topics import do_set_user_topic_visibility_policy
|
|||
from zerver.actions.users import do_change_user_role
|
||||
from zerver.lib.message import MessageDict, has_message_access, messages_for_ids, truncate_topic
|
||||
from zerver.lib.test_classes import ZulipTestCase, get_topic_messages
|
||||
from zerver.lib.test_helpers import cache_tries_captured, queries_captured
|
||||
from zerver.lib.test_helpers import queries_captured
|
||||
from zerver.lib.topic import RESOLVED_TOPIC_PREFIX, TOPIC_NAME
|
||||
from zerver.lib.url_encoding import near_stream_message_url
|
||||
from zerver.lib.user_topics import (
|
||||
|
@ -3691,7 +3691,7 @@ class EditMessageTest(EditMessageTestCase):
|
|||
"iago", "test move stream", "new stream", "test"
|
||||
)
|
||||
|
||||
with self.assert_database_query_count(56), cache_tries_captured() as cache_tries:
|
||||
with self.assert_database_query_count(56), self.assert_memcached_count(13):
|
||||
result = self.client_patch(
|
||||
f"/json/messages/{msg_id}",
|
||||
{
|
||||
|
@ -3701,7 +3701,6 @@ class EditMessageTest(EditMessageTestCase):
|
|||
"topic": "new topic",
|
||||
},
|
||||
)
|
||||
self.assert_length(cache_tries, 13)
|
||||
|
||||
messages = get_topic_messages(user_profile, old_stream, "test")
|
||||
self.assert_length(messages, 1)
|
||||
|
|
|
@ -52,7 +52,6 @@ from zerver.lib.test_classes import ZulipTestCase
|
|||
from zerver.lib.test_helpers import (
|
||||
HostRequestMock,
|
||||
avatar_disk_path,
|
||||
cache_tries_captured,
|
||||
find_key_by_email,
|
||||
get_test_image_file,
|
||||
load_subdomain_token,
|
||||
|
@ -929,15 +928,13 @@ class LoginTest(ZulipTestCase):
|
|||
ContentType.objects.clear_cache()
|
||||
|
||||
# Ensure the number of queries we make is not O(streams)
|
||||
with self.assert_database_query_count(104), cache_tries_captured() as cache_tries:
|
||||
with self.captureOnCommitCallbacks(execute=True):
|
||||
self.register(self.nonreg_email("test"), "test")
|
||||
|
||||
# We can probably avoid a couple cache hits here, but there doesn't
|
||||
# seem to be any O(N) behavior. Some of the cache hits are related
|
||||
# to sending messages, such as getting the welcome bot, looking up
|
||||
# the alert words for a realm, etc.
|
||||
self.assert_length(cache_tries, 19)
|
||||
with self.assert_database_query_count(104), self.assert_memcached_count(19):
|
||||
with self.captureOnCommitCallbacks(execute=True):
|
||||
self.register(self.nonreg_email("test"), "test")
|
||||
|
||||
user_profile = self.nonreg_user("test")
|
||||
self.assert_logged_in_user_id(user_profile.id)
|
||||
|
|
|
@ -4944,7 +4944,7 @@ class SubscriptionAPITest(ZulipTestCase):
|
|||
# Sends 3 peer-remove events and 2 unsubscribe events.
|
||||
with self.capture_send_event_calls(expected_num_events=5) as events:
|
||||
with self.assert_database_query_count(16):
|
||||
with cache_tries_captured() as cache_count:
|
||||
with self.assert_memcached_count(3):
|
||||
bulk_remove_subscriptions(
|
||||
realm,
|
||||
[user1, user2],
|
||||
|
@ -4952,8 +4952,6 @@ class SubscriptionAPITest(ZulipTestCase):
|
|||
acting_user=None,
|
||||
)
|
||||
|
||||
self.assert_length(cache_count, 3)
|
||||
|
||||
peer_events = [e for e in events if e["event"].get("op") == "peer_remove"]
|
||||
|
||||
# We only care about a subset of users when we inspect
|
||||
|
@ -5081,8 +5079,11 @@ class SubscriptionAPITest(ZulipTestCase):
|
|||
|
||||
test_user_ids = [user.id for user in test_users]
|
||||
|
||||
# The only known O(N) behavior here is that we call
|
||||
# principal_to_user_profile for each of our users, but it
|
||||
# should be cached.
|
||||
with self.assert_database_query_count(21):
|
||||
with cache_tries_captured() as cache_tries:
|
||||
with self.assert_memcached_count(3):
|
||||
with mock.patch("zerver.views.streams.send_messages_for_new_subscribers"):
|
||||
self.common_subscribe_to_streams(
|
||||
desdemona,
|
||||
|
@ -5090,10 +5091,6 @@ class SubscriptionAPITest(ZulipTestCase):
|
|||
dict(principals=orjson.dumps(test_user_ids).decode()),
|
||||
)
|
||||
|
||||
# The only known O(N) behavior here is that we call
|
||||
# principal_to_user_profile for each of our users.
|
||||
self.assert_length(cache_tries, 3)
|
||||
|
||||
def test_subscriptions_add_for_principal(self) -> None:
|
||||
"""
|
||||
You can subscribe other people to streams.
|
||||
|
|
|
@ -40,7 +40,6 @@ from zerver.lib.send_email import (
|
|||
from zerver.lib.stream_topic import StreamTopicTarget
|
||||
from zerver.lib.test_classes import ZulipTestCase
|
||||
from zerver.lib.test_helpers import (
|
||||
cache_tries_captured,
|
||||
get_subscription,
|
||||
get_test_image_file,
|
||||
reset_email_visibility_to_everyone_in_zulip_realm,
|
||||
|
@ -795,7 +794,7 @@ class QueryCountTest(ZulipTestCase):
|
|||
prereg_user = PreregistrationUser.objects.get(email="fred@zulip.com")
|
||||
|
||||
with self.assert_database_query_count(93):
|
||||
with cache_tries_captured() as cache_tries:
|
||||
with self.assert_memcached_count(24):
|
||||
with self.capture_send_event_calls(expected_num_events=11) as events:
|
||||
fred = do_create_user(
|
||||
email="fred@zulip.com",
|
||||
|
@ -806,7 +805,6 @@ class QueryCountTest(ZulipTestCase):
|
|||
acting_user=None,
|
||||
)
|
||||
|
||||
self.assert_length(cache_tries, 24)
|
||||
peer_add_events = [event for event in events if event["event"].get("op") == "peer_add"]
|
||||
|
||||
notifications = set()
|
||||
|
|
Loading…
Reference in New Issue