test_network_service.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. import test.helpers as helpers
  2. from test.helpers import ProviderTestBase
  3. from test.helpers import get_provider_test_data
  4. from test.helpers import standard_interface_tests as sit
  5. from cloudbridge.cloud.interfaces.resources import FloatingIP
  6. from cloudbridge.cloud.interfaces.resources import Network
  7. from cloudbridge.cloud.interfaces.resources import RouterState
  8. from cloudbridge.cloud.interfaces.resources import Subnet
  9. class CloudNetworkServiceTestCase(ProviderTestBase):
  10. @helpers.skipIfNoService(['networking.networks'])
  11. def test_crud_network(self):
  12. def create_net(name):
  13. return self.provider.networking.networks.create(
  14. name=name, cidr_block='10.0.0.0/16')
  15. def cleanup_net(net):
  16. self.provider.networking.networks.delete(network_id=net.id)
  17. sit.check_crud(self, self.provider.networking.networks, Network,
  18. "cb_crudnetwork", create_net, cleanup_net)
  19. @helpers.skipIfNoService(['networking.networks'])
  20. def test_network_properties(self):
  21. name = 'cb_propnetwork-{0}'.format(helpers.get_uuid())
  22. subnet_name = 'cb_propsubnet-{0}'.format(helpers.get_uuid())
  23. net = self.provider.networking.networks.create(
  24. name=name, cidr_block='10.0.0.0/16')
  25. with helpers.cleanup_action(
  26. lambda: net.delete()
  27. ):
  28. net.wait_till_ready()
  29. self.assertEqual(
  30. net.state, 'available',
  31. "Network in state '%s', yet should be 'available'" % net.state)
  32. sit.check_repr(self, net)
  33. self.assertIn(
  34. net.cidr_block, ['', '10.0.0.0/16'],
  35. "Network CIDR %s does not contain the expected value."
  36. % net.cidr_block)
  37. cidr = '10.0.1.0/24'
  38. sn = net.create_subnet(name=subnet_name, cidr_block=cidr,
  39. zone=helpers.get_provider_test_data(
  40. self.provider, 'placement'))
  41. with helpers.cleanup_action(lambda: sn.delete()):
  42. self.assertTrue(
  43. sn in net.subnets,
  44. "Subnet ID %s should be listed in network subnets %s."
  45. % (sn.id, net.subnets))
  46. self.assertListEqual(
  47. net.subnets, [sn],
  48. "Network should have exactly one subnet: %s." % sn.id)
  49. self.assertIn(
  50. net.id, sn.network_id,
  51. "Network ID %s should be specified in the subnet's network"
  52. " id %s." % (net.id, sn.network_id))
  53. self.assertEqual(
  54. cidr, sn.cidr_block,
  55. "Subnet's CIDR %s should match the specified one %s." % (
  56. sn.cidr_block, cidr))
  57. def test_crud_subnet(self):
  58. # Late binding will make sure that create_subnet gets the
  59. # correct value
  60. net = None
  61. def create_subnet(name):
  62. return self.provider.networking.subnets.create(
  63. network=net, cidr_block="10.0.0.0/24", name=name)
  64. def cleanup_subnet(subnet):
  65. self.provider.networking.subnets.delete(subnet=subnet)
  66. net_name = 'cb_crudsubnet-{0}'.format(helpers.get_uuid())
  67. net = self.provider.networking.networks.create(
  68. name=net_name, cidr_block='10.0.0.0/16')
  69. with helpers.cleanup_action(
  70. lambda:
  71. self.provider.networking.networks.delete(network_id=net.id)
  72. ):
  73. sit.check_crud(self, self.provider.networking.subnets, Subnet,
  74. "cb_crudsubnet", create_subnet, cleanup_subnet)
  75. @helpers.skipIfNoService(['networking.floating_ips'])
  76. def test_crud_floating_ip(self):
  77. def create_fip(name):
  78. return self.provider.networking.floating_ips.create()
  79. def cleanup_fip(fip):
  80. self.provider.networking.floating_ips.delete(fip.id)
  81. sit.check_crud(self, self.provider.networking.floating_ips, FloatingIP,
  82. "cb_crudfip", create_fip, cleanup_fip,
  83. skip_name_check=True)
  84. def test_floating_ip_properties(self):
  85. # Check floating IP address
  86. fip = self.provider.networking.floating_ips.create()
  87. with helpers.cleanup_action(lambda: fip.delete()):
  88. fipl = list(self.provider.networking.floating_ips)
  89. self.assertIn(fip, fipl)
  90. # 2016-08: address filtering not implemented in moto
  91. # empty_ipl = self.provider.network.floating_ips('dummy-net')
  92. # self.assertFalse(
  93. # empty_ipl,
  94. # "Bogus network should not have any floating IPs: {0}"
  95. # .format(empty_ipl))
  96. self.assertFalse(
  97. fip.private_ip,
  98. "Floating IP should not have a private IP value ({0})."
  99. .format(fip.private_ip))
  100. self.assertFalse(
  101. fip.in_use,
  102. "Newly created floating IP address should not be in use.")
  103. @helpers.skipIfNoService(['networking.routers'])
  104. def test_crud_router(self):
  105. def _cleanup(net, subnet, router, gateway):
  106. with helpers.cleanup_action(lambda: net.delete()):
  107. with helpers.cleanup_action(lambda: subnet.delete()):
  108. with helpers.cleanup_action(lambda: gateway.delete()):
  109. with helpers.cleanup_action(lambda: router.delete()):
  110. router.detach_subnet(subnet)
  111. router.detach_gateway(gateway)
  112. name = 'cb_crudrouter-{0}'.format(helpers.get_uuid())
  113. # Declare these variables and late binding will allow
  114. # the cleanup method access to the most current values
  115. net = None
  116. sn = None
  117. router = None
  118. gteway = None
  119. with helpers.cleanup_action(lambda: _cleanup(net, sn, router, gteway)):
  120. net = self.provider.networking.networks.create(
  121. name=name, cidr_block='10.0.0.0/16')
  122. router = self.provider.networking.routers.create(network=net,
  123. name=name)
  124. cidr = '10.0.1.0/24'
  125. sn = net.create_subnet(name=name, cidr_block=cidr,
  126. zone=helpers.get_provider_test_data(
  127. self.provider, 'placement'))
  128. # Check basic router properties
  129. sit.check_standard_behaviour(
  130. self, self.provider.networking.routers, router)
  131. self.assertEqual(
  132. router.state, RouterState.DETACHED,
  133. "Router {0} state {1} should be {2}.".format(
  134. router.id, router.state, RouterState.DETACHED))
  135. # self.assertFalse(
  136. # router.network_id,
  137. # "Router {0} should not be assoc.
  138. # with a network {1}".format(
  139. # router.id, router.network_id))
  140. router.attach_subnet(sn)
  141. gteway = (self.provider.networking.gateways
  142. .get_or_create_inet_gateway(net, name))
  143. router.attach_gateway(gteway)
  144. # TODO: add a check for routes after that's been implemented
  145. sit.check_delete(self, self.provider.networking.routers, router)
  146. @helpers.skipIfNoService(['networking.networks'])
  147. def test_default_network(self):
  148. subnet = self.provider.networking.subnets.get_or_create_default(
  149. zone=get_provider_test_data(self.provider, 'placement'))
  150. self.assertIsInstance(subnet, Subnet)