diff --git a/azurelinuxagent/ga/update.py b/azurelinuxagent/ga/update.py index 889fae0..58e16d9 100644 --- a/azurelinuxagent/ga/update.py +++ b/azurelinuxagent/ga/update.py @@ -96,7 +96,7 @@ class UpdateHandler(object): self.agents = [] - self.child = None + self.child_process = None self.signal_handler = None def run_latest(self): @@ -114,7 +114,7 @@ class UpdateHandler(object): agent_dir = latest_agent.get_agent_dir() agent_name = latest_agent.name - if self.child is not None: + if self.child_process is not None: raise Exception("Illegal attempt to launch multiple child processes") try: @@ -126,9 +126,13 @@ class UpdateHandler(object): if cmds[0].lower() == "python": cmds[0] = get_python_cmd() - child = subprocess.Popen(cmds, cwd=agent_dir, stdout=sys.stdout, stderr=sys.stderr) + self.child_process = subprocess.Popen( + cmds, + cwd=agent_dir, + stdout=sys.stdout, + stderr=sys.stderr) - ret = child.wait() + ret = self.child_process.wait() if ret == None: ret = 1 if ret != 0: @@ -169,13 +173,14 @@ class UpdateHandler(object): return def forward_signal(self, signum, frame): - if self.child is None: + if self.child_process is None: return if signum is signal.SIGTERM: - self.child.send_signal(signal.SIGTERM) + self.child_process.send_signal(signal.SIGTERM) if self.signal_handler is not None: + if not self.signal_handler in (signal.SIG_IGN, signal.SIG_DFL): self.signal_handler(signum, frame) return diff --git a/tests/ga/test_update.py b/tests/ga/test_update.py index 8d32d06..ac577a0 100644 --- a/tests/ga/test_update.py +++ b/tests/ga/test_update.py @@ -736,34 +736,42 @@ class TestUpdate(UpdateTestCase): shutil.rmtree(tempdir, True) return - def test_run_latest_marks_failures(self): + def test_run_latest_nonzero_code_marks_failures(self): # logger.add_logger_appender(logger.AppenderType.STDOUT) self.prepare_agents() - + latest_agent = self.update_handler.get_latest_agent() self.assertTrue(latest_agent.is_available) self.assertEqual(None, latest_agent.error.last_failure) self.assertEqual(0, latest_agent.error.failure_count) - # Any non-zero return code marks a failure self._test_run_latest(return_value=1) self.assertTrue(latest_agent.is_available) self.assertNotEqual(None, latest_agent.error.last_failure) self.assertEqual(1, latest_agent.error.failure_count) + return + + def test_run_latest_missing_code_marks_failures(self): + # logger.add_logger_appender(logger.AppenderType.STDOUT) + self.prepare_agents() + + latest_agent = self.update_handler.get_latest_agent() + self.assertTrue(latest_agent.is_available) + self.assertEqual(None, latest_agent.error.last_failure) + self.assertEqual(0, latest_agent.error.failure_count) - # Absence of a return code marks a failure self._test_run_latest(return_value=None) self.assertTrue(latest_agent.is_available) self.assertNotEqual(None, latest_agent.error.last_failure) - self.assertEqual(2, latest_agent.error.failure_count) + self.assertEqual(1, latest_agent.error.failure_count) return def test_run_latest_exception_blacklists(self): # logger.add_logger_appender(logger.AppenderType.STDOUT) self.prepare_agents() - + latest_agent = self.update_handler.get_latest_agent() self.assertTrue(latest_agent.is_available) self.assertEqual(None, latest_agent.error.last_failure)