test_default_network.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. """
  2. Provider-agnostic unit tests for ``BaseNetworkService.get_or_create_default``.
  3. AWS and GCP override this method, and the mock provider used in CI is
  4. AWS-backed, so the base implementation - the one Azure and OpenStack actually
  5. inherit - is never executed by the networking service suite. It is exercised
  6. here directly against in-memory fakes.
  7. """
  8. import unittest
  9. from unittest import mock
  10. from cloudbridge.base.resources import BaseNetwork
  11. from cloudbridge.base.services import BaseNetworkService
  12. class _NetworkRecorder:
  13. """Stands in for provider.networking.networks."""
  14. def __init__(self, existing=None):
  15. self.existing = existing or []
  16. self.created = []
  17. self.find_labels = []
  18. def find(self, label=None, **kwargs):
  19. self.find_labels.append(label)
  20. return list(self.existing)
  21. def create(self, label, cidr_block, **kwargs):
  22. self.created.append((label, cidr_block))
  23. return ("network", label, cidr_block)
  24. class _FakeProvider:
  25. def __init__(self, networks):
  26. self.middleware = mock.Mock()
  27. self.networking = mock.Mock(networks=networks)
  28. class DefaultNetworkTestCase(unittest.TestCase):
  29. def test_creates_default_network_with_the_default_cidr(self):
  30. networks = _NetworkRecorder()
  31. service = BaseNetworkService(_FakeProvider(networks))
  32. # Patched away from the built-in so that a hardcoded 10.0.0.0/16 in
  33. # the service cannot pass by coincidence.
  34. with mock.patch.object(BaseNetwork, 'CB_DEFAULT_IPV4RANGE',
  35. '192.168.0.0/16'):
  36. service.get_or_create_default()
  37. self.assertEqual(
  38. networks.created,
  39. [(BaseNetwork.CB_DEFAULT_NETWORK_LABEL, '192.168.0.0/16')],
  40. "The default network must be created with the configured default "
  41. "CIDR, not a hardcoded one.")
  42. def test_returns_the_existing_default_network_without_creating(self):
  43. networks = _NetworkRecorder(existing=["existing-net"])
  44. service = BaseNetworkService(_FakeProvider(networks))
  45. self.assertEqual(service.get_or_create_default(), "existing-net")
  46. self.assertEqual(networks.created, [])
  47. self.assertEqual(networks.find_labels,
  48. [BaseNetwork.CB_DEFAULT_NETWORK_LABEL])
  49. if __name__ == "__main__":
  50. unittest.main()