def setUp(self): self.uuid_counter = count() self.patch(backends, 'uuid4', lambda: next(self.uuid_counter)) config = GraphiteBackendConfig(mk_backend_config_data()) self.backend = GraphiteBackend(config) self.m1, self.m2 = self.backend.metrics self.last_request_url = None self.stub_time(self.TIME) self.stub_getPage()
class GraphiteBackendTestCase(unittest.TestCase): TIME = 10800 # 3 hours since the unix epoch FROM_TIME = -7200000 # 2 hours from 'now' UNTIL_TIME = -3600000 # 1 hour from 'now' M1_RAW_DATAPOINTS = [ [None, 3773], [5.0, 5695], [10.0, 5700], [12.0, 7114]] M1_PROCESSED_DATAPOINTS = [ {'x': 3600000, 'y': 0}, {'x': 5700000, 'y': 10.0}, {'x': 7200000, 'y': 12.0}] M2_RAW_DATAPOINTS = [ [12.0, 3724], [14.0, 3741], [25.0, 4638], [None, 4829], [11.0, 6075]] M2_PROCESSED_DATAPOINTS = [ {'x': 3600000, 'y': 26.0}, {'x': 4500000, 'y': 25.0}, {'x': 6000000, 'y': 11.0}] RESPONSE_DATA = json.dumps([ {'target': 'a.last', 'datapoints': M1_RAW_DATAPOINTS}, {'target': 'b.sum', 'datapoints': M2_RAW_DATAPOINTS}]) def setUp(self): self.uuid_counter = count() self.patch(backends, 'uuid4', lambda: next(self.uuid_counter)) config = GraphiteBackendConfig(mk_backend_config_data()) self.backend = GraphiteBackend(config) self.m1, self.m2 = self.backend.metrics self.last_request_url = None self.stub_time(self.TIME) self.stub_getPage() def stub_getPage(self): d = Deferred() d.addCallback(lambda _: self.RESPONSE_DATA) def stubbed_getPage(url): self.last_requested_url = url return d self.patch(client, 'getPage', stubbed_getPage) def stub_time(self, t): self.patch(time, 'time', lambda: t) def assert_url(self, url, expected_base, expected_path, **expected_params): url_parts = urlsplit(url) self.assertEqual(expected_params, parse_qs(url_parts.query)) self.assertEqual(expected_base, "http://%s/" % url_parts.netloc) self.assertEqual(expected_path, url_parts.path) def assert_request_url(self, url, expected_url_params): expected_url_params.update({ 'format': ['json'], 'target': [ self.m1.aliased_target(), self.m2.aliased_target()], }) self.assert_url( url, self.backend.config['url'], '/render/', **expected_url_params) def test_request_url_building(self): self.assert_request_url(self.backend.build_request_url( **{'from_time': 3600000}), {'from': ['3600']}) self.assert_request_url(self.backend.build_request_url( **{'until_time': 3600000}), {'until': ['3600']}) self.assert_request_url(self.backend.build_request_url( **{'from_time': 7200000, 'until_time': 3600000}), {'from': ['7200'], 'until': ['3600']}) def test_data_retrieval(self): deferred_result = self.backend.get_data( from_time=self.FROM_TIME, until_time=self.UNTIL_TIME) def assert_retrieved_data(result): self.assert_request_url( self.last_requested_url, {'from': ['3600'], 'until': ['7200']}) self.assertEqual(result, [{ 'id': '0', 'datapoints': self.M1_PROCESSED_DATAPOINTS }, { 'id': '1', 'datapoints': self.M2_PROCESSED_DATAPOINTS }]) deferred_result.addCallback(assert_retrieved_data) deferred_result.callback(None) return deferred_result