|
1 | 1 | import io |
2 | 2 | import json |
3 | 3 | import os |
4 | | -from io import StringIO |
5 | | -from unittest import mock |
6 | 4 |
|
7 | 5 | import pytest |
8 | 6 | from cryptography.exceptions import InvalidSignature |
|
13 | 11 | from jwt_rsa.cli import parser |
14 | 12 | from jwt_rsa.key_tester import main as verify |
15 | 13 | from jwt_rsa.keygen import main as keygen |
16 | | -from jwt_rsa.rsa import ( |
17 | | - generate_rsa, load_private_key, load_public_key, rsa_to_jwk, |
18 | | -) |
| 14 | +from jwt_rsa.rsa import load_private_key, load_public_key |
19 | 15 |
|
20 | 16 |
|
21 | 17 | def test_rsa_keygen(capsys): |
22 | | - with mock.patch("sys.argv", ["jwt-rsa", "keygen", "--raw", "-o", "jwk"]): |
23 | | - keygen(parser.parse_args()) |
| 18 | + keygen(parser.parse_args(["keygen", "--raw", "-o", "jwk"])) |
24 | 19 |
|
25 | 20 | stdout, stderr = capsys.readouterr() |
26 | 21 |
|
@@ -57,8 +52,7 @@ def test_rsa_keygen(capsys): |
57 | 52 |
|
58 | 53 |
|
59 | 54 | def test_pem_format(capsys): |
60 | | - with mock.patch("sys.argv", ["jwt-rsa", "keygen", "-o", "pem"]): |
61 | | - keygen(parser.parse_args()) |
| 55 | + keygen(parser.parse_args(["keygen", "-o", "pem"])) |
62 | 56 |
|
63 | 57 | stdout, stderr = capsys.readouterr() |
64 | 58 |
|
@@ -160,29 +154,27 @@ def test_keygen_public_key_auto_naming(capsys, tmp_path): |
160 | 154 | assert private_content != private_path.read_text() |
161 | 155 |
|
162 | 156 |
|
163 | | -@pytest.mark.skip(reason="TODO") |
164 | | -def test_rsa_verify(capsys): |
165 | | - with mock.patch("sys.argv", ["jwt-rsa", "keygen"]): |
166 | | - keygen(parser.parse_args()) |
| 157 | +@pytest.mark.parametrize("fmt", ["jwk", "pem", "base64"]) |
| 158 | +def test_rsa_verify(fmt, capsys, tmp_path): |
| 159 | + private_path = tmp_path / "private" |
| 160 | + public_path = tmp_path / "public" |
167 | 161 |
|
| 162 | + keygen(parser.parse_args(["keygen", "-o", fmt, "-K", str(private_path), "-k", str(public_path)])) |
| 163 | + verify(parser.parse_args(["testkey", "-K", str(private_path), "-k", str(public_path)])) |
168 | 164 | stdout, stderr = capsys.readouterr() |
| 165 | + assert "Signing OK" in stderr |
| 166 | + assert "Verifying OK" in stderr |
169 | 167 |
|
170 | | - with mock.patch("sys.stdin", StringIO(stdout)): |
171 | | - verify(parser.parse_args()) |
172 | 168 |
|
173 | | - |
174 | | -@pytest.mark.skip(reason="TODO") |
175 | | -def test_rsa_verify_bad_key(): |
176 | | - private1, public1 = generate_rsa() |
177 | | - private2, public2 = generate_rsa() |
178 | | - |
179 | | - data = json.dumps( |
180 | | - { |
181 | | - "private_jwk": rsa_to_jwk(private1), |
182 | | - "public_jwk": rsa_to_jwk(public2), |
183 | | - }, indent=" ", sort_keys=True, |
| 169 | +@pytest.mark.parametrize("fmt", ["jwk", "pem", "base64"]) |
| 170 | +def test_rsa_verify_bad_key(fmt, capsys, tmp_path): |
| 171 | + keys = ( |
| 172 | + (tmp_path / "private1", tmp_path / "public1"), |
| 173 | + (tmp_path / "private2", tmp_path / "public2"), |
184 | 174 | ) |
185 | 175 |
|
186 | | - with mock.patch("sys.stdin", StringIO(data)): |
187 | | - with pytest.raises(InvalidSignature): |
188 | | - verify(parser.parse_args()) |
| 176 | + for private_path, public_path in keys: |
| 177 | + keygen(parser.parse_args(["keygen", "-o", fmt, "-K", str(private_path), "-k", str(public_path)])) |
| 178 | + |
| 179 | + with pytest.raises(InvalidSignature): |
| 180 | + verify(parser.parse_args(["testkey", "-K", str(keys[0][0]), "-k", str(keys[1][1])])) |
0 commit comments