summary refs log tree commit diff
diff options
context:
space:
mode:
authorPatrick Cloke <clokep@users.noreply.github.com>2020-12-22 13:00:14 -0500
committerGitHub <noreply@github.com>2020-12-22 13:00:14 -0500
commita8026064755362fe3e5dc00f537606d340ce242a (patch)
tree6b5d28926d2571069675537a90d6f67c67bf0c06
parentRefactor the CAS handler in prep for using the abstracted SSO code. (#8958) (diff)
downloadsynapse-a8026064755362fe3e5dc00f537606d340ce242a.tar.xz
Support PyJWT v2.0.0. (#8986)
Tests were broken due to an API changing. The code used in Synapse
proper should be compatible with both versions already.
-rw-r--r--changelog.d/8986.misc1
-rw-r--r--tests/rest/client/v1/test_login.py16
2 files changed, 13 insertions, 4 deletions
diff --git a/changelog.d/8986.misc b/changelog.d/8986.misc
new file mode 100644
index 0000000000..6aefc78784
--- /dev/null
+++ b/changelog.d/8986.misc
@@ -0,0 +1 @@
+Support using PyJWT v2.0.0 in the test suite.
diff --git a/tests/rest/client/v1/test_login.py b/tests/rest/client/v1/test_login.py
index 566776e97e..18932d7518 100644
--- a/tests/rest/client/v1/test_login.py
+++ b/tests/rest/client/v1/test_login.py
@@ -475,8 +475,12 @@ class JWTTestCase(unittest.HomeserverTestCase):
         self.hs.config.jwt_algorithm = self.jwt_algorithm
         return self.hs
 
-    def jwt_encode(self, token, secret=jwt_secret):
-        return jwt.encode(token, secret, self.jwt_algorithm).decode("ascii")
+    def jwt_encode(self, token: str, secret: str = jwt_secret) -> str:
+        # PyJWT 2.0.0 changed the return type of jwt.encode from bytes to str.
+        result = jwt.encode(token, secret, self.jwt_algorithm)
+        if isinstance(result, bytes):
+            return result.decode("ascii")
+        return result
 
     def jwt_login(self, *args):
         params = json.dumps(
@@ -680,8 +684,12 @@ class JWTPubKeyTestCase(unittest.HomeserverTestCase):
         self.hs.config.jwt_algorithm = "RS256"
         return self.hs
 
-    def jwt_encode(self, token, secret=jwt_privatekey):
-        return jwt.encode(token, secret, "RS256").decode("ascii")
+    def jwt_encode(self, token: str, secret: str = jwt_privatekey) -> str:
+        # PyJWT 2.0.0 changed the return type of jwt.encode from bytes to str.
+        result = jwt.encode(token, secret, "RS256")
+        if isinstance(result, bytes):
+            return result.decode("ascii")
+        return result
 
     def jwt_login(self, *args):
         params = json.dumps(