test_network_service.py 6.9 KB

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