test_register.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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
  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, None)
  21. self.auth_handler = Mock(
  22. check_auth=Mock(side_effect=lambda x, y, z: self.auth_result),
  23. get_session_data=Mock(return_value=None)
  24. )
  25. self.registration_handler = Mock()
  26. self.identity_handler = Mock()
  27. self.login_handler = Mock()
  28. # do the dance to hook it up to the hs global
  29. self.handlers = Mock(
  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.get_auth_handler = Mock(return_value=self.auth_handler)
  39. self.hs.config.enable_registration = True
  40. # init the thing we're testing
  41. self.servlet = RegisterRestServlet(self.hs)
  42. @defer.inlineCallbacks
  43. def test_POST_appservice_registration_valid(self):
  44. user_id = "@kermit:muppet"
  45. token = "kermits_access_token"
  46. self.request.args = {
  47. "access_token": "i_am_an_app_service"
  48. }
  49. self.request_data = json.dumps({
  50. "username": "kermit"
  51. })
  52. self.appservice = {
  53. "id": "1234"
  54. }
  55. self.registration_handler.appservice_register = Mock(
  56. return_value=(user_id, token)
  57. )
  58. (code, result) = yield self.servlet.on_POST(self.request)
  59. self.assertEquals(code, 200)
  60. det_data = {
  61. "user_id": user_id,
  62. "access_token": token,
  63. "home_server": self.hs.hostname
  64. }
  65. self.assertDictContainsSubset(det_data, result)
  66. self.assertIn("refresh_token", result)
  67. @defer.inlineCallbacks
  68. def test_POST_appservice_registration_invalid(self):
  69. self.request.args = {
  70. "access_token": "i_am_an_app_service"
  71. }
  72. self.request_data = json.dumps({
  73. "username": "kermit"
  74. })
  75. self.appservice = None # no application service exists
  76. result = yield self.servlet.on_POST(self.request)
  77. self.assertEquals(result, (401, None))
  78. def test_POST_bad_password(self):
  79. self.request_data = json.dumps({
  80. "username": "kermit",
  81. "password": 666
  82. })
  83. d = self.servlet.on_POST(self.request)
  84. return self.assertFailure(d, SynapseError)
  85. def test_POST_bad_username(self):
  86. self.request_data = json.dumps({
  87. "username": 777,
  88. "password": "monkey"
  89. })
  90. d = self.servlet.on_POST(self.request)
  91. return self.assertFailure(d, SynapseError)
  92. @defer.inlineCallbacks
  93. def test_POST_user_valid(self):
  94. user_id = "@kermit:muppet"
  95. token = "kermits_access_token"
  96. self.request_data = json.dumps({
  97. "username": "kermit",
  98. "password": "monkey"
  99. })
  100. self.registration_handler.check_username = Mock(return_value=True)
  101. self.auth_result = (True, None, {
  102. "username": "kermit",
  103. "password": "monkey"
  104. }, None)
  105. self.registration_handler.register = Mock(return_value=(user_id, token))
  106. (code, result) = yield self.servlet.on_POST(self.request)
  107. self.assertEquals(code, 200)
  108. det_data = {
  109. "user_id": user_id,
  110. "access_token": token,
  111. "home_server": self.hs.hostname
  112. }
  113. self.assertDictContainsSubset(det_data, result)
  114. self.assertIn("refresh_token", result)
  115. def test_POST_disabled_registration(self):
  116. self.hs.config.enable_registration = False
  117. self.request_data = json.dumps({
  118. "username": "kermit",
  119. "password": "monkey"
  120. })
  121. self.registration_handler.check_username = Mock(return_value=True)
  122. self.auth_result = (True, None, {
  123. "username": "kermit",
  124. "password": "monkey"
  125. }, None)
  126. self.registration_handler.register = Mock(return_value=("@user:id", "t"))
  127. d = self.servlet.on_POST(self.request)
  128. return self.assertFailure(d, SynapseError)