Merge "Fix a wrong condition for the _purge_metering_info function"
This commit is contained in:
commit
3917b560e7
|
@ -77,7 +77,6 @@ class MeteringAgent(MeteringPluginRpc, manager.Manager):
|
|||
self.conf = conf or cfg.CONF
|
||||
self._load_drivers()
|
||||
self.context = context.get_admin_context_without_session()
|
||||
self.metering_info = {}
|
||||
self.metering_loop = loopingcall.FixedIntervalLoopingCall(
|
||||
self._metering_loop
|
||||
)
|
||||
|
@ -118,11 +117,13 @@ class MeteringAgent(MeteringPluginRpc, manager.Manager):
|
|||
info['time'] = 0
|
||||
|
||||
def _purge_metering_info(self):
|
||||
ts = int(time.time())
|
||||
report_interval = self.conf.report_interval
|
||||
for label_id, info in self.metering_info.items():
|
||||
if info['last_update'] > ts + report_interval:
|
||||
del self.metering_info[label_id]
|
||||
deadline_timestamp = int(time.time()) - self.conf.report_interval
|
||||
label_ids = [
|
||||
label_id
|
||||
for label_id, info in self.metering_infos.items()
|
||||
if info['last_update'] < deadline_timestamp]
|
||||
for label_id in label_ids:
|
||||
del self.metering_infos[label_id]
|
||||
|
||||
def _add_metering_info(self, label_id, pkts, bytes):
|
||||
ts = int(time.time())
|
||||
|
|
|
@ -138,6 +138,49 @@ class TestMeteringOperations(base.BaseTestCase):
|
|||
|
||||
self.agent._add_metering_info.assert_called_with(label_id, 44, 222)
|
||||
|
||||
@mock.patch('time.time')
|
||||
def _test_purge_metering_info(self, current_timestamp, is_empty,
|
||||
mock_time):
|
||||
mock_time.return_value = current_timestamp
|
||||
self.agent.metering_infos = {'fake': {'last_update': 1}}
|
||||
self.config(report_interval=1)
|
||||
|
||||
self.agent._purge_metering_info()
|
||||
self.assertEqual(0 if is_empty else 1, len(self.agent.metering_infos))
|
||||
self.assertEqual(1, mock_time.call_count)
|
||||
|
||||
def test_purge_metering_info(self):
|
||||
# 1 < 2 - 1 -> False
|
||||
self._test_purge_metering_info(2, False)
|
||||
|
||||
def test_purge_metering_info_delete(self):
|
||||
# 1 < 3 - 1 -> False
|
||||
self._test_purge_metering_info(3, True)
|
||||
|
||||
@mock.patch('time.time')
|
||||
def _test_add_metering_info(self, expected_info, current_timestamp,
|
||||
mock_time):
|
||||
mock_time.return_value = current_timestamp
|
||||
actual_info = self.agent._add_metering_info('fake_label_id', 1, 1)
|
||||
self.assertEqual(1, len(self.agent.metering_infos))
|
||||
self.assertEqual(expected_info, actual_info)
|
||||
self.assertEqual(expected_info,
|
||||
self.agent.metering_infos['fake_label_id'])
|
||||
self.assertEqual(1, mock_time.call_count)
|
||||
|
||||
def test_add_metering_info_create(self):
|
||||
expected_info = {'bytes': 1, 'pkts': 1, 'time': 0, 'first_update': 1,
|
||||
'last_update': 1}
|
||||
self._test_add_metering_info(expected_info, 1)
|
||||
|
||||
def test_add_metering_info_update(self):
|
||||
expected_info = {'bytes': 1, 'pkts': 1, 'time': 0, 'first_update': 1,
|
||||
'last_update': 1}
|
||||
self.agent.metering_infos = {'fake_label_id': expected_info}
|
||||
expected_info.update({'bytes': 2, 'pkts': 2, 'time': 1,
|
||||
'last_update': 2})
|
||||
self._test_add_metering_info(expected_info, 2)
|
||||
|
||||
|
||||
class TestMeteringDriver(base.BaseTestCase):
|
||||
def setUp(self):
|
||||
|
|
Loading…
Reference in New Issue