test_cloud_helpers.py 3.9 KB

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