mirror of
https://github.com/element-hq/synapse.git
synced 2026-08-28 18:08:17 +00:00
Integrate presence from hotfixes (#3694)
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2018 New Vector Ltd
|
||||
#
|
||||
# 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 synapse.app.frontend_proxy import FrontendProxyServer
|
||||
|
||||
from tests.unittest import HomeserverTestCase
|
||||
|
||||
|
||||
class FrontendProxyTests(HomeserverTestCase):
|
||||
def make_homeserver(self, reactor, clock):
|
||||
|
||||
hs = self.setup_test_homeserver(
|
||||
http_client=None, homeserverToUse=FrontendProxyServer
|
||||
)
|
||||
|
||||
return hs
|
||||
|
||||
def test_listen_http_with_presence_enabled(self):
|
||||
"""
|
||||
When presence is on, the stub servlet will not register.
|
||||
"""
|
||||
# Presence is on
|
||||
self.hs.config.use_presence = True
|
||||
|
||||
config = {
|
||||
"port": 8080,
|
||||
"bind_addresses": ["0.0.0.0"],
|
||||
"resources": [{"names": ["client"]}],
|
||||
}
|
||||
|
||||
# Listen with the config
|
||||
self.hs._listen_http(config)
|
||||
|
||||
# Grab the resource from the site that was told to listen
|
||||
self.assertEqual(len(self.reactor.tcpServers), 1)
|
||||
site = self.reactor.tcpServers[0][1]
|
||||
self.resource = (
|
||||
site.resource.children["_matrix"].children["client"].children["r0"]
|
||||
)
|
||||
|
||||
request, channel = self.make_request("PUT", "presence/a/status")
|
||||
self.render(request)
|
||||
|
||||
# 400 + unrecognised, because nothing is registered
|
||||
self.assertEqual(channel.code, 400)
|
||||
self.assertEqual(channel.json_body["errcode"], "M_UNRECOGNIZED")
|
||||
|
||||
def test_listen_http_with_presence_disabled(self):
|
||||
"""
|
||||
When presence is on, the stub servlet will register.
|
||||
"""
|
||||
# Presence is off
|
||||
self.hs.config.use_presence = False
|
||||
|
||||
config = {
|
||||
"port": 8080,
|
||||
"bind_addresses": ["0.0.0.0"],
|
||||
"resources": [{"names": ["client"]}],
|
||||
}
|
||||
|
||||
# Listen with the config
|
||||
self.hs._listen_http(config)
|
||||
|
||||
# Grab the resource from the site that was told to listen
|
||||
self.assertEqual(len(self.reactor.tcpServers), 1)
|
||||
site = self.reactor.tcpServers[0][1]
|
||||
self.resource = (
|
||||
site.resource.children["_matrix"].children["client"].children["r0"]
|
||||
)
|
||||
|
||||
request, channel = self.make_request("PUT", "presence/a/status")
|
||||
self.render(request)
|
||||
|
||||
# 401, because the stub servlet still checks authentication
|
||||
self.assertEqual(channel.code, 401)
|
||||
self.assertEqual(channel.json_body["errcode"], "M_MISSING_TOKEN")
|
||||
@@ -0,0 +1,72 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2018 New Vector Ltd
|
||||
#
|
||||
# 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 mock import Mock
|
||||
|
||||
from synapse.rest.client.v1 import presence
|
||||
from synapse.types import UserID
|
||||
|
||||
from tests import unittest
|
||||
|
||||
|
||||
class PresenceTestCase(unittest.HomeserverTestCase):
|
||||
""" Tests presence REST API. """
|
||||
|
||||
user_id = "@sid:red"
|
||||
|
||||
user = UserID.from_string(user_id)
|
||||
servlets = [presence.register_servlets]
|
||||
|
||||
def make_homeserver(self, reactor, clock):
|
||||
|
||||
hs = self.setup_test_homeserver(
|
||||
"red", http_client=None, federation_client=Mock()
|
||||
)
|
||||
|
||||
hs.presence_handler = Mock()
|
||||
|
||||
return hs
|
||||
|
||||
def test_put_presence(self):
|
||||
"""
|
||||
PUT to the status endpoint with use_presence enabled will call
|
||||
set_state on the presence handler.
|
||||
"""
|
||||
self.hs.config.use_presence = True
|
||||
|
||||
body = {"presence": "here", "status_msg": "beep boop"}
|
||||
request, channel = self.make_request(
|
||||
"PUT", "/presence/%s/status" % (self.user_id,), body
|
||||
)
|
||||
self.render(request)
|
||||
|
||||
self.assertEqual(channel.code, 200)
|
||||
self.assertEqual(self.hs.presence_handler.set_state.call_count, 1)
|
||||
|
||||
def test_put_presence_disabled(self):
|
||||
"""
|
||||
PUT to the status endpoint with use_presence disbled will NOT call
|
||||
set_state on the presence handler.
|
||||
"""
|
||||
self.hs.config.use_presence = False
|
||||
|
||||
body = {"presence": "here", "status_msg": "beep boop"}
|
||||
request, channel = self.make_request(
|
||||
"PUT", "/presence/%s/status" % (self.user_id,), body
|
||||
)
|
||||
self.render(request)
|
||||
|
||||
self.assertEqual(channel.code, 200)
|
||||
self.assertEqual(self.hs.presence_handler.set_state.call_count, 0)
|
||||
@@ -13,65 +13,30 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import synapse.types
|
||||
from synapse.http.server import JsonResource
|
||||
from mock import Mock
|
||||
|
||||
from synapse.rest.client.v2_alpha import sync
|
||||
from synapse.types import UserID
|
||||
from synapse.util import Clock
|
||||
|
||||
from tests import unittest
|
||||
from tests.server import (
|
||||
ThreadedMemoryReactorClock as MemoryReactorClock,
|
||||
make_request,
|
||||
render,
|
||||
setup_test_homeserver,
|
||||
)
|
||||
|
||||
PATH_PREFIX = "/_matrix/client/v2_alpha"
|
||||
|
||||
|
||||
class FilterTestCase(unittest.TestCase):
|
||||
class FilterTestCase(unittest.HomeserverTestCase):
|
||||
|
||||
USER_ID = "@apple:test"
|
||||
TO_REGISTER = [sync]
|
||||
user_id = "@apple:test"
|
||||
servlets = [sync.register_servlets]
|
||||
|
||||
def setUp(self):
|
||||
self.clock = MemoryReactorClock()
|
||||
self.hs_clock = Clock(self.clock)
|
||||
def make_homeserver(self, reactor, clock):
|
||||
|
||||
self.hs = setup_test_homeserver(
|
||||
self.addCleanup, http_client=None, clock=self.hs_clock, reactor=self.clock
|
||||
hs = self.setup_test_homeserver(
|
||||
"red", http_client=None, federation_client=Mock()
|
||||
)
|
||||
|
||||
self.auth = self.hs.get_auth()
|
||||
|
||||
def get_user_by_access_token(token=None, allow_guest=False):
|
||||
return {
|
||||
"user": UserID.from_string(self.USER_ID),
|
||||
"token_id": 1,
|
||||
"is_guest": False,
|
||||
}
|
||||
|
||||
def get_user_by_req(request, allow_guest=False, rights="access"):
|
||||
return synapse.types.create_requester(
|
||||
UserID.from_string(self.USER_ID), 1, False, None
|
||||
)
|
||||
|
||||
self.auth.get_user_by_access_token = get_user_by_access_token
|
||||
self.auth.get_user_by_req = get_user_by_req
|
||||
|
||||
self.store = self.hs.get_datastore()
|
||||
self.filtering = self.hs.get_filtering()
|
||||
self.resource = JsonResource(self.hs)
|
||||
|
||||
for r in self.TO_REGISTER:
|
||||
r.register_servlets(self.hs, self.resource)
|
||||
return hs
|
||||
|
||||
def test_sync_argless(self):
|
||||
request, channel = make_request("GET", "/_matrix/client/r0/sync")
|
||||
render(request, self.resource, self.clock)
|
||||
request, channel = self.make_request("GET", "/sync")
|
||||
self.render(request)
|
||||
|
||||
self.assertEqual(channel.result["code"], b"200")
|
||||
self.assertEqual(channel.code, 200)
|
||||
self.assertTrue(
|
||||
set(
|
||||
[
|
||||
@@ -84,3 +49,25 @@ class FilterTestCase(unittest.TestCase):
|
||||
]
|
||||
).issubset(set(channel.json_body.keys()))
|
||||
)
|
||||
|
||||
def test_sync_presence_disabled(self):
|
||||
"""
|
||||
When presence is disabled, the key does not appear in /sync.
|
||||
"""
|
||||
self.hs.config.use_presence = False
|
||||
|
||||
request, channel = self.make_request("GET", "/sync")
|
||||
self.render(request)
|
||||
|
||||
self.assertEqual(channel.code, 200)
|
||||
self.assertTrue(
|
||||
set(
|
||||
[
|
||||
"next_batch",
|
||||
"rooms",
|
||||
"account_data",
|
||||
"to_device",
|
||||
"device_lists",
|
||||
]
|
||||
).issubset(set(channel.json_body.keys()))
|
||||
)
|
||||
|
||||
+7
-1
@@ -18,6 +18,8 @@ import logging
|
||||
|
||||
from mock import Mock
|
||||
|
||||
from canonicaljson import json
|
||||
|
||||
import twisted
|
||||
import twisted.logger
|
||||
from twisted.trial import unittest
|
||||
@@ -241,11 +243,15 @@ class HomeserverTestCase(TestCase):
|
||||
method (bytes/unicode): The HTTP request method ("verb").
|
||||
path (bytes/unicode): The HTTP path, suitably URL encoded (e.g.
|
||||
escaped UTF-8 & spaces and such).
|
||||
content (bytes): The body of the request.
|
||||
content (bytes or dict): The body of the request. JSON-encoded, if
|
||||
a dict.
|
||||
|
||||
Returns:
|
||||
A synapse.http.site.SynapseRequest.
|
||||
"""
|
||||
if isinstance(content, dict):
|
||||
content = json.dumps(content).encode('utf8')
|
||||
|
||||
return make_request(method, path, content)
|
||||
|
||||
def render(self, request):
|
||||
|
||||
+4
-3
@@ -93,7 +93,8 @@ def setupdb():
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def setup_test_homeserver(
|
||||
cleanup_func, name="test", datastore=None, config=None, reactor=None, **kargs
|
||||
cleanup_func, name="test", datastore=None, config=None, reactor=None,
|
||||
homeserverToUse=HomeServer, **kargs
|
||||
):
|
||||
"""
|
||||
Setup a homeserver suitable for running tests against. Keyword arguments
|
||||
@@ -192,7 +193,7 @@ def setup_test_homeserver(
|
||||
config.database_config["args"]["cp_openfun"] = db_engine.on_new_connection
|
||||
|
||||
if datastore is None:
|
||||
hs = HomeServer(
|
||||
hs = homeserverToUse(
|
||||
name,
|
||||
config=config,
|
||||
db_config=config.database_config,
|
||||
@@ -235,7 +236,7 @@ def setup_test_homeserver(
|
||||
|
||||
hs.setup()
|
||||
else:
|
||||
hs = HomeServer(
|
||||
hs = homeserverToUse(
|
||||
name,
|
||||
db_pool=None,
|
||||
datastore=datastore,
|
||||
|
||||
Reference in New Issue
Block a user