test_secrets.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. # Copyright 2023 Cloudbase Solutions Srl
  2. # All Rights Reserved.
  3. import json
  4. from unittest import mock
  5. from barbicanclient import client as barbican_client
  6. import keystoneauth1
  7. from coriolis import keystone
  8. from coriolis import secrets
  9. from coriolis.tests import test_base
  10. class SecretsTestCase(test_base.CoriolisBaseTestCase):
  11. """Test suite for the Coriolis secrets module."""
  12. @mock.patch.object(keystone, 'create_keystone_session')
  13. @mock.patch.object(barbican_client, 'Client')
  14. def test_get_barbican_secret_payload(self, mock_client, mock_session):
  15. mock_session.return_value = mock.sentinel.session
  16. mock_secret = mock.MagicMock()
  17. mock_secret.payload = mock.sentinel.payload
  18. mock_barbican = mock.MagicMock()
  19. mock_barbican.secrets.get.return_value = mock_secret
  20. mock_client.return_value = mock_barbican
  21. result = secrets._get_barbican_secret_payload(
  22. mock.sentinel.ctxt, mock.sentinel.secret_ref)
  23. self.assertEqual(mock.sentinel.payload, result)
  24. mock_session.assert_called_once_with(mock.sentinel.ctxt)
  25. mock_client.assert_called_once_with(session=mock.sentinel.session)
  26. mock_barbican.secrets.get.assert_called_once_with(
  27. mock.sentinel.secret_ref)
  28. @mock.patch.object(secrets, '_get_barbican_secret_payload')
  29. def test_get_secret_success(self, mock_get_payload):
  30. mock_get_payload.return_value = json.dumps({'key': 'value'})
  31. result = secrets.get_secret(mock.sentinel.ctxt,
  32. mock.sentinel.secret_ref)
  33. self.assertEqual({'key': 'value'}, result)
  34. mock_get_payload.assert_called_once_with(
  35. mock.sentinel.ctxt, mock.sentinel.secret_ref)
  36. @mock.patch.object(secrets, '_get_barbican_secret_payload')
  37. def test_get_secret_unauthorized(self, mock_get_payload):
  38. mock_ctxt = mock.MagicMock()
  39. mock_get_payload.side_effect = [
  40. keystoneauth1.exceptions.http.Unauthorized,
  41. json.dumps({'key': 'value'})]
  42. with mock.patch('copy.deepcopy', side_effect=lambda func: func):
  43. result = secrets.get_secret(mock_ctxt, mock.sentinel.secret_ref)
  44. self.assertEqual({'key': 'value'}, result)
  45. self.assertEqual(2, mock_get_payload.call_count)
  46. self.assertEqual(mock_ctxt.trust_id, None)
  47. mock_get_payload.assert_called_with(
  48. mock_ctxt, mock.sentinel.secret_ref)
  49. @mock.patch.object(secrets, '_get_barbican_secret_payload')
  50. def test_get_secret_raises_value_error(self, mock_get_payload):
  51. mock_get_payload.side_effect = ValueError("Test exception")
  52. self.assertRaises(ValueError, secrets.get_secret, mock.sentinel.ctxt,
  53. mock.sentinel.secret_ref)
  54. mock_get_payload.assert_called_once_with(
  55. mock.sentinel.ctxt, mock.sentinel.secret_ref)