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 standard_interface_tests as sit
  4. from cloudbridge.cloud.base.resources import BaseNetwork
  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', '10.128.0.0/9'],
  35. "Network CIDR %s does not contain the expected value."
  36. % net.cidr_block)
  37. cidr = '{0}/24'.format(net.cidr_block.split('/')[0] or '10.0.0.0')
  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. BaseNetwork.cidr_blocks_overlap(cidr, sn.cidr_block),
  55. "Subnet's CIDR %s should overlap 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.1/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 = '{0}/24'.format(net.cidr_block.split('/')[0] or '10.0.0.0')
  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. with a network {1}".format(
  138. # router.id, router.network_id))
  139. router.attach_subnet(sn)
  140. gteway = (self.provider.networking.gateways
  141. .get_or_create_inet_gateway(name))
  142. router.attach_gateway(gteway)
  143. # TODO: add a check for routes after that's been implemented
  144. sit.check_delete(self, self.provider.networking.routers, router)
  145. @helpers.skipIfNoService(['networking.networks'])
  146. def test_default_network(self):
  147. subnet = self.provider.networking.subnets.get_or_create_default()
  148. self.assertIsInstance(subnet, Subnet)