def record_metering_data(self, context, data): # We may have receive only one counter on the wire if not isinstance(data, list): data = [data] for meter in data: LOG.debug('metering data %s for %s @ %s: %s', meter['counter_name'], meter['resource_id'], meter.get('timestamp', 'NO TIMESTAMP'), meter['counter_volume']) if publisher_rpc.verify_signature( meter, self.conf.publisher_rpc.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.exception('Failed to record metering data: %s', err) else: LOG.warning( 'message signature invalid, discarding message: %r', meter)
def record_metering_data(self, context, data): # We may have receive only one counter on the wire if not isinstance(data, list): data = [data] for meter in data: LOG.debug('metering data %s for %s @ %s: %s', meter['counter_name'], meter['resource_id'], meter.get('timestamp', 'NO TIMESTAMP'), meter['counter_volume']) if publisher_rpc.verify_signature( meter, self.conf.publisher_rpc.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 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_rpc.verify_signature(meter, cfg.CONF.publisher_rpc.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(self): data = {'a': 'A', 'b': 'B', 'nested': {'a': 'A', 'b': 'B', }, } data['message_signature'] = rpc.compute_signature( data, 'not-so-secret') self.assertTrue(rpc.verify_signature(data, 'not-so-secret'))
def test_verify_signature_nested(): data = { 'a': 'A', 'b': 'B', 'nested': { 'a': 'A', 'b': 'B', }, } data['message_signature'] = rpc.compute_signature(data, 'not-so-secret') assert rpc.verify_signature(data, 'not-so-secret')
def test_verify_signature_nested_list_of_dict(self): small = 1 big = 1 << 64 nested = {small: 99, big: 42} data = {'a': 'A', 'b': 'B', 'nested': {'list': [nested]}} data['message_signature'] = rpc.compute_signature( data, 'not-so-secret') # the keys 1 and 1<<64 cause a hash collision on 64bit platforms data['nested']['list'] = [{big: 42, small: 99}] self.assertTrue(rpc.verify_signature(data, 'not-so-secret'))
def test_verify_signature_nested_json(self): data = {'a': 'A', 'b': 'B', 'nested': {'a': 'A', 'b': 'B', 'c': ('c',), 'd': ['d'] }, } data['message_signature'] = rpc.compute_signature( data, 'not-so-secret') jsondata = jsonutils.loads(jsonutils.dumps(data)) self.assertTrue(rpc.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'] = rpc.compute_signature(data, 'not-so-secret') jsondata = jsonutils.loads(jsonutils.dumps(data)) assert rpc.verify_signature(jsondata, 'not-so-secret')
def test_verify_signature_incorrect(self): data = {'a': 'A', 'b': 'B', 'message_signature': 'Not the same'} self.assertFalse(rpc.verify_signature(data, 'not-so-secret'))
def test_verify_signature_unsigned(self): data = {'a': 'A', 'b': 'B'} self.assertFalse(rpc.verify_signature(data, 'not-so-secret'))
def test_verify_signature_signed(self): data = {'a': 'A', 'b': 'B'} sig1 = rpc.compute_signature(data, 'not-so-secret') data['message_signature'] = sig1 self.assertTrue(rpc.verify_signature(data, 'not-so-secret'))
def test_verify_signature_incorrect(): data = {'a': 'A', 'b': 'B', 'message_signature': 'Not the same'} assert not rpc.verify_signature(data, 'not-so-secret')
def test_verify_signature_unsigned(): data = {'a': 'A', 'b': 'B'} assert not rpc.verify_signature(data, 'not-so-secret')
def test_verify_signature_nested_json(self): data = {"a": "A", "b": "B", "nested": {"a": "A", "b": "B", "c": ("c",), "d": ["d"]}} data["message_signature"] = rpc.compute_signature(data, "not-so-secret") jsondata = jsonutils.loads(jsonutils.dumps(data)) self.assertTrue(rpc.verify_signature(jsondata, "not-so-secret"))
def test_verify_signature_nested(self): data = {"a": "A", "b": "B", "nested": {"a": "A", "b": "B"}} data["message_signature"] = rpc.compute_signature(data, "not-so-secret") self.assertTrue(rpc.verify_signature(data, "not-so-secret"))
def test_verify_signature_unsigned(self): data = {"a": "A", "b": "B"} self.assertFalse(rpc.verify_signature(data, "not-so-secret"))
def test_verify_signature_signed(self): data = {"a": "A", "b": "B"} sig1 = rpc.compute_signature(data, "not-so-secret") data["message_signature"] = sig1 self.assertTrue(rpc.verify_signature(data, "not-so-secret"))
def test_verify_signature_signed(): data = {'a': 'A', 'b': 'B'} sig1 = rpc.compute_signature(data, 'not-so-secret') data['message_signature'] = sig1 assert rpc.verify_signature(data, 'not-so-secret')
def test_verify_signature_incorrect(self): data = {"a": "A", "b": "B", "message_signature": "Not the same"} self.assertFalse(rpc.verify_signature(data, "not-so-secret"))