def get_fs_backup_interval_min(self): """Get minimum backup interval.""" return ScheduleParser.parse_timedelta( BusinessHours( self.instance_metadata.get_tags() ).min )
def test_should_run_full_backup(self): """Test should_run_full_backup""" sample_data = ("bkp_fs_schedule:" "mo:111111 111000 000000 011111, " "tu:111111 111000 000000 011111, " "we:111111 111000 000000 011111, " "th:111111 111000 000000 011111, " "fr:111111 111000 000000 011111, " "sa:111111 111111 111111 111111, " "su:111111 111111 111111 111111, " "min:1d, " "max:3d") business_hours = BusinessHours.parse_tag_str(sample_data) db_backup_interval_min = ScheduleParser.parse_timedelta("24h") db_backup_interval_max = ScheduleParser.parse_timedelta("3d") five_day_backup = "20180601_010000" two_day_backup = "20180604_010000" same_day_backup = "20180606_010000" during_business_hours = "20180606_150000" outside_business_hours = "20180606_220000" # Forced self.assertTrue( self.agent.should_run_full_backup( now_time=during_business_hours, force=True, latest_full_backup_timestamp=same_day_backup, business_hours=business_hours, db_backup_interval_min=db_backup_interval_min, db_backup_interval_max=db_backup_interval_max)) # Forced self.assertTrue( self.agent.should_run_full_backup( now_time=during_business_hours, force=True, latest_full_backup_timestamp=two_day_backup, business_hours=business_hours, db_backup_interval_min=db_backup_interval_min, db_backup_interval_max=db_backup_interval_max)) # Forced self.assertTrue( self.agent.should_run_full_backup( now_time=during_business_hours, force=True, latest_full_backup_timestamp=five_day_backup, business_hours=business_hours, db_backup_interval_min=db_backup_interval_min, db_backup_interval_max=db_backup_interval_max)) # respecting business hours, and not needed anyway self.assertFalse( self.agent.should_run_full_backup( now_time=during_business_hours, force=False, latest_full_backup_timestamp=same_day_backup, business_hours=business_hours, db_backup_interval_min=db_backup_interval_min, db_backup_interval_max=db_backup_interval_max)) # respecting business hours self.assertFalse( self.agent.should_run_full_backup( now_time=during_business_hours, force=False, latest_full_backup_timestamp=two_day_backup, business_hours=business_hours, db_backup_interval_min=db_backup_interval_min, db_backup_interval_max=db_backup_interval_max)) # a really old backup, so we ignore business hours self.assertTrue( self.agent.should_run_full_backup( now_time=during_business_hours, force=False, latest_full_backup_timestamp=five_day_backup, business_hours=business_hours, db_backup_interval_min=db_backup_interval_min, db_backup_interval_max=db_backup_interval_max)) # outside_business_hours, but same_day_backup, so no backup self.assertFalse( self.agent.should_run_full_backup( now_time=outside_business_hours, force=False, latest_full_backup_timestamp=same_day_backup, business_hours=business_hours, db_backup_interval_min=db_backup_interval_min, db_backup_interval_max=db_backup_interval_max)) # outside_business_hours and need to backup self.assertTrue( self.agent.should_run_full_backup( now_time=outside_business_hours, force=False, latest_full_backup_timestamp=two_day_backup, business_hours=business_hours, db_backup_interval_min=db_backup_interval_min, db_backup_interval_max=db_backup_interval_max)) # a really old backup self.assertTrue( self.agent.should_run_full_backup( now_time=outside_business_hours, force=False, latest_full_backup_timestamp=five_day_backup, business_hours=business_hours, db_backup_interval_min=db_backup_interval_min, db_backup_interval_max=db_backup_interval_max)) # Forced self.assertTrue( self.agent.should_run_full_backup( now_time=outside_business_hours, force=True, latest_full_backup_timestamp=same_day_backup, business_hours=business_hours, db_backup_interval_min=db_backup_interval_min, db_backup_interval_max=db_backup_interval_max)) # Forced self.assertTrue( self.agent.should_run_full_backup( now_time=outside_business_hours, force=True, latest_full_backup_timestamp=two_day_backup, business_hours=business_hours, db_backup_interval_min=db_backup_interval_min, db_backup_interval_max=db_backup_interval_max)) # Forced self.assertTrue( self.agent.should_run_full_backup( now_time=outside_business_hours, force=True, latest_full_backup_timestamp=five_day_backup, business_hours=business_hours, db_backup_interval_min=db_backup_interval_min, db_backup_interval_max=db_backup_interval_max))
def get_business_hours(self): """Get business hours.""" return BusinessHours( self.instance_metadata.get_tags() )