test_network_service.py 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. import test.helpers as helpers
  2. import uuid
  3. from test.helpers import ProviderTestBase
  4. from cloudbridge.cloud.interfaces.resources import RouterState
  5. class CloudNetworkServiceTestCase(ProviderTestBase):
  6. def __init__(self, methodName, provider):
  7. super(CloudNetworkServiceTestCase, self).__init__(
  8. methodName=methodName, provider=provider)
  9. def test_crud_network_service(self):
  10. name = 'cbtestnetworkservice-{0}'.format(uuid.uuid4())
  11. net = self.provider.network.create(name=name)
  12. with helpers.cleanup_action(
  13. lambda:
  14. self.provider.network.delete(network_id=net.id)
  15. ):
  16. # test list method
  17. netl = self.provider.network.list()
  18. list_netl = [n for n in netl if n.name == name]
  19. self.assertTrue(
  20. len(list_netl) == 1,
  21. "List networks does not return the expected network %s" %
  22. name)
  23. # check get
  24. get_net = self.provider.network.get(network_id=net.id)
  25. self.assertTrue(
  26. get_net == net,
  27. "Get network did not return the expected network {0}."
  28. .format(name))
  29. netl = self.provider.network.list()
  30. found_net = [n for n in netl if n.name == name]
  31. self.assertEqual(
  32. len(found_net), 0,
  33. "Network {0} should have been deleted but still exists."
  34. .format(name))
  35. def test_crud_subnet_service(self):
  36. name = 'cbtestnetworkservice-{0}'.format(uuid.uuid4())
  37. subnet_name = 'cbtestsubnetservice-{0}'.format(uuid.uuid4())
  38. net = self.provider.network.create(name=name)
  39. with helpers.cleanup_action(
  40. lambda:
  41. self.provider.network.delete(network_id=net.id)
  42. ):
  43. subnet = self.provider.network.subnets.create(
  44. network=net, cidr_block="10.0.0.1/24", name=subnet_name)
  45. with helpers.cleanup_action(
  46. lambda:
  47. self.provider.network.subnets.delete(subnet=subnet)
  48. ):
  49. # test list method
  50. subnetl = self.provider.network.subnets.list(network=net)
  51. list_subnetl = [n for n in subnetl if n.name == subnet_name]
  52. self.assertTrue(
  53. len(list_subnetl) == 1,
  54. "List subnets does not return the expected subnet %s" %
  55. subnet_name)
  56. # test get method
  57. sn = self.provider.network.subnets.get(subnet.id)
  58. self.assertTrue(
  59. subnet.id == sn.id,
  60. "GETting subnet should return the same subnet")
  61. subnetl = self.provider.network.subnets.list()
  62. found_subnet = [n for n in subnetl if n.name == subnet_name]
  63. self.assertTrue(
  64. len(found_subnet) == 0,
  65. "Subnet {0} should have been deleted but still exists."
  66. .format(subnet_name))
  67. netl = self.provider.network.list()
  68. found_net = [n for n in netl if n.name == name]
  69. self.assertEqual(
  70. len(found_net), 0,
  71. "Network {0} should have been deleted but still exists."
  72. .format(name))
  73. def test_crud_ip(self):
  74. ip = self.provider.network.create_floating_ip()
  75. ip_id = ip.id
  76. with helpers.cleanup_action(lambda: ip.delete()):
  77. ipl = self.provider.network.floating_ips()
  78. self.assertTrue(
  79. ip in ipl,
  80. "Floating IP address {0} should exist in the list {1}"
  81. .format(ip.id, ipl))
  82. # 2016-08: address filtering not implemented in moto
  83. # empty_ipl = self.provider.network.floating_ips('dummy-net')
  84. # self.assertFalse(
  85. # empty_ipl,
  86. # "Bogus network should not have any floating IPs: {0}"
  87. # .format(empty_ipl))
  88. self.assertIn(
  89. ip.public_ip, repr(ip),
  90. "repr(obj) should contain the address public IP value.")
  91. self.assertFalse(
  92. ip.private_ip,
  93. "Floating IP should not have a private IP value ({0})."
  94. .format(ip.private_ip))
  95. self.assertFalse(
  96. ip.in_use(),
  97. "Newly created floating IP address should not be in use.")
  98. ipl = self.provider.network.floating_ips()
  99. found_ip = [a for a in ipl if a.id == ip_id]
  100. self.assertTrue(
  101. len(found_ip) == 0,
  102. "Floating IP {0} should have been deleted but still exists."
  103. .format(ip_id))
  104. def test_crud_network(self):
  105. name = 'cbtestnetwork-{0}'.format(uuid.uuid4())
  106. subnet_name = 'cbtestsubnet-{0}'.format(uuid.uuid4())
  107. net = self.provider.network.create(name=name)
  108. with helpers.cleanup_action(
  109. lambda: net.delete()
  110. ):
  111. net.wait_till_ready()
  112. self.assertEqual(
  113. net.refresh(), 'available',
  114. "Network in state %s , yet should be 'available'" % net.state)
  115. self.assertIn(
  116. net.id, repr(net),
  117. "repr(obj) should contain the object id so that the object"
  118. " can be reconstructed, but does not.")
  119. self.assertIn(
  120. net.cidr_block, ['', '10.0.0.0/16'],
  121. "Network CIDR %s does not contain the expected value."
  122. % net.cidr_block)
  123. cidr = '10.0.1.0/24'
  124. sn = net.create_subnet(cidr_block=cidr, name=subnet_name)
  125. with helpers.cleanup_action(lambda: sn.delete()):
  126. self.assertTrue(
  127. sn.id in [s.id for s in net.subnets()],
  128. "Subnet ID %s should be listed in network subnets %s."
  129. % (sn.id, net.subnets()))
  130. self.assertIn(
  131. net.id, sn.network_id,
  132. "Network ID %s should be specified in the subnet's network"
  133. " id %s." % (net.id, sn.network_id))
  134. self.assertEqual(
  135. cidr, sn.cidr_block,
  136. "Subnet's CIDR %s should match the specified one %s." % (
  137. sn.cidr_block, cidr))
  138. def test_crud_router(self):
  139. def _cleanup(net, subnet, router):
  140. router.remove_route(subnet.id)
  141. router.detach_network()
  142. router.delete()
  143. subnet.delete()
  144. net.delete()
  145. name = 'cbtestrouter-{0}'.format(uuid.uuid4())
  146. router = self.provider.network.create_router(name=name)
  147. net = self.provider.network.create(name=name)
  148. cidr = '10.0.1.0/24'
  149. sn = net.create_subnet(cidr_block=cidr, name=name)
  150. with helpers.cleanup_action(lambda: _cleanup(net, sn, router)):
  151. # Check basic router properties
  152. self.assertIn(
  153. router, self.provider.network.routers(),
  154. "Router {0} should exist in the router list {1}.".format(
  155. router.id, self.provider.network.routers()))
  156. self.assertIn(
  157. router.id, repr(router),
  158. "repr(obj) should contain the object id so that the object"
  159. " can be reconstructed, but does not.")
  160. self.assertEqual(
  161. router.name, name,
  162. "Router {0} name should be {1}.".format(router.name, name))
  163. self.assertEqual(
  164. router.state, RouterState.DETACHED,
  165. "Router {0} state {1} should be {2}.".format(
  166. router.id, router.state, RouterState.DETACHED))
  167. self.assertFalse(
  168. router.network_id,
  169. "Router {0} should not be assoc. with a network {1}".format(
  170. router.id, router.network_id))
  171. # Check router connectivity
  172. # On OpenStack only one network is external and on AWS every
  173. # network is external, yet we need to use the one we've created?!
  174. if self.provider.PROVIDER_ID == 'openstack':
  175. for n in self.provider.network.list():
  176. if n.external:
  177. external_net = n
  178. break
  179. else:
  180. external_net = net
  181. router.attach_network(external_net.id)
  182. router.refresh()
  183. self.assertEqual(
  184. router.network_id, external_net.id,
  185. "Router should be attached to network {0}, not {1}".format(
  186. external_net.id, router.network_id))
  187. router.add_route(sn.id)
  188. # TODO: add a check for routes after that's been implemented
  189. routerl = self.provider.network.routers()
  190. found_router = [r for r in routerl if r.name == name]
  191. self.assertEqual(
  192. len(found_router), 0,
  193. "Router {0} should have been deleted but still exists."
  194. .format(name))