Purge recorder data by default (#12271)
This commit is contained in:
parent
219ed7331c
commit
247edf1b69
5 changed files with 63 additions and 48 deletions
|
@ -16,9 +16,8 @@ class TestRecorderPurge(unittest.TestCase):
|
|||
|
||||
def setUp(self): # pylint: disable=invalid-name
|
||||
"""Setup things to be run when tests are started."""
|
||||
config = {'purge_keep_days': 4, 'purge_interval': 2}
|
||||
self.hass = get_test_home_assistant()
|
||||
init_recorder_component(self.hass, config)
|
||||
init_recorder_component(self.hass)
|
||||
self.hass.start()
|
||||
|
||||
def tearDown(self): # pylint: disable=invalid-name
|
||||
|
@ -29,14 +28,18 @@ class TestRecorderPurge(unittest.TestCase):
|
|||
"""Add multiple states to the db for testing."""
|
||||
now = datetime.now()
|
||||
five_days_ago = now - timedelta(days=5)
|
||||
eleven_days_ago = now - timedelta(days=11)
|
||||
attributes = {'test_attr': 5, 'test_attr_10': 'nice'}
|
||||
|
||||
self.hass.block_till_done()
|
||||
self.hass.data[DATA_INSTANCE].block_till_done()
|
||||
|
||||
with recorder.session_scope(hass=self.hass) as session:
|
||||
for event_id in range(5):
|
||||
if event_id < 3:
|
||||
for event_id in range(6):
|
||||
if event_id < 2:
|
||||
timestamp = eleven_days_ago
|
||||
state = 'autopurgeme'
|
||||
elif event_id < 4:
|
||||
timestamp = five_days_ago
|
||||
state = 'purgeme'
|
||||
else:
|
||||
|
@ -65,9 +68,9 @@ class TestRecorderPurge(unittest.TestCase):
|
|||
domain='sensor',
|
||||
state='iamprotected',
|
||||
attributes=json.dumps(attributes),
|
||||
last_changed=five_days_ago,
|
||||
last_updated=five_days_ago,
|
||||
created=five_days_ago,
|
||||
last_changed=eleven_days_ago,
|
||||
last_updated=eleven_days_ago,
|
||||
created=eleven_days_ago,
|
||||
event_id=protected_event_id
|
||||
))
|
||||
|
||||
|
@ -75,14 +78,18 @@ class TestRecorderPurge(unittest.TestCase):
|
|||
"""Add a few events for testing."""
|
||||
now = datetime.now()
|
||||
five_days_ago = now - timedelta(days=5)
|
||||
eleven_days_ago = now - timedelta(days=11)
|
||||
event_data = {'test_attr': 5, 'test_attr_10': 'nice'}
|
||||
|
||||
self.hass.block_till_done()
|
||||
self.hass.data[DATA_INSTANCE].block_till_done()
|
||||
|
||||
with recorder.session_scope(hass=self.hass) as session:
|
||||
for event_id in range(5):
|
||||
for event_id in range(6):
|
||||
if event_id < 2:
|
||||
timestamp = eleven_days_ago
|
||||
event_type = 'EVENT_TEST_AUTOPURGE'
|
||||
elif event_id < 4:
|
||||
timestamp = five_days_ago
|
||||
event_type = 'EVENT_TEST_PURGE'
|
||||
else:
|
||||
|
@ -102,8 +109,8 @@ class TestRecorderPurge(unittest.TestCase):
|
|||
event_type='EVENT_TEST_FOR_PROTECTED',
|
||||
event_data=json.dumps(event_data),
|
||||
origin='LOCAL',
|
||||
created=five_days_ago,
|
||||
time_fired=five_days_ago,
|
||||
created=eleven_days_ago,
|
||||
time_fired=eleven_days_ago,
|
||||
)
|
||||
session.add(protected_event)
|
||||
session.flush()
|
||||
|
@ -113,13 +120,13 @@ class TestRecorderPurge(unittest.TestCase):
|
|||
def test_purge_old_states(self):
|
||||
"""Test deleting old states."""
|
||||
self._add_test_states()
|
||||
# make sure we start with 6 states
|
||||
# make sure we start with 7 states
|
||||
with session_scope(hass=self.hass) as session:
|
||||
states = session.query(States)
|
||||
self.assertEqual(states.count(), 6)
|
||||
self.assertEqual(states.count(), 7)
|
||||
|
||||
# run purge_old_data()
|
||||
purge_old_data(self.hass.data[DATA_INSTANCE], 4)
|
||||
purge_old_data(self.hass.data[DATA_INSTANCE], 4, repack=False)
|
||||
|
||||
# we should only have 3 states left after purging
|
||||
self.assertEqual(states.count(), 3)
|
||||
|
@ -131,13 +138,13 @@ class TestRecorderPurge(unittest.TestCase):
|
|||
with session_scope(hass=self.hass) as session:
|
||||
events = session.query(Events).filter(
|
||||
Events.event_type.like("EVENT_TEST%"))
|
||||
self.assertEqual(events.count(), 6)
|
||||
self.assertEqual(events.count(), 7)
|
||||
|
||||
# run purge_old_data()
|
||||
purge_old_data(self.hass.data[DATA_INSTANCE], 4)
|
||||
purge_old_data(self.hass.data[DATA_INSTANCE], 4, repack=False)
|
||||
|
||||
# now we should only have 3 events left
|
||||
self.assertEqual(events.count(), 3)
|
||||
# no state to protect, now we should only have 2 events left
|
||||
self.assertEqual(events.count(), 2)
|
||||
|
||||
def test_purge_method(self):
|
||||
"""Test purge method."""
|
||||
|
@ -148,24 +155,24 @@ class TestRecorderPurge(unittest.TestCase):
|
|||
# make sure we start with 6 states
|
||||
with session_scope(hass=self.hass) as session:
|
||||
states = session.query(States)
|
||||
self.assertEqual(states.count(), 6)
|
||||
self.assertEqual(states.count(), 7)
|
||||
|
||||
events = session.query(Events).filter(
|
||||
Events.event_type.like("EVENT_TEST%"))
|
||||
self.assertEqual(events.count(), 6)
|
||||
self.assertEqual(events.count(), 7)
|
||||
|
||||
self.hass.data[DATA_INSTANCE].block_till_done()
|
||||
|
||||
# run purge method - no service data, should not work
|
||||
# run purge method - no service data, use defaults
|
||||
self.hass.services.call('recorder', 'purge')
|
||||
self.hass.async_block_till_done()
|
||||
|
||||
# Small wait for recorder thread
|
||||
self.hass.data[DATA_INSTANCE].block_till_done()
|
||||
|
||||
# we should still have everything from before
|
||||
self.assertEqual(states.count(), 6)
|
||||
self.assertEqual(events.count(), 6)
|
||||
# only purged old events
|
||||
self.assertEqual(states.count(), 5)
|
||||
self.assertEqual(events.count(), 5)
|
||||
|
||||
# run purge method - correct service data
|
||||
self.hass.services.call('recorder', 'purge',
|
||||
|
@ -182,11 +189,20 @@ class TestRecorderPurge(unittest.TestCase):
|
|||
self.assertTrue('iamprotected' in (
|
||||
state.state for state in states))
|
||||
|
||||
# now we should only have 4 events left
|
||||
self.assertEqual(events.count(), 4)
|
||||
# now we should only have 3 events left
|
||||
self.assertEqual(events.count(), 3)
|
||||
|
||||
# and the protected event is among them
|
||||
self.assertTrue('EVENT_TEST_FOR_PROTECTED' in (
|
||||
event.event_type for event in events.all()))
|
||||
self.assertFalse('EVENT_TEST_PURGE' in (
|
||||
event.event_type for event in events.all()))
|
||||
|
||||
# run purge method - correct service data, with repack
|
||||
service_data['repack'] = True
|
||||
self.assertFalse(self.hass.data[DATA_INSTANCE].did_vacuum)
|
||||
self.hass.services.call('recorder', 'purge',
|
||||
service_data=service_data)
|
||||
self.hass.async_block_till_done()
|
||||
self.hass.data[DATA_INSTANCE].block_till_done()
|
||||
self.assertTrue(self.hass.data[DATA_INSTANCE].did_vacuum)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue