test_register.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. from synapse.rest.client.v2_alpha.register import RegisterRestServlet
  2. from synapse.api.errors import SynapseError
  3. from twisted.internet import defer
  4. from mock import Mock, MagicMock
  5. from tests import unittest
  6. import json
  7. class RegisterRestServletTestCase(unittest.TestCase):
  8. def setUp(self):
  9. # do the dance to hook up request data to self.request_data
  10. self.request_data = ""
  11. self.request = Mock(
  12. content=Mock(read=Mock(side_effect=lambda: self.request_data)),
  13. path='/_matrix/api/v2_alpha/register'
  14. )
  15. self.request.args = {}
  16. self.appservice = None
  17. self.auth = Mock(get_appservice_by_req=Mock(
  18. side_effect=lambda x: defer.succeed(self.appservice))
  19. )
  20. self.auth_result = (False, None, None)
  21. self.auth_handler = Mock(
  22. check_auth=Mock(side_effect=lambda x,y,z: self.auth_result)
  23. )
  24. self.registration_handler = Mock()
  25. self.identity_handler = Mock()
  26. self.login_handler = Mock()
  27. # do the dance to hook it up to the hs global
  28. self.handlers = Mock(
  29. auth_handler=self.auth_handler,
  30. registration_handler=self.registration_handler,
  31. identity_handler=self.identity_handler,
  32. login_handler=self.login_handler
  33. )
  34. self.hs = Mock()
  35. self.hs.hostname = "superbig~testing~thing.com"
  36. self.hs.get_auth = Mock(return_value=self.auth)
  37. self.hs.get_handlers = Mock(return_value=self.handlers)
  38. self.hs.config.disable_registration = False
  39. # init the thing we're testing
  40. self.servlet = RegisterRestServlet(self.hs)
  41. @defer.inlineCallbacks
  42. def test_POST_appservice_registration_valid(self):
  43. user_id = "@kermit:muppet"
  44. token = "kermits_access_token"
  45. self.request.args = {
  46. "access_token": "i_am_an_app_service"
  47. }
  48. self.request_data = json.dumps({
  49. "username": "kermit"
  50. })
  51. self.appservice = {
  52. "id": "1234"
  53. }
  54. self.registration_handler.appservice_register = Mock(
  55. return_value=(user_id, token)
  56. )
  57. result = yield self.servlet.on_POST(self.request)
  58. self.assertEquals(result, (200, {
  59. "user_id": user_id,
  60. "access_token": token,
  61. "home_server": self.hs.hostname
  62. }))
  63. @defer.inlineCallbacks
  64. def test_POST_appservice_registration_invalid(self):
  65. self.request.args = {
  66. "access_token": "i_am_an_app_service"
  67. }
  68. self.request_data = json.dumps({
  69. "username": "kermit"
  70. })
  71. self.appservice = None # no application service exists
  72. result = yield self.servlet.on_POST(self.request)
  73. self.assertEquals(result, (401, None))
  74. def test_POST_bad_password(self):
  75. self.request_data = json.dumps({
  76. "username": "kermit",
  77. "password": 666
  78. })
  79. d = self.servlet.on_POST(self.request)
  80. return self.assertFailure(d, SynapseError)
  81. def test_POST_bad_username(self):
  82. self.request_data = json.dumps({
  83. "username": 777,
  84. "password": "monkey"
  85. })
  86. d = self.servlet.on_POST(self.request)
  87. return self.assertFailure(d, SynapseError)
  88. @defer.inlineCallbacks
  89. def test_POST_user_valid(self):
  90. user_id = "@kermit:muppet"
  91. token = "kermits_access_token"
  92. self.request_data = json.dumps({
  93. "username": "kermit",
  94. "password": "monkey"
  95. })
  96. self.registration_handler.check_username = Mock(return_value=True)
  97. self.auth_result = (True, None, {
  98. "username": "kermit",
  99. "password": "monkey"
  100. })
  101. self.registration_handler.register = Mock(return_value=(user_id, token))
  102. result = yield self.servlet.on_POST(self.request)
  103. self.assertEquals(result, (200, {
  104. "user_id": user_id,
  105. "access_token": token,
  106. "home_server": self.hs.hostname
  107. }))
  108. def test_POST_disabled_registration(self):
  109. self.hs.config.disable_registration = True
  110. self.request_data = json.dumps({
  111. "username": "kermit",
  112. "password": "monkey"
  113. })
  114. self.registration_handler.check_username = Mock(return_value=True)
  115. self.auth_result = (True, None, {
  116. "username": "kermit",
  117. "password": "monkey"
  118. })
  119. self.registration_handler.register = Mock(return_value=("@user:id", "t"))
  120. d = self.servlet.on_POST(self.request)
  121. return self.assertFailure(d, SynapseError)