test_network_service.py 7.4 KB

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