mirror of
				https://github.com/netbox-community/netbox.git
				synced 2024-05-10 07:54:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			117 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import base64
 | |
| 
 | |
| from django.urls import reverse
 | |
| 
 | |
| from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site
 | |
| from secrets.models import Secret, SecretRole, SessionKey, UserKey
 | |
| from utilities.testing import ViewTestCases
 | |
| from .constants import PRIVATE_KEY, PUBLIC_KEY
 | |
| 
 | |
| 
 | |
| class SecretRoleTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
 | |
|     model = SecretRole
 | |
| 
 | |
|     @classmethod
 | |
|     def setUpTestData(cls):
 | |
| 
 | |
|         SecretRole.objects.bulk_create([
 | |
|             SecretRole(name='Secret Role 1', slug='secret-role-1'),
 | |
|             SecretRole(name='Secret Role 2', slug='secret-role-2'),
 | |
|             SecretRole(name='Secret Role 3', slug='secret-role-3'),
 | |
|         ])
 | |
| 
 | |
|         cls.form_data = {
 | |
|             'name': 'Secret Role X',
 | |
|             'slug': 'secret-role-x',
 | |
|             'description': 'A secret role',
 | |
|             'users': [],
 | |
|             'groups': [],
 | |
|         }
 | |
| 
 | |
|         cls.csv_data = (
 | |
|             "name,slug",
 | |
|             "Secret Role 4,secret-role-4",
 | |
|             "Secret Role 5,secret-role-5",
 | |
|             "Secret Role 6,secret-role-6",
 | |
|         )
 | |
| 
 | |
| 
 | |
| # TODO: Change base class to PrimaryObjectViewTestCase
 | |
| class SecretTestCase(
 | |
|     ViewTestCases.GetObjectViewTestCase,
 | |
|     ViewTestCases.DeleteObjectViewTestCase,
 | |
|     ViewTestCases.ListObjectsViewTestCase,
 | |
|     ViewTestCases.BulkEditObjectsViewTestCase,
 | |
|     ViewTestCases.BulkDeleteObjectsViewTestCase
 | |
| ):
 | |
|     model = Secret
 | |
| 
 | |
|     @classmethod
 | |
|     def setUpTestData(cls):
 | |
| 
 | |
|         site = Site.objects.create(name='Site 1', slug='site-1')
 | |
|         manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
 | |
|         devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1')
 | |
|         devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
 | |
| 
 | |
|         devices = (
 | |
|             Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole),
 | |
|             Device(name='Device 2', site=site, device_type=devicetype, device_role=devicerole),
 | |
|             Device(name='Device 3', site=site, device_type=devicetype, device_role=devicerole),
 | |
|         )
 | |
|         Device.objects.bulk_create(devices)
 | |
| 
 | |
|         secretroles = (
 | |
|             SecretRole(name='Secret Role 1', slug='secret-role-1'),
 | |
|             SecretRole(name='Secret Role 2', slug='secret-role-2'),
 | |
|         )
 | |
|         SecretRole.objects.bulk_create(secretroles)
 | |
| 
 | |
|         # Create one secret per device to allow bulk-editing of names (which must be unique per device/role)
 | |
|         Secret.objects.bulk_create((
 | |
|             Secret(device=devices[0], role=secretroles[0], name='Secret 1', ciphertext=b'1234567890'),
 | |
|             Secret(device=devices[1], role=secretroles[0], name='Secret 2', ciphertext=b'1234567890'),
 | |
|             Secret(device=devices[2], role=secretroles[0], name='Secret 3', ciphertext=b'1234567890'),
 | |
|         ))
 | |
| 
 | |
|         cls.form_data = {
 | |
|             'device': devices[1].pk,
 | |
|             'role': secretroles[1].pk,
 | |
|             'name': 'Secret X',
 | |
|         }
 | |
| 
 | |
|         cls.bulk_edit_data = {
 | |
|             'role': secretroles[1].pk,
 | |
|             'name': 'New name',
 | |
|         }
 | |
| 
 | |
|     def setUp(self):
 | |
| 
 | |
|         super().setUp()
 | |
| 
 | |
|         # Set up a master key for the test user
 | |
|         userkey = UserKey(user=self.user, public_key=PUBLIC_KEY)
 | |
|         userkey.save()
 | |
|         master_key = userkey.get_master_key(PRIVATE_KEY)
 | |
|         self.session_key = SessionKey(userkey=userkey)
 | |
|         self.session_key.save(master_key)
 | |
| 
 | |
|     def test_import_objects(self):
 | |
|         self.add_permissions('secrets.add_secret')
 | |
| 
 | |
|         csv_data = (
 | |
|             "device,role,name,plaintext",
 | |
|             "Device 1,Secret Role 1,Secret 4,abcdefghij",
 | |
|             "Device 1,Secret Role 1,Secret 5,abcdefghij",
 | |
|             "Device 1,Secret Role 1,Secret 6,abcdefghij",
 | |
|         )
 | |
| 
 | |
|         # Set the session_key cookie on the request
 | |
|         session_key = base64.b64encode(self.session_key.key).decode('utf-8')
 | |
|         self.client.cookies['session_key'] = session_key
 | |
| 
 | |
|         response = self.client.post(reverse('secrets:secret_import'), {'csv': '\n'.join(csv_data)})
 | |
| 
 | |
|         self.assertHttpStatus(response, 200)
 | |
|         self.assertEqual(Secret.objects.count(), 6)
 |