test_region_service.py 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import six
  2. from cloudbridge.cloud.interfaces import Region
  3. from test.helpers import ProviderTestBase
  4. import test.helpers as helpers
  5. class CloudRegionServiceTestCase(ProviderTestBase):
  6. def __init__(self, methodName, provider):
  7. super(CloudRegionServiceTestCase, self).__init__(
  8. methodName=methodName, provider=provider)
  9. @helpers.skipIfNoService(['compute.regions'])
  10. def test_get_and_list_regions(self):
  11. """
  12. Test whether the region listing methods work,
  13. and whether zones are returned appropriately.
  14. """
  15. regions = self.provider.compute.regions.list()
  16. # check iteration
  17. iter_regions = list(self.provider.compute.regions)
  18. self.assertListEqual(iter_regions, regions)
  19. for region in regions:
  20. self.assertIsInstance(
  21. region,
  22. Region,
  23. "regions.list() should return a cloudbridge Region")
  24. self.assertTrue(
  25. region.name,
  26. "Region name should be a non-empty string")
  27. region = self.provider.compute.regions.get(regions[0].id)
  28. self.assertEqual(
  29. region,
  30. regions[0],
  31. "List and get methods should return the same regions")
  32. self.assertTrue(
  33. region.id in repr(region),
  34. "repr(obj) should contain the object id so that the object"
  35. " can be reconstructed, but does not.")
  36. self.assertTrue(
  37. region.name in region.to_json(),
  38. "Region name {0} not in JSON representation {1}".format(
  39. region.name, region.to_json()))
  40. @helpers.skipIfNoService(['compute.regions'])
  41. def test_regions_unique(self):
  42. """
  43. Regions should not return duplicate items
  44. """
  45. regions = self.provider.compute.regions.list()
  46. unique_regions = set([region.id for region in regions])
  47. self.assertTrue(len(regions) == len(list(unique_regions)))
  48. @helpers.skipIfNoService(['compute.regions'])
  49. def test_current_region(self):
  50. """
  51. RegionService.current should return a valid region
  52. """
  53. current_region = self.provider.compute.regions.current
  54. self.assertIsInstance(current_region, Region)
  55. self.assertTrue(current_region in self.provider.compute.regions.list())
  56. @helpers.skipIfNoService(['compute.regions'])
  57. def test_zones(self):
  58. """
  59. Test whether regions return the correct zone information
  60. """
  61. zone_find_count = 0
  62. test_zone = helpers.get_provider_test_data(self.provider, "placement")
  63. regions = self.provider.compute.regions.list()
  64. for region in regions:
  65. self.assertTrue(region.name)
  66. for zone in region.zones:
  67. self.assertTrue(zone.id)
  68. self.assertTrue(zone.name)
  69. self.assertTrue(zone.region_name is None or
  70. isinstance(zone.region_name,
  71. six.string_types))
  72. if test_zone == zone.name:
  73. zone_find_count += 1
  74. # TODO: Can't do a check for zone_find_count == 1 because Moto
  75. # always returns the same zone for any region
  76. self.assertTrue(zone_find_count > 0,
  77. "The test zone: {0} should appear exactly"
  78. " once in the list of regions, but was not found"
  79. .format(test_zone, zone_find_count))