resultset_test.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. # -*- coding: utf-8 -*-
  2. """Define the resultset test package."""
  3. from __future__ import absolute_import
  4. from __future__ import division
  5. from __future__ import print_function
  6. from __future__ import unicode_literals
  7. import unittest
  8. from influxdb.exceptions import InfluxDBClientError
  9. from influxdb.resultset import ResultSet
  10. class TestResultSet(unittest.TestCase):
  11. """Define the ResultSet test object."""
  12. def setUp(self):
  13. """Set up an instance of TestResultSet."""
  14. self.query_response = {
  15. "results": [
  16. {"series": [{"name": "cpu_load_short",
  17. "columns": ["time", "value", "host", "region"],
  18. "values": [
  19. ["2015-01-29T21:51:28.968422294Z",
  20. 0.64,
  21. "server01",
  22. "us-west"],
  23. ["2015-01-29T21:51:28.968422294Z",
  24. 0.65,
  25. "server02",
  26. "us-west"],
  27. ]},
  28. {"name": "other_series",
  29. "columns": ["time", "value", "host", "region"],
  30. "values": [
  31. ["2015-01-29T21:51:28.968422294Z",
  32. 0.66,
  33. "server01",
  34. "us-west"],
  35. ]}]}
  36. ]
  37. }
  38. self.rs = ResultSet(self.query_response['results'][0])
  39. def test_filter_by_name(self):
  40. """Test filtering by name in TestResultSet object."""
  41. expected = [
  42. {'value': 0.64,
  43. 'time': '2015-01-29T21:51:28.968422294Z',
  44. 'host': 'server01',
  45. 'region': 'us-west'},
  46. {'value': 0.65,
  47. 'time': '2015-01-29T21:51:28.968422294Z',
  48. 'host': 'server02',
  49. 'region': 'us-west'},
  50. ]
  51. self.assertEqual(expected, list(self.rs['cpu_load_short']))
  52. self.assertEqual(expected,
  53. list(self.rs.get_points(
  54. measurement='cpu_load_short')))
  55. def test_filter_by_tags(self):
  56. """Test filter by tags in TestResultSet object."""
  57. expected = [
  58. {'value': 0.64,
  59. 'time': '2015-01-29T21:51:28.968422294Z',
  60. 'host': 'server01',
  61. 'region': 'us-west'},
  62. {'value': 0.66,
  63. 'time': '2015-01-29T21:51:28.968422294Z',
  64. 'host': 'server01',
  65. 'region': 'us-west'},
  66. ]
  67. self.assertEqual(
  68. expected,
  69. list(self.rs[{"host": "server01"}])
  70. )
  71. self.assertEqual(
  72. expected,
  73. list(self.rs.get_points(tags={'host': 'server01'}))
  74. )
  75. def test_filter_by_name_and_tags(self):
  76. """Test filter by name and tags in TestResultSet object."""
  77. self.assertEqual(
  78. list(self.rs[('cpu_load_short', {"host": "server01"})]),
  79. [{'value': 0.64,
  80. 'time': '2015-01-29T21:51:28.968422294Z',
  81. 'host': 'server01',
  82. 'region': 'us-west'}]
  83. )
  84. self.assertEqual(
  85. list(self.rs[('cpu_load_short', {"region": "us-west"})]),
  86. [
  87. {'value': 0.64,
  88. 'time': '2015-01-29T21:51:28.968422294Z',
  89. 'host': 'server01',
  90. 'region': 'us-west'},
  91. {'value': 0.65,
  92. 'time': '2015-01-29T21:51:28.968422294Z',
  93. 'host': 'server02',
  94. 'region': 'us-west'},
  95. ]
  96. )
  97. def test_keys(self):
  98. """Test keys in TestResultSet object."""
  99. self.assertEqual(
  100. self.rs.keys(),
  101. [
  102. ('cpu_load_short', None),
  103. ('other_series', None),
  104. ]
  105. )
  106. def test_len(self):
  107. """Test length in TestResultSet object."""
  108. self.assertEqual(
  109. len(self.rs),
  110. 2
  111. )
  112. def test_items(self):
  113. """Test items in TestResultSet object."""
  114. items = list(self.rs.items())
  115. items_lists = [(item[0], list(item[1])) for item in items]
  116. self.assertEqual(
  117. items_lists,
  118. [
  119. (
  120. ('cpu_load_short', None),
  121. [
  122. {'time': '2015-01-29T21:51:28.968422294Z',
  123. 'value': 0.64,
  124. 'host': 'server01',
  125. 'region': 'us-west'},
  126. {'time': '2015-01-29T21:51:28.968422294Z',
  127. 'value': 0.65,
  128. 'host': 'server02',
  129. 'region': 'us-west'}]),
  130. (
  131. ('other_series', None),
  132. [
  133. {'time': '2015-01-29T21:51:28.968422294Z',
  134. 'value': 0.66,
  135. 'host': 'server01',
  136. 'region': 'us-west'}])]
  137. )
  138. def test_point_from_cols_vals(self):
  139. """Test points from columns in TestResultSet object."""
  140. cols = ['col1', 'col2']
  141. vals = [1, '2']
  142. point = ResultSet.point_from_cols_vals(cols, vals)
  143. self.assertDictEqual(
  144. point,
  145. {'col1': 1, 'col2': '2'}
  146. )
  147. def test_system_query(self):
  148. """Test system query capabilities in TestResultSet object."""
  149. rs = ResultSet(
  150. {'series': [
  151. {'values': [['another', '48h0m0s', 3, False],
  152. ['default', '0', 1, False],
  153. ['somename', '24h0m0s', 4, True]],
  154. 'columns': ['name', 'duration',
  155. 'replicaN', 'default']}]}
  156. )
  157. self.assertEqual(
  158. rs.keys(),
  159. [('results', None)]
  160. )
  161. self.assertEqual(
  162. list(rs['results']),
  163. [
  164. {'duration': '48h0m0s', 'default': False, 'replicaN': 3,
  165. 'name': 'another'},
  166. {'duration': '0', 'default': False, 'replicaN': 1,
  167. 'name': 'default'},
  168. {'duration': '24h0m0s', 'default': True, 'replicaN': 4,
  169. 'name': 'somename'}
  170. ]
  171. )
  172. def test_resultset_error(self):
  173. """Test returning error in TestResultSet object."""
  174. with self.assertRaises(InfluxDBClientError):
  175. ResultSet({
  176. "series": [],
  177. "error": "Big error, many problems."
  178. })