mirror of
https://github.com/element-hq/synapse.git
synced 2024-12-20 19:10:45 +03:00
Fix tests
Signed-off-by: Olivier Wilkinson (reivilibre) <olivier@librepush.net>
This commit is contained in:
parent
7f2ec2e954
commit
4a3fec1f3b
2 changed files with 73 additions and 19 deletions
|
@ -682,29 +682,67 @@ class StatsStore(StateDeltasStore):
|
||||||
desc="update_room_state",
|
desc="update_room_state",
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_deltas_for_room(self, room_id, start, size=100):
|
def get_statistics_for_subject(self, stats_type, stats_id, start, size=100):
|
||||||
"""
|
"""
|
||||||
Get statistics deltas for a given room.
|
Get statistics for a given subject.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
room_id (str)
|
stats_type (str): The type of subject
|
||||||
|
stats_id (str): The ID of the subject (e.g. room_id or user_id)
|
||||||
start (int): Pagination start. Number of entries, not timestamp.
|
start (int): Pagination start. Number of entries, not timestamp.
|
||||||
size (int): How many entries to return.
|
size (int): How many entries to return.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Deferred[list[dict]], where the dict has the keys of
|
Deferred[list[dict]], where the dict has the keys of
|
||||||
ABSOLUTE_STATS_FIELDS["room"] and "ts".
|
ABSOLUTE_STATS_FIELDS[stats_type], and "bucket_size" and "end_ts".
|
||||||
"""
|
"""
|
||||||
return self._simple_select_list_paginate(
|
return self.runInteraction(
|
||||||
"room_stats",
|
"get_statistics_for_subject",
|
||||||
{"room_id": room_id},
|
self._get_statistics_for_subject_txn,
|
||||||
"ts",
|
stats_type,
|
||||||
|
stats_id,
|
||||||
start,
|
start,
|
||||||
size,
|
size,
|
||||||
retcols=(list(ABSOLUTE_STATS_FIELDS["room"]) + ["ts"]),
|
)
|
||||||
|
|
||||||
|
# TODO fix and account for _current.
|
||||||
|
def _get_statistics_for_subject_txn(
|
||||||
|
self, txn, stats_type, stats_id, start, size=100
|
||||||
|
):
|
||||||
|
|
||||||
|
table, id_col = TYPE_TO_TABLE[stats_type]
|
||||||
|
selected_columns = list(
|
||||||
|
ABSOLUTE_STATS_FIELDS[stats_type] + PER_SLICE_FIELDS[stats_type]
|
||||||
|
)
|
||||||
|
|
||||||
|
slice_list = self._simple_select_list_paginate_txn(
|
||||||
|
txn,
|
||||||
|
table + "_historical",
|
||||||
|
{id_col: stats_id},
|
||||||
|
"end_ts",
|
||||||
|
start,
|
||||||
|
size,
|
||||||
|
retcols=selected_columns + ["bucket_size", "end_ts"],
|
||||||
order_direction="DESC",
|
order_direction="DESC",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if len(slice_list) < size:
|
||||||
|
# also fetch the current row
|
||||||
|
current = self._simple_select_one_txn(
|
||||||
|
txn,
|
||||||
|
table + "_current",
|
||||||
|
{id_col: stats_id},
|
||||||
|
retcols=selected_columns + ["start_ts", "end_ts"],
|
||||||
|
allow_none=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
if current is not None and current["end_ts"] is not None:
|
||||||
|
# it is dirty, so contains new information, so should be included
|
||||||
|
current["bucket_size"] = current["end_ts"] - current["start_ts"]
|
||||||
|
del current["start_ts"]
|
||||||
|
return [current] + slice_list
|
||||||
|
return slice_list
|
||||||
|
|
||||||
def get_all_room_state(self):
|
def get_all_room_state(self):
|
||||||
return self._simple_select_list(
|
return self._simple_select_list(
|
||||||
"room_state", None, retcols=("name", "topic", "canonical_alias")
|
"room_state", None, retcols=("name", "topic", "canonical_alias")
|
||||||
|
|
|
@ -14,13 +14,11 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from mock import Mock
|
from mock import Mock
|
||||||
|
|
||||||
from twisted.internet import defer
|
from twisted.internet import defer
|
||||||
|
|
||||||
from synapse.api.constants import EventTypes, Membership
|
from synapse.api.constants import EventTypes, Membership
|
||||||
from synapse.rest import admin
|
from synapse.rest import admin
|
||||||
from synapse.rest.client.v1 import login, room
|
from synapse.rest.client.v1 import login, room
|
||||||
|
|
||||||
from tests import unittest
|
from tests import unittest
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,7 +45,7 @@ class StatsRoomTests(unittest.HomeserverTestCase):
|
||||||
self.get_success(
|
self.get_success(
|
||||||
self.store._simple_insert(
|
self.store._simple_insert(
|
||||||
"background_updates",
|
"background_updates",
|
||||||
{"update_name": "populate_stats_createtables", "progress_json": "{}"},
|
{"update_name": "populate_stats_prepare", "progress_json": "{}"},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
self.get_success(
|
self.get_success(
|
||||||
|
@ -56,7 +54,17 @@ class StatsRoomTests(unittest.HomeserverTestCase):
|
||||||
{
|
{
|
||||||
"update_name": "populate_stats_process_rooms",
|
"update_name": "populate_stats_process_rooms",
|
||||||
"progress_json": "{}",
|
"progress_json": "{}",
|
||||||
"depends_on": "populate_stats_createtables",
|
"depends_on": "populate_stats_prepare",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self.get_success(
|
||||||
|
self.store._simple_insert(
|
||||||
|
"background_updates",
|
||||||
|
{
|
||||||
|
"update_name": "populate_stats_process_users",
|
||||||
|
"progress_json": "{}",
|
||||||
|
"depends_on": "populate_stats_process_rooms",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -66,7 +74,7 @@ class StatsRoomTests(unittest.HomeserverTestCase):
|
||||||
{
|
{
|
||||||
"update_name": "populate_stats_cleanup",
|
"update_name": "populate_stats_cleanup",
|
||||||
"progress_json": "{}",
|
"progress_json": "{}",
|
||||||
"depends_on": "populate_stats_process_rooms",
|
"depends_on": "populate_stats_process_users",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -114,6 +122,7 @@ class StatsRoomTests(unittest.HomeserverTestCase):
|
||||||
Ingestion via notify_new_event will ignore tokens that the background
|
Ingestion via notify_new_event will ignore tokens that the background
|
||||||
update have already processed.
|
update have already processed.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.reactor.advance(86401)
|
self.reactor.advance(86401)
|
||||||
|
|
||||||
self.hs.config.stats_enabled = False
|
self.hs.config.stats_enabled = False
|
||||||
|
@ -138,12 +147,12 @@ class StatsRoomTests(unittest.HomeserverTestCase):
|
||||||
self.hs.config.stats_enabled = True
|
self.hs.config.stats_enabled = True
|
||||||
self.handler.stats_enabled = True
|
self.handler.stats_enabled = True
|
||||||
self.store._all_done = False
|
self.store._all_done = False
|
||||||
self.get_success(self.store.update_stats_stream_pos(None))
|
self.get_success(self.store.update_stats_positions(None))
|
||||||
|
|
||||||
self.get_success(
|
self.get_success(
|
||||||
self.store._simple_insert(
|
self.store._simple_insert(
|
||||||
"background_updates",
|
"background_updates",
|
||||||
{"update_name": "populate_stats_createtables", "progress_json": "{}"},
|
{"update_name": "populate_stats_prepare", "progress_json": "{}"},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -154,6 +163,8 @@ class StatsRoomTests(unittest.HomeserverTestCase):
|
||||||
self.helper.invite(room=room_1, src=u1, targ=u2, tok=u1_token)
|
self.helper.invite(room=room_1, src=u1, targ=u2, tok=u1_token)
|
||||||
self.helper.join(room=room_1, user=u2, tok=u2_token)
|
self.helper.join(room=room_1, user=u2, tok=u2_token)
|
||||||
|
|
||||||
|
# orig_delta_processor = self.store.
|
||||||
|
|
||||||
# Now do the initial ingestion.
|
# Now do the initial ingestion.
|
||||||
self.get_success(
|
self.get_success(
|
||||||
self.store._simple_insert(
|
self.store._simple_insert(
|
||||||
|
@ -185,8 +196,13 @@ class StatsRoomTests(unittest.HomeserverTestCase):
|
||||||
self.helper.invite(room=room_1, src=u1, targ=u3, tok=u1_token)
|
self.helper.invite(room=room_1, src=u1, targ=u3, tok=u1_token)
|
||||||
self.helper.join(room=room_1, user=u3, tok=u3_token)
|
self.helper.join(room=room_1, user=u3, tok=u3_token)
|
||||||
|
|
||||||
# Get the deltas! There should be two -- day 1, and day 2.
|
# self.handler.notify_new_event()
|
||||||
r = self.get_success(self.store.get_deltas_for_room(room_1, 0))
|
|
||||||
|
# We need to let the delta processor advance…
|
||||||
|
self.pump(10 * 60)
|
||||||
|
|
||||||
|
# Get the slices! There should be two -- day 1, and day 2.
|
||||||
|
r = self.get_success(self.store.get_statistics_for_subject("room", room_1, 0))
|
||||||
|
|
||||||
# The oldest has 2 joined members
|
# The oldest has 2 joined members
|
||||||
self.assertEqual(r[-1]["joined_members"], 2)
|
self.assertEqual(r[-1]["joined_members"], 2)
|
||||||
|
@ -299,6 +315,6 @@ class StatsRoomTests(unittest.HomeserverTestCase):
|
||||||
|
|
||||||
# One delta, with two joined members -- the room creator, and our fake
|
# One delta, with two joined members -- the room creator, and our fake
|
||||||
# user.
|
# user.
|
||||||
r = self.get_success(self.store.get_deltas_for_room(room_1, 0))
|
r = self.get_success(self.store.get_statistics_for_subject("room", room_1, 0))
|
||||||
self.assertEqual(len(r), 1)
|
self.assertEqual(len(r), 1)
|
||||||
self.assertEqual(r[0]["joined_members"], 2)
|
self.assertEqual(r[0]["joined_members"], 2)
|
||||||
|
|
Loading…
Reference in a new issue