def record_metering_data(self, context, data): """This method is triggered when metering data is cast from an agent. """ # We may have receive only one counter on the wire if not isinstance(data, list): data = [data] for meter in data: LOG.info('metering data %s for %s @ %s: %s', meter['counter_name'], meter['resource_id'], meter.get('timestamp', 'NO TIMESTAMP'), meter['counter_volume']) if publisher_meter.verify_signature( meter, cfg.CONF.publisher_meter.metering_secret): try: # Convert the timestamp to a datetime instance. # Storage engines are responsible for converting # that value to something they can store. if meter.get('timestamp'): ts = timeutils.parse_isotime(meter['timestamp']) meter['timestamp'] = timeutils.normalize_time(ts) self.storage_conn.record_metering_data(meter) except Exception as err: LOG.error('Failed to record metering data: %s', err) LOG.exception(err) else: LOG.warning( 'message signature invalid, discarding message: %r', meter)
def test_verify_signature_nested(): data = { 'a': 'A', 'b': 'B', 'nested': { 'a': 'A', 'b': 'B', }, } data['message_signature'] = meter.compute_signature(data, 'not-so-secret') assert meter.verify_signature(data, 'not-so-secret')
def test_verify_signature_nested(): data = {'a': 'A', 'b': 'B', 'nested': {'a': 'A', 'b': 'B', }, } data['message_signature'] = meter.compute_signature( data, 'not-so-secret') assert meter.verify_signature(data, 'not-so-secret')
def test_verify_signature_nested_json(): data = { 'a': 'A', 'b': 'B', 'nested': { 'a': 'A', 'b': 'B', 'c': ('c', ), 'd': ['d'] }, } data['message_signature'] = meter.compute_signature(data, 'not-so-secret') jsondata = jsonutils.loads(jsonutils.dumps(data)) assert meter.verify_signature(jsondata, 'not-so-secret')
def test_verify_signature_nested_json(): data = {'a': 'A', 'b': 'B', 'nested': {'a': 'A', 'b': 'B', 'c': ('c',), 'd': ['d'] }, } data['message_signature'] = meter.compute_signature( data, 'not-so-secret') jsondata = jsonutils.loads(jsonutils.dumps(data)) assert meter.verify_signature(jsondata, 'not-so-secret')
def test_verify_signature_incorrect(): data = {'a': 'A', 'b': 'B', 'message_signature': 'Not the same'} assert not meter.verify_signature(data, 'not-so-secret')
def test_verify_signature_unsigned(): data = {'a': 'A', 'b': 'B'} assert not meter.verify_signature(data, 'not-so-secret')
def test_verify_signature_signed(): data = {'a': 'A', 'b': 'B'} sig1 = meter.compute_signature(data, 'not-so-secret') data['message_signature'] = sig1 assert meter.verify_signature(data, 'not-so-secret')