test_region_service.py 3.3 KB

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