Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
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