18dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard#!/usr/bin/python 28dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard 38dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showardimport common 48dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showardimport logging, unittest 58dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showardfrom autotest_lib.frontend import setup_django_environment 68dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showardfrom autotest_lib.database import database_connection 78dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showardfrom autotest_lib.frontend.afe import frontend_test_utils, models 8e0493a4af57c1a73376a7bafaed542c01f588196Eric Lifrom autotest_lib.scheduler import monitor_db_cleanup, scheduler_config 98dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showardfrom autotest_lib.client.common_lib import host_protections 108dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard 118dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showardclass UserCleanupTest(unittest.TestCase, frontend_test_utils.FrontendTestMixin): 128dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard def setUp(self): 138dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard logging.basicConfig(level=logging.DEBUG) 148dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self._frontend_common_setup() 158dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self._database = ( 168dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard database_connection.DatabaseConnection.get_test_database()) 178dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self._database.connect(db_type='django') 188dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self.cleanup = monitor_db_cleanup.UserCleanup(self._database, 1) 198dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard 208dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard 218dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard def tearDown(self): 228dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self._frontend_common_teardown() 238dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard 248dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard 258dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard def test_reverify_dead_hosts(self): 26e0493a4af57c1a73376a7bafaed542c01f588196Eric Li # unlimited reverifies 27e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.god.stub_with(scheduler_config.config, 28e0493a4af57c1a73376a7bafaed542c01f588196Eric Li 'reverify_max_hosts_at_once', 0) 298dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard for i in (0, 1, 2): 308dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self.hosts[i].status = models.Host.Status.REPAIR_FAILED 318dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self.hosts[i].save() 328dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard 338dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self.hosts[1].locked = True 348dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self.hosts[1].save() 358dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard 368dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self.hosts[2].protection = host_protections.Protection.DO_NOT_VERIFY 378dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self.hosts[2].save() 388dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard 398dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self.god.stub_with(self.cleanup, '_should_reverify_hosts_now', 408dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard lambda : True) 418dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self.cleanup._reverify_dead_hosts() 428dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard 438dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard tasks = models.SpecialTask.objects.all() 448dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self.assertEquals(len(tasks), 1) 458dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self.assertEquals(tasks[0].host.id, 1) 468dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard self.assertEquals(tasks[0].task, models.SpecialTask.Task.VERIFY) 478dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard 488dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard 49e0493a4af57c1a73376a7bafaed542c01f588196Eric Li def test_reverify_dead_hosts_limits(self): 50e0493a4af57c1a73376a7bafaed542c01f588196Eric Li # limit the number of reverifies 51e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.assertTrue(hasattr(scheduler_config.config, 52e0493a4af57c1a73376a7bafaed542c01f588196Eric Li 'reverify_max_hosts_at_once')) 53e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.god.stub_with(scheduler_config.config, 54e0493a4af57c1a73376a7bafaed542c01f588196Eric Li 'reverify_max_hosts_at_once', 2) 55e0493a4af57c1a73376a7bafaed542c01f588196Eric Li for i in (0, 1, 2, 3, 4, 5): 56e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.hosts[i].status = models.Host.Status.REPAIR_FAILED 57e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.hosts[i].save() 58e0493a4af57c1a73376a7bafaed542c01f588196Eric Li 59e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.hosts[1].locked = True 60e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.hosts[1].save() 61e0493a4af57c1a73376a7bafaed542c01f588196Eric Li 62e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.hosts[2].protection = host_protections.Protection.DO_NOT_VERIFY 63e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.hosts[2].save() 64e0493a4af57c1a73376a7bafaed542c01f588196Eric Li 65e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.god.stub_with(self.cleanup, '_should_reverify_hosts_now', 66e0493a4af57c1a73376a7bafaed542c01f588196Eric Li lambda : True) 67e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.cleanup._reverify_dead_hosts() 68e0493a4af57c1a73376a7bafaed542c01f588196Eric Li 69e0493a4af57c1a73376a7bafaed542c01f588196Eric Li tasks = models.SpecialTask.objects.all() 70e0493a4af57c1a73376a7bafaed542c01f588196Eric Li # four hosts need reverifying but our max limit was set to 2 71e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.assertEquals(len(tasks), 2) 72e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.assertTrue(tasks[0].host.id in (1, 4, 5, 6)) 73e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.assertTrue(tasks[1].host.id in (1, 4, 5, 6)) 74e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.assertEquals(tasks[0].task, models.SpecialTask.Task.VERIFY) 75e0493a4af57c1a73376a7bafaed542c01f588196Eric Li self.assertEquals(tasks[1].task, models.SpecialTask.Task.VERIFY) 76e0493a4af57c1a73376a7bafaed542c01f588196Eric Li 77e0493a4af57c1a73376a7bafaed542c01f588196Eric Li 788dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showardif __name__ == '__main__': 798dbd05aa0a62a0b17bf4b19131250a8f6cfccf02showard unittest.main() 80