Coverage for tests/admin/tests_signing_keys.py: 100%
73 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-28 22:05 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-28 22:05 +0000
1from unittest.mock import Mock, patch
2from tests.admin.tests_models import TestModelServiceEndpoints
3from canonicalwebteam.exceptions import StoreApiResponseErrorList
6class TestGetSigningKeys(TestModelServiceEndpoints):
7 @patch(
8 "canonicalwebteam.store_api.publishergw."
9 "PublisherGW.get_store_signing_keys"
10 )
11 def test_get_signing_keys(self, mock_get_store_signing_keys):
12 mock_get_store_signing_keys.return_value = [
13 {"sha3-384": "key1"},
14 {"sha3-384": "key2"},
15 ]
17 response = self.client.get("/api/store/1/signing-keys")
18 data = response.json
20 self.assertEqual(response.status_code, 200)
21 self.assertTrue(data["success"])
22 self.assertEqual(
23 data["data"],
24 [{"sha3-384": "key1"}, {"sha3-384": "key2"}],
25 )
27 @patch(
28 "canonicalwebteam.store_api.publishergw."
29 "PublisherGW.get_store_signing_keys"
30 )
31 def test_failed_get_signing_keys(self, mock_get_store_signing_keys):
32 mock_get_store_signing_keys.side_effect = StoreApiResponseErrorList(
33 "error", 502, [{"message": "An error occurred"}]
34 )
36 response = self.client.get("/api/store/1/signing-keys")
37 data = response.json
39 self.assertEqual(response.status_code, 500)
40 self.assertFalse(data["success"])
41 self.assertEqual(data["message"], "An error occurred")
44class TestCreateSigningKeys(TestModelServiceEndpoints):
45 @patch(
46 "canonicalwebteam.store_api.publishergw."
47 "PublisherGW.create_store_signing_key"
48 )
49 def test_create_signing_key(self, mock_create_store_signing_key):
50 mock_create_store_signing_key.return_value = None
52 payload = {"name": "test_signing_key"}
53 response = self.client.post(
54 "/api/store/1/signing-keys",
55 data=payload,
56 )
57 self.assertEqual(response.status_code, 200)
58 data = response.json
59 self.assertTrue(data["success"])
61 def test_name_too_long_create_signing_key(self):
62 payload = {"name": "random name" * 12}
63 response = self.client.post("/api/store/1/signing-keys", data=payload)
64 data = response.json
66 self.assertEqual(response.status_code, 500)
67 self.assertFalse(data["success"])
68 self.assertEqual(
69 data["message"],
70 "Invalid signing key. Limit 128 characters",
71 )
73 @patch(
74 "canonicalwebteam.store_api.publishergw."
75 "PublisherGW.create_store_signing_key"
76 )
77 def test_exception_in_create_signing_key(
78 self,
79 mock_create_store_signing_key,
80 ):
81 mock_create_store_signing_key.side_effect = StoreApiResponseErrorList(
82 "An error occurred", 500, [{"message": "An error occurred"}]
83 )
85 payload = {"name": "test_signing_key"}
86 response = self.client.post(
87 "/api/store/1/signing-keys",
88 data=payload,
89 )
90 data = response.json
92 self.assertEqual(response.status_code, 500)
93 self.assertFalse(data["success"])
94 self.assertEqual(data["message"], "An error occurred")
97class TestDeleteSigningKeys(TestModelServiceEndpoints):
98 @patch(
99 "canonicalwebteam.store_api.publishergw."
100 "PublisherGW.delete_store_signing_key"
101 )
102 def test_successful_delete_signing_key(
103 self,
104 mock_delete_store_signing_key,
105 ):
106 mock_delete_store_signing_key.return_value = Mock(status_code=204)
108 response = self.client.delete(
109 "/api/store/1/signing-keys/signing_key_sha3_384"
110 )
111 data = response.json
113 self.assertEqual(response.status_code, 200)
114 self.assertTrue(data["success"])
116 @patch(
117 "canonicalwebteam.store_api.publishergw."
118 "PublisherGW.delete_store_signing_key"
119 )
120 @patch(
121 "canonicalwebteam.store_api.publishergw."
122 "PublisherGW.get_store_models"
123 )
124 @patch(
125 "canonicalwebteam.store_api.publishergw."
126 "PublisherGW.get_store_model_policies"
127 )
128 def test_signing_key_in_use(
129 self, mock_get_policies, mock_get_models, mock_delete_store_signing_key
130 ):
131 mock_delete_store_signing_key.side_effect = StoreApiResponseErrorList(
132 "Signing key is in use",
133 409,
134 [{"message": "key used to sign at least one serial policy"}],
135 )
136 mock_get_models.return_value = [{"name": "Model1"}]
137 mock_get_policies.return_value = [
138 {"revision": "1", "signing-key-sha3-384": "valid_key"}
139 ]
141 response = self.client.delete("/api/store/1/signing-keys/valid_key")
142 data = response.json
144 self.assertEqual(response.status_code, 500)
145 self.assertEqual(
146 data["message"],
147 "Signing key is used in at least one policy",
148 )
149 self.assertEqual(
150 data["data"]["models"],
151 [{"name": "Model1", "policies": [{"revision": "1"}]}],
152 )
154 @patch(
155 "canonicalwebteam.store_api.publishergw."
156 "PublisherGW.delete_store_signing_key"
157 )
158 def test_signing_key_not_found(self, mock_delete_store_signing_key):
159 mock_delete_store_signing_key.return_value = Mock(status_code=404)
161 response = self.client.delete("/api/store/1/signing-keys/invalid_key")
162 data = response.json
164 self.assertEqual(response.status_code, 404)
165 self.assertFalse(data["success"])
166 self.assertEqual(data["message"], "Signing key not found")