test_views.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import base64
  2. import urllib.parse
  3. from django.urls import reverse
  4. from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site
  5. from secrets.models import Secret, SecretRole, SessionKey, UserKey
  6. from utilities.testing import TestCase
  7. from .constants import PRIVATE_KEY, PUBLIC_KEY
  8. class SecretRoleTestCase(TestCase):
  9. user_permissions = (
  10. 'secrets.view_secretrole',
  11. )
  12. @classmethod
  13. def setUpTestData(cls):
  14. SecretRole.objects.bulk_create([
  15. SecretRole(name='Secret Role 1', slug='secret-role-1'),
  16. SecretRole(name='Secret Role 2', slug='secret-role-2'),
  17. SecretRole(name='Secret Role 3', slug='secret-role-3'),
  18. ])
  19. def test_secretrole_list(self):
  20. url = reverse('secrets:secretrole_list')
  21. response = self.client.get(url, follow=True)
  22. self.assertEqual(response.status_code, 200)
  23. def test_secretrole_import(self):
  24. self.add_permissions('secrets.add_secretrole')
  25. csv_data = (
  26. "name,slug",
  27. "Secret Role 4,secret-role-4",
  28. "Secret Role 5,secret-role-5",
  29. "Secret Role 6,secret-role-6",
  30. )
  31. response = self.client.post(reverse('secrets:secretrole_import'), {'csv': '\n'.join(csv_data)})
  32. self.assertEqual(response.status_code, 200)
  33. self.assertEqual(SecretRole.objects.count(), 6)
  34. class SecretTestCase(TestCase):
  35. user_permissions = (
  36. 'secrets.view_secret',
  37. )
  38. @classmethod
  39. def setUpTestData(cls):
  40. site = Site(name='Site 1', slug='site-1')
  41. site.save()
  42. manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
  43. manufacturer.save()
  44. devicetype = DeviceType(manufacturer=manufacturer, model='Device Type 1')
  45. devicetype.save()
  46. devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
  47. devicerole.save()
  48. device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
  49. device.save()
  50. secretrole = SecretRole(name='Secret Role 1', slug='secret-role-1')
  51. secretrole.save()
  52. Secret.objects.bulk_create([
  53. Secret(device=device, role=secretrole, name='Secret 1', ciphertext=b'1234567890'),
  54. Secret(device=device, role=secretrole, name='Secret 2', ciphertext=b'1234567890'),
  55. Secret(device=device, role=secretrole, name='Secret 3', ciphertext=b'1234567890'),
  56. ])
  57. def setUp(self):
  58. super().setUp()
  59. # Set up a master key for the test user
  60. userkey = UserKey(user=self.user, public_key=PUBLIC_KEY)
  61. userkey.save()
  62. master_key = userkey.get_master_key(PRIVATE_KEY)
  63. self.session_key = SessionKey(userkey=userkey)
  64. self.session_key.save(master_key)
  65. def test_secret_list(self):
  66. url = reverse('secrets:secret_list')
  67. params = {
  68. "role": SecretRole.objects.first().slug,
  69. }
  70. response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params)), follow=True)
  71. self.assertEqual(response.status_code, 200)
  72. def test_secret(self):
  73. secret = Secret.objects.first()
  74. response = self.client.get(secret.get_absolute_url(), follow=True)
  75. self.assertEqual(response.status_code, 200)
  76. def test_secret_import(self):
  77. self.add_permissions('secrets.add_secret')
  78. csv_data = (
  79. "device,role,name,plaintext",
  80. "Device 1,Secret Role 1,Secret 4,abcdefghij",
  81. "Device 1,Secret Role 1,Secret 5,abcdefghij",
  82. "Device 1,Secret Role 1,Secret 6,abcdefghij",
  83. )
  84. # Set the session_key cookie on the request
  85. session_key = base64.b64encode(self.session_key.key).decode('utf-8')
  86. self.client.cookies['session_key'] = session_key
  87. response = self.client.post(reverse('secrets:secret_import'), {'csv': '\n'.join(csv_data)})
  88. self.assertEqual(response.status_code, 200)
  89. self.assertEqual(Secret.objects.count(), 6)