def test_defaults(self): rm = RecoveryManager() self.assertFalse(rm.enabled()) self.assertEqual(None, rm.get_install_command("NODEMANAGER")) self.assertEqual(None, rm.get_start_command("NODEMANAGER")) rm.update_current_status("NODEMANAGER", "INSTALLED") rm.update_desired_status("NODEMANAGER", "STARTED") self.assertFalse(rm.requires_recovery("NODEMANAGER"))
def test_defaults(self): rm = RecoveryManager(tempfile.mktemp()) self.assertFalse(rm.enabled()) self.assertEqual(None, rm.get_install_command("NODEMANAGER")) self.assertEqual(None, rm.get_start_command("NODEMANAGER")) rm.update_current_status("NODEMANAGER", "INSTALLED") rm.update_desired_status("NODEMANAGER", "STARTED") self.assertFalse(rm.requires_recovery("NODEMANAGER")) pass
def test_sliding_window(self, time_mock): time_mock.side_effect = \ [1000, 1001, 1002, 1003, 1004, 1071, 1150, 1151, 1152, 1153, 1400, 1401, 1500, 1571, 1572, 1653, 1900, 1971, 2300, 2301] rm = RecoveryManager(tempfile.mktemp(), True, False) self.assertTrue(rm.enabled()) config = rm.update_config(0, 60, 5, 12, True, False, "") self.assertFalse(rm.enabled()) rm.update_config(6, 60, 5, 12, True, False, "") self.assertTrue(rm.enabled()) rm.update_config(6, 0, 5, 12, True, False, "") self.assertFalse(rm.enabled()) rm.update_config(6, 60, 0, 12, True, False, "") self.assertFalse(rm.enabled()) rm.update_config(6, 60, 1, 12, True, False, None) self.assertTrue(rm.enabled()) rm.update_config(6, 60, 61, 12, True, False, None) self.assertFalse(rm.enabled()) rm.update_config(6, 60, 5, 4, True, False, "") self.assertFalse(rm.enabled()) # maximum 2 in 2 minutes and at least 1 minute wait rm.update_config(2, 5, 1, 4, True, False, "") self.assertTrue(rm.enabled()) # T = 1000-2 self.assertTrue(rm.may_execute("NODEMANAGER")) self.assertTrue(rm.may_execute("NODEMANAGER")) self.assertTrue(rm.may_execute("NODEMANAGER")) # T = 1003-4 self.assertTrue(rm.execute("NODEMANAGER")) self.assertFalse(rm.execute("NODEMANAGER")) # too soon # T = 1071 self.assertTrue(rm.execute("NODEMANAGER")) # 60+ seconds passed # T = 1150-3 self.assertFalse(rm.execute("NODEMANAGER")) # limit 2 exceeded self.assertFalse(rm.may_execute("NODEMANAGER")) self.assertTrue(rm.execute("DATANODE")) self.assertTrue(rm.may_execute("NAMENODE")) # T = 1400-1 self.assertTrue(rm.execute("NODEMANAGER")) # windows reset self.assertFalse(rm.may_execute("NODEMANAGER")) # too soon # maximum 2 in 2 minutes and no min wait rm.update_config(2, 5, 1, 5, True, True, "") # T = 1500-3 self.assertTrue(rm.execute("NODEMANAGER2")) self.assertTrue(rm.may_execute("NODEMANAGER2")) self.assertTrue(rm.execute("NODEMANAGER2")) self.assertFalse(rm.execute("NODEMANAGER2")) # max limit # T = 1900-2 self.assertTrue(rm.execute("NODEMANAGER2")) self.assertTrue(rm.execute("NODEMANAGER2")) # T = 2300-2 # lifetime max reached self.assertTrue(rm.execute("NODEMANAGER2")) self.assertFalse(rm.execute("NODEMANAGER2")) pass
def test_sliding_window(self, time_mock): time_mock.side_effect = \ [1000, 1001, 1002, 1003, 1004, 1071, 1150, 1151, 1152, 1153, 1400, 1401, 1500, 1571, 1572, 1653, 1900, 1971, 2300, 2301] rm = RecoveryManager(tempfile.mktemp(), True, False) self.assertTrue(rm.enabled()) rm.update_config(0, 60, 5, 12, True, False, "", "") self.assertFalse(rm.enabled()) rm.update_config(6, 60, 5, 12, True, False, "", "") self.assertTrue(rm.enabled()) rm.update_config(6, 0, 5, 12, True, False, "", "") self.assertFalse(rm.enabled()) rm.update_config(6, 60, 0, 12, True, False, "", "") self.assertFalse(rm.enabled()) rm.update_config(6, 60, 1, 12, True, False, None, None) self.assertTrue(rm.enabled()) rm.update_config(6, 60, 61, 12, True, False, "", None) self.assertFalse(rm.enabled()) rm.update_config(6, 60, 5, 0, True, False, None, "") self.assertFalse(rm.enabled()) rm.update_config(6, 60, 5, 4, True, False, "", "") self.assertFalse(rm.enabled()) # maximum 2 in 2 minutes and at least 1 minute wait rm.update_config(2, 5, 1, 4, True, False, "", "") self.assertTrue(rm.enabled()) # T = 1000-2 self.assertTrue(rm.may_execute("NODEMANAGER")) self.assertTrue(rm.may_execute("NODEMANAGER")) self.assertTrue(rm.may_execute("NODEMANAGER")) # T = 1003-4 self.assertTrue(rm.execute("NODEMANAGER")) self.assertFalse(rm.execute("NODEMANAGER")) # too soon # T = 1071 self.assertTrue(rm.execute("NODEMANAGER")) # 60+ seconds passed # T = 1150-3 self.assertFalse(rm.execute("NODEMANAGER")) # limit 2 exceeded self.assertFalse(rm.may_execute("NODEMANAGER")) self.assertTrue(rm.execute("DATANODE")) self.assertTrue(rm.may_execute("NAMENODE")) # T = 1400-1 self.assertTrue(rm.execute("NODEMANAGER")) # windows reset self.assertFalse(rm.may_execute("NODEMANAGER")) # too soon # maximum 2 in 2 minutes and no min wait rm.update_config(2, 5, 1, 5, True, True, "", "") # T = 1500-3 self.assertTrue(rm.execute("NODEMANAGER2")) self.assertTrue(rm.may_execute("NODEMANAGER2")) self.assertTrue(rm.execute("NODEMANAGER2")) self.assertFalse(rm.execute("NODEMANAGER2")) # max limit # T = 1900-2 self.assertTrue(rm.execute("NODEMANAGER2")) self.assertTrue(rm.execute("NODEMANAGER2")) # T = 2300-2 # lifetime max reached self.assertTrue(rm.execute("NODEMANAGER2")) self.assertFalse(rm.execute("NODEMANAGER2")) pass