Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
synapse
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Monitor
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Maunium
synapse
Commits
2ebeda48
Commit
2ebeda48
authored
5 years ago
by
Erik Johnston
Browse files
Options
Downloads
Patches
Plain Diff
Add test
parent
8182a1cf
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
synapse/push/emailpusher.py
+19
-0
19 additions, 0 deletions
synapse/push/emailpusher.py
synapse/push/pusherpool.py
+23
-7
23 additions, 7 deletions
synapse/push/pusherpool.py
tests/push/test_email.py
+28
-1
28 additions, 1 deletion
tests/push/test_email.py
with
70 additions
and
8 deletions
synapse/push/emailpusher.py
+
19
−
0
View file @
2ebeda48
...
@@ -114,6 +114,21 @@ class EmailPusher(object):
...
@@ -114,6 +114,21 @@ class EmailPusher(object):
run_as_background_process
(
"
emailpush.process
"
,
self
.
_process
)
run_as_background_process
(
"
emailpush.process
"
,
self
.
_process
)
def
_pause_processing
(
self
):
"""
Used by tests to temporarily pause processing of events.
Asserts that its not currently processing.
"""
assert
not
self
.
_is_processing
self
.
_is_processing
=
True
def
_resume_processing
(
self
):
"""
Used by tests to resume processing of events after pausing.
"""
assert
self
.
_is_processing
self
.
_is_processing
=
False
self
.
_start_processing
()
@defer.inlineCallbacks
@defer.inlineCallbacks
def
_process
(
self
):
def
_process
(
self
):
# we should never get here if we are already processing
# we should never get here if we are already processing
...
@@ -215,6 +230,10 @@ class EmailPusher(object):
...
@@ -215,6 +230,10 @@ class EmailPusher(object):
@defer.inlineCallbacks
@defer.inlineCallbacks
def
save_last_stream_ordering_and_success
(
self
,
last_stream_ordering
):
def
save_last_stream_ordering_and_success
(
self
,
last_stream_ordering
):
if
last_stream_ordering
is
None
:
# This happens if we haven't yet processed anything
return
self
.
last_stream_ordering
=
last_stream_ordering
self
.
last_stream_ordering
=
last_stream_ordering
yield
self
.
store
.
update_pusher_last_stream_ordering_and_success
(
yield
self
.
store
.
update_pusher_last_stream_ordering_and_success
(
self
.
app_id
,
self
.
email
,
self
.
user_id
,
self
.
app_id
,
self
.
email
,
self
.
user_id
,
...
...
This diff is collapsed.
Click to expand it.
synapse/push/pusherpool.py
+
23
−
7
View file @
2ebeda48
...
@@ -60,6 +60,11 @@ class PusherPool:
...
@@ -60,6 +60,11 @@ class PusherPool:
def
add_pusher
(
self
,
user_id
,
access_token
,
kind
,
app_id
,
def
add_pusher
(
self
,
user_id
,
access_token
,
kind
,
app_id
,
app_display_name
,
device_display_name
,
pushkey
,
lang
,
data
,
app_display_name
,
device_display_name
,
pushkey
,
lang
,
data
,
profile_tag
=
""
):
profile_tag
=
""
):
"""
Creates a new pusher and adds it to the pool
Returns:
Deferred[EmailPusher|HttpPusher]
"""
time_now_msec
=
self
.
clock
.
time_msec
()
time_now_msec
=
self
.
clock
.
time_msec
()
# we try to create the pusher just to validate the config: it
# we try to create the pusher just to validate the config: it
...
@@ -103,7 +108,9 @@ class PusherPool:
...
@@ -103,7 +108,9 @@ class PusherPool:
last_stream_ordering
=
last_stream_ordering
,
last_stream_ordering
=
last_stream_ordering
,
profile_tag
=
profile_tag
,
profile_tag
=
profile_tag
,
)
)
yield
self
.
start_pusher_by_id
(
app_id
,
pushkey
,
user_id
)
pusher
=
yield
self
.
start_pusher_by_id
(
app_id
,
pushkey
,
user_id
)
defer
.
returnValue
(
pusher
)
@defer.inlineCallbacks
@defer.inlineCallbacks
def
remove_pushers_by_app_id_and_pushkey_not_user
(
self
,
app_id
,
pushkey
,
def
remove_pushers_by_app_id_and_pushkey_not_user
(
self
,
app_id
,
pushkey
,
...
@@ -184,7 +191,11 @@ class PusherPool:
...
@@ -184,7 +191,11 @@ class PusherPool:
@defer.inlineCallbacks
@defer.inlineCallbacks
def
start_pusher_by_id
(
self
,
app_id
,
pushkey
,
user_id
):
def
start_pusher_by_id
(
self
,
app_id
,
pushkey
,
user_id
):
"""
Look up the details for the given pusher, and start it
"""
"""
Look up the details for the given pusher, and start it
Returns:
Deferred[EmailPusher|HttpPusher|None]: The pusher started, if any
"""
if
not
self
.
_should_start_pushers
:
if
not
self
.
_should_start_pushers
:
return
return
...
@@ -192,13 +203,16 @@ class PusherPool:
...
@@ -192,13 +203,16 @@ class PusherPool:
app_id
,
pushkey
app_id
,
pushkey
)
)
p
=
None
p
usher_dict
=
None
for
r
in
resultlist
:
for
r
in
resultlist
:
if
r
[
'
user_name
'
]
==
user_id
:
if
r
[
'
user_name
'
]
==
user_id
:
p
=
r
p
usher_dict
=
r
if
p
:
pusher
=
None
yield
self
.
_start_pusher
(
p
)
if
pusher_dict
:
pusher
=
yield
self
.
_start_pusher
(
pusher_dict
)
defer
.
returnValue
(
pusher
)
@defer.inlineCallbacks
@defer.inlineCallbacks
def
_start_pushers
(
self
):
def
_start_pushers
(
self
):
...
@@ -224,7 +238,7 @@ class PusherPool:
...
@@ -224,7 +238,7 @@ class PusherPool:
pusherdict (dict):
pusherdict (dict):
Returns:
Returns:
None
Deferred[EmailPusher|HttpPusher]
"""
"""
try
:
try
:
p
=
self
.
pusher_factory
.
create_pusher
(
pusherdict
)
p
=
self
.
pusher_factory
.
create_pusher
(
pusherdict
)
...
@@ -270,6 +284,8 @@ class PusherPool:
...
@@ -270,6 +284,8 @@ class PusherPool:
p
.
on_started
(
have_notifs
)
p
.
on_started
(
have_notifs
)
defer
.
returnValue
(
p
)
@defer.inlineCallbacks
@defer.inlineCallbacks
def
remove_pusher
(
self
,
app_id
,
pushkey
,
user_id
):
def
remove_pusher
(
self
,
app_id
,
pushkey
,
user_id
):
appid_pushkey
=
"
%s:%s
"
%
(
app_id
,
pushkey
)
appid_pushkey
=
"
%s:%s
"
%
(
app_id
,
pushkey
)
...
...
This diff is collapsed.
Click to expand it.
tests/push/test_email.py
+
28
−
1
View file @
2ebeda48
...
@@ -108,7 +108,7 @@ class EmailPusherTests(HomeserverTestCase):
...
@@ -108,7 +108,7 @@ class EmailPusherTests(HomeserverTestCase):
)
)
token_id
=
user_tuple
[
"
token_id
"
]
token_id
=
user_tuple
[
"
token_id
"
]
self
.
get_success
(
self
.
pusher
=
self
.
get_success
(
self
.
hs
.
get_pusherpool
().
add_pusher
(
self
.
hs
.
get_pusherpool
().
add_pusher
(
user_id
=
self
.
user_id
,
user_id
=
self
.
user_id
,
access_token
=
token_id
,
access_token
=
token_id
,
...
@@ -137,6 +137,33 @@ class EmailPusherTests(HomeserverTestCase):
...
@@ -137,6 +137,33 @@ class EmailPusherTests(HomeserverTestCase):
# We should get emailed about that message
# We should get emailed about that message
self
.
_check_for_mail
()
self
.
_check_for_mail
()
def
test_multiple_members_email
(
self
):
# We want to test multiple notifications, so we pause processing of push
# while we send messages.
self
.
pusher
.
_pause_processing
()
# Create a simple room with multiple other users
room
=
self
.
helper
.
create_room_as
(
self
.
user_id
,
tok
=
self
.
access_token
)
for
other
in
self
.
others
:
self
.
helper
.
invite
(
room
=
room
,
src
=
self
.
user_id
,
tok
=
self
.
access_token
,
targ
=
other
.
id
,
)
self
.
helper
.
join
(
room
=
room
,
user
=
other
.
id
,
tok
=
other
.
token
)
# The other users send some messages
self
.
helper
.
send
(
room
,
body
=
"
Hi!
"
,
tok
=
self
.
others
[
0
].
token
)
self
.
helper
.
send
(
room
,
body
=
"
There!
"
,
tok
=
self
.
others
[
1
].
token
)
self
.
helper
.
send
(
room
,
body
=
"
There!
"
,
tok
=
self
.
others
[
1
].
token
)
# Nothing should have happened yet, as we're paused.
assert
not
self
.
email_attempts
self
.
pusher
.
_resume_processing
()
# We should get emailed about those messages
self
.
_check_for_mail
()
def
_check_for_mail
(
self
):
def
_check_for_mail
(
self
):
"
Check that the user receives an email notification
"
"
Check that the user receives an email notification
"
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment