test_client_reader_shard.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. # -*- coding: utf-8 -*-
  2. # Copyright 2020 The Matrix.org Foundation C.I.C.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. import logging
  16. from synapse.rest.client.v2_alpha import register
  17. from tests.replication._base import BaseMultiWorkerStreamTestCase
  18. from tests.server import make_request
  19. logger = logging.getLogger(__name__)
  20. class ClientReaderTestCase(BaseMultiWorkerStreamTestCase):
  21. """Test using one or more client readers for registration."""
  22. servlets = [register.register_servlets]
  23. def _get_worker_hs_config(self) -> dict:
  24. config = self.default_config()
  25. config["worker_app"] = "synapse.app.client_reader"
  26. config["worker_replication_host"] = "testserv"
  27. config["worker_replication_http_port"] = "8765"
  28. return config
  29. def test_register_single_worker(self):
  30. """Test that registration works when using a single client reader worker."""
  31. worker_hs = self.make_worker_hs("synapse.app.client_reader")
  32. site = self._hs_to_site[worker_hs]
  33. channel_1 = make_request(
  34. self.reactor,
  35. site,
  36. "POST",
  37. "register",
  38. {"username": "user", "type": "m.login.password", "password": "bar"},
  39. )
  40. self.assertEqual(channel_1.code, 401)
  41. # Grab the session
  42. session = channel_1.json_body["session"]
  43. # also complete the dummy auth
  44. channel_2 = make_request(
  45. self.reactor,
  46. site,
  47. "POST",
  48. "register",
  49. {"auth": {"session": session, "type": "m.login.dummy"}},
  50. )
  51. self.assertEqual(channel_2.code, 200)
  52. # We're given a registered user.
  53. self.assertEqual(channel_2.json_body["user_id"], "@user:test")
  54. def test_register_multi_worker(self):
  55. """Test that registration works when using multiple client reader workers."""
  56. worker_hs_1 = self.make_worker_hs("synapse.app.client_reader")
  57. worker_hs_2 = self.make_worker_hs("synapse.app.client_reader")
  58. site_1 = self._hs_to_site[worker_hs_1]
  59. channel_1 = make_request(
  60. self.reactor,
  61. site_1,
  62. "POST",
  63. "register",
  64. {"username": "user", "type": "m.login.password", "password": "bar"},
  65. )
  66. self.assertEqual(channel_1.code, 401)
  67. # Grab the session
  68. session = channel_1.json_body["session"]
  69. # also complete the dummy auth
  70. site_2 = self._hs_to_site[worker_hs_2]
  71. channel_2 = make_request(
  72. self.reactor,
  73. site_2,
  74. "POST",
  75. "register",
  76. {"auth": {"session": session, "type": "m.login.dummy"}},
  77. )
  78. self.assertEqual(channel_2.code, 200)
  79. # We're given a registered user.
  80. self.assertEqual(channel_2.json_body["user_id"], "@user:test")