コード例 #1
0
ファイル: test_protocols.py プロジェクト: zsuzhengdu/carbon
    def setUp(self):
        test_directory = os.path.dirname(os.path.realpath(__file__))
        settings = {
            'CONF_DIR': os.path.join(test_directory, 'data', 'conf-directory'),
            'USE_INSECURE_PICKLER': False
        }
        self._settings_patch = patch.dict('carbon.conf.settings', settings)
        self._settings_patch.start()

        from carbon.protocols import CacheManagementHandler
        self.handler = CacheManagementHandler()

        self.cache = _MetricCache()

        def _get_cache():
            return self.cache

        self._metriccache_patch = patch('carbon.protocols.MetricCache',
                                        _get_cache)
        self._metriccache_patch.start()

        self.handler.unpickler = pickle
        self.handler.peerAddr = 'localhost:7002'

        self.send_string_mock = Mock(side_effect=self._save_response)
        self._send_string_patch = patch.object(self.handler, 'sendString',
                                               self.send_string_mock)
        self._send_string_patch.start()
コード例 #2
0
ファイル: test_protocols.py プロジェクト: criteo-forks/carbon
  def setUp(self):
    test_directory = os.path.dirname(os.path.realpath(__file__))
    settings = {
      'CONF_DIR': os.path.join(test_directory, 'data', 'conf-directory'),
      'USE_INSECURE_PICKLER': False
    }
    self._settings_patch = patch.dict('carbon.conf.settings', settings)
    self._settings_patch.start()

    from carbon.protocols import CacheManagementHandler
    self.handler = CacheManagementHandler()

    self.cache = _MetricCache()
    def _get_cache():
      return self.cache

    self._metriccache_patch = patch('carbon.protocols.MetricCache', _get_cache)
    self._metriccache_patch.start()

    self.handler.unpickler = pickle
    self.handler.peerAddr = 'localhost:7002'

    self.send_string_mock = Mock(side_effect=self._save_response)
    self._send_string_patch = patch.object(self.handler, 'sendString', self.send_string_mock)
    self._send_string_patch.start()
コード例 #3
0
class TestCacheManagementHandler(TestCase):
  def setUp(self):
    test_directory = os.path.dirname(os.path.realpath(__file__))
    settings = {
      'CONF_DIR': os.path.join(test_directory, 'data', 'conf-directory'),
      'USE_INSECURE_PICKLER': False
    }
    self._settings_patch = patch.dict('carbon.conf.settings', settings)
    self._settings_patch.start()

    from carbon.protocols import CacheManagementHandler
    self.handler = CacheManagementHandler()

    self.cache = _MetricCache()
    self._metriccache_patch = patch('carbon.protocols.MetricCache', self.cache)
    self._metriccache_patch.start()

    self.handler.unpickler = pickle
    self.handler.peerAddr = 'localhost:7002'

    self.send_string_mock = Mock(side_effect=self._save_response)
    self._send_string_patch = patch.object(self.handler, 'sendString', self.send_string_mock)
    self._send_string_patch.start()

  def tearDown(self):
    self._settings_patch.stop()
    self._send_string_patch.stop()
    self._metriccache_patch.stop()
    del self.cache

  def _save_response(self, arg):
    self.response = None
    if arg:
      raw_response = arg
      self.response = pickle.loads(raw_response)

  def send_request(self, request_type, **kwargs):
    request = {}
    request['type'] = request_type
    request.update(kwargs)
    self.handler.stringReceived(pickle.dumps(request))

  @patch('carbon.protocols.get_unpickler')
  def test_pickler_configured_on_connect(self, get_unpickler_mock):
    from twisted.internet.address import IPv4Address
    address = IPv4Address('TCP', 'localhost', 7002)
    self.handler.transport = Mock()
    self.handler.transport.getPeer = Mock(return_value=address)
    self.handler.connectionMade()
    get_unpickler_mock.assert_called_once_with(insecure=False)

  def test_invalid_request_type_returns_error(self):
    response = self.send_request('foo')

    self.assertIn('error', self.response)

  def test_cache_query_returns_response_dict(self):
    self.send_request('cache-query', metric='carbon.foo')
    self.assertIsInstance(self.response, dict)

  def test_cache_query_response_has_datapoints(self):
    self.send_request('cache-query', metric='carbon.foo')
    self.assertIn('datapoints', self.response)

  def test_cache_query_returns_empty_if_no_match(self):
    self.send_request('cache-query', metric='carbon.foo')
    self.assertEquals({'datapoints': []}, self.response)

  def test_cache_query_returns_cached_datapoints_if_matches(self):
    self.cache.store('carbon.foo', (600, 1.0))
    self.send_request('cache-query', metric='carbon.foo')
    self.assertEqual([(600, 1.0)], self.response['datapoints'])

  def test_cache_bulk_query_returns_response_dict(self):
    self.send_request('cache-query-bulk', metrics=[])
    self.assertIsInstance(self.response, dict)

  def test_cache_bulk_query_response_has_datapointsByMetric(self):
    self.send_request('cache-query-bulk', metrics=[])
    self.assertIn('datapointsByMetric', self.response)

  def test_cache_bulk_query_response_returns_empty_if_no_match(self):
    self.send_request('cache-query-bulk', metrics=[])
    self.assertEquals({'datapointsByMetric': {}}, self.response)

  def test_cache_bulk_query_response(self):
    self.cache.store('carbon.foo', (600, 1.0))
    self.cache.store('carbon.bar', (600, 2.0))

    expected_response = {'carbon.foo': [(600, 1.0)], 'carbon.bar': [(600, 2.0)]}
    self.send_request('cache-query-bulk', metrics=['carbon.foo', 'carbon.bar'])
    self.assertEquals({'datapointsByMetric': expected_response}, self.response)