test_cloud_helpers.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import itertools
  2. import six
  3. from cloudbridge.cloud.base.helpers import get_env
  4. from cloudbridge.cloud.base.resources import ClientPagedResultList
  5. from cloudbridge.cloud.base.resources import ServerPagedResultList
  6. from test.helpers import ProviderTestBase
  7. class DummyResult(object):
  8. def __init__(self, objid, name):
  9. self.id = objid
  10. self.name = name
  11. def __repr__(self):
  12. return "%s (%s)" % (self.id, self.name)
  13. class CloudHelpersTestCase(ProviderTestBase):
  14. _multiprocess_can_split_ = True
  15. def setUp(self):
  16. super(CloudHelpersTestCase, self).setUp()
  17. self.objects = [DummyResult(1, "One"),
  18. DummyResult(2, "Two"),
  19. DummyResult(3, "Three"),
  20. DummyResult(4, "Four"),
  21. ]
  22. def test_client_paged_result_list(self):
  23. objects = self.objects
  24. # A list with limit=2 and marker=None
  25. results = ClientPagedResultList(self.provider, objects, 2, None)
  26. self.assertListEqual(results, list(itertools.islice(objects, 2)))
  27. self.assertEqual(results.marker, objects[1].id)
  28. self.assertTrue(results.is_truncated)
  29. self.assertTrue(results.supports_total)
  30. self.assertEqual(results.total_results, 4)
  31. self.assertEqual(results.data, objects)
  32. # A list with limit=2 and marker=2
  33. results = ClientPagedResultList(self.provider, objects, 2, 2)
  34. self.assertListEqual(results, list(itertools.islice(objects, 2, 4)))
  35. self.assertEqual(results.marker, None)
  36. self.assertFalse(results.is_truncated)
  37. self.assertTrue(results.supports_total)
  38. self.assertEqual(results.total_results, 4)
  39. self.assertEqual(results.data, objects)
  40. # A list with limit=2 and marker=3
  41. results = ClientPagedResultList(self.provider, objects, 2, 3)
  42. self.assertListEqual(results, list(itertools.islice(objects, 3, 4)))
  43. self.assertFalse(results.is_truncated)
  44. self.assertEqual(results.marker, None)
  45. self.assertEqual(results.data, objects)
  46. self.assertFalse(results.supports_server_paging, "Client paged result"
  47. " lists should return False for server paging.")
  48. def test_server_paged_result_list(self):
  49. objects = list(itertools.islice(self.objects, 2))
  50. results = ServerPagedResultList(is_truncated=True,
  51. marker=objects[-1].id,
  52. supports_total=True,
  53. total=2, data=objects)
  54. self.assertTrue(results.is_truncated)
  55. self.assertListEqual(results, objects)
  56. self.assertEqual(results.marker, objects[-1].id)
  57. self.assertTrue(results.supports_total)
  58. self.assertEqual(results.total_results, 2)
  59. self.assertTrue(results.supports_server_paging, "Server paged result"
  60. " lists should return True for server paging.")
  61. with self.assertRaises(NotImplementedError):
  62. results.data
  63. def test_type_validation(self):
  64. """
  65. Make sure internal type checking implementation properly sets types.
  66. """
  67. self.provider.config['text_type_check'] = 'test-text'
  68. config_value = self.provider._get_config_value('text_type_check', None)
  69. self.assertIsInstance(config_value, six.string_types)
  70. env_value = self.provider._get_config_value(
  71. 'some_config_value', get_env('MOTO_AMIS_PATH'))
  72. self.assertIsInstance(env_value, six.string_types)
  73. none_value = self.provider._get_config_value(
  74. 'some_config_value', get_env('MISSING_ENV', None))
  75. self.assertIsNone(none_value)
  76. bool_value = self.provider._get_config_value(
  77. 'some_config_value', get_env('MISSING_ENV', True))
  78. self.assertIsInstance(bool_value, bool)
  79. int_value = self.provider._get_config_value(
  80. 'default_result_limit', None)
  81. self.assertIsInstance(int_value, int)