test_keys.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import tempfile
  2. import os.path
  3. import unittest
  4. import json
  5. from wheel.signatures import keys
  6. wheel_json = """
  7. {
  8. "verifiers": [
  9. {
  10. "scope": "+",
  11. "vk": "bp-bjK2fFgtA-8DhKKAAPm9-eAZcX_u03oBv2RlKOBc"
  12. },
  13. {
  14. "scope": "+",
  15. "vk": "KAHZBfyqFW3OcFDbLSG4nPCjXxUPy72phP9I4Rn9MAo"
  16. },
  17. {
  18. "scope": "+",
  19. "vk": "tmAYCrSfj8gtJ10v3VkvW7jOndKmQIYE12hgnFu3cvk"
  20. }
  21. ],
  22. "signers": [
  23. {
  24. "scope": "+",
  25. "vk": "tmAYCrSfj8gtJ10v3VkvW7jOndKmQIYE12hgnFu3cvk"
  26. },
  27. {
  28. "scope": "+",
  29. "vk": "KAHZBfyqFW3OcFDbLSG4nPCjXxUPy72phP9I4Rn9MAo"
  30. }
  31. ],
  32. "schema": 1
  33. }
  34. """
  35. class TestWheelKeys(unittest.TestCase):
  36. def setUp(self):
  37. self.config = tempfile.NamedTemporaryFile(suffix='.json')
  38. self.config.close()
  39. self.config_path, self.config_filename = os.path.split(self.config.name)
  40. def load(*args):
  41. return [self.config_path]
  42. def save(*args):
  43. return self.config_path
  44. keys.load_config_paths = load
  45. keys.save_config_path = save
  46. self.wk = keys.WheelKeys()
  47. self.wk.CONFIG_NAME = self.config_filename
  48. def tearDown(self):
  49. os.unlink(self.config.name)
  50. def test_load_save(self):
  51. self.wk.data = json.loads(wheel_json)
  52. self.wk.add_signer('+', '67890')
  53. self.wk.add_signer('scope', 'abcdefg')
  54. self.wk.trust('epocs', 'gfedcba')
  55. self.wk.trust('+', '12345')
  56. self.wk.save()
  57. del self.wk.data
  58. self.wk.load()
  59. signers = self.wk.signers('scope')
  60. self.assertTrue(signers[0] == ('scope', 'abcdefg'), self.wk.data['signers'])
  61. self.assertTrue(signers[1][0] == '+', self.wk.data['signers'])
  62. trusted = self.wk.trusted('epocs')
  63. self.assertTrue(trusted[0] == ('epocs', 'gfedcba'))
  64. self.assertTrue(trusted[1][0] == '+')
  65. self.wk.untrust('epocs', 'gfedcba')
  66. trusted = self.wk.trusted('epocs')
  67. self.assertTrue(('epocs', 'gfedcba') not in trusted)
  68. def test_load_save_incomplete(self):
  69. self.wk.data = json.loads(wheel_json)
  70. del self.wk.data['signers']
  71. self.wk.data['schema'] = self.wk.SCHEMA+1
  72. self.wk.save()
  73. try:
  74. self.wk.load()
  75. except ValueError:
  76. pass
  77. else:
  78. raise Exception("Expected ValueError")
  79. del self.wk.data['schema']
  80. self.wk.save()
  81. self.wk.load()