test_network_service.py 8.5 KB

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