Ejemplo n.º 1
0
    def test_write_agent_disabled(self):
        """
        Test writing disable_agent is empty
        """
        from azurelinuxagent.pa.provision.default import ProvisionHandler

        disable_file_path = get_disable_agent_file_path(self.conf)
        self.assertFalse(os.path.exists(disable_file_path))
        ProvisionHandler.write_agent_disabled()
        self.assertTrue(os.path.exists(disable_file_path))
        self.assertEqual('', fileutil.read_file(disable_file_path))
Ejemplo n.º 2
0
    def test_write_agent_disabled(self):
        """
        Test writing disable_agent is empty
        """
        from azurelinuxagent.pa.provision.default import ProvisionHandler

        disable_file_path = get_disable_agent_file_path(self.conf)
        self.assertFalse(os.path.exists(disable_file_path))
        ProvisionHandler.write_agent_disabled()
        self.assertTrue(os.path.exists(disable_file_path))
        self.assertEqual('', fileutil.read_file(disable_file_path))
Ejemplo n.º 3
0
    def test_is_provisioned_not_deprovisioned(self,
            mock_deprovision, mock_read, mock_isfile):

        ph = ProvisionHandler()
        ph.osutil = Mock()
        ph.write_provisioned = Mock()

        deprovision_handler = Mock()
        mock_deprovision.return_value = deprovision_handler

        self.assertTrue(ph.is_provisioned())
        deprovision_handler.run_changed_unique_id.assert_called_once()
Ejemplo n.º 4
0
    def test_is_provisioned_not_deprovisioned(self, mock_deprovision,
                                              mock_read, mock_isfile):

        ph = ProvisionHandler()
        ph.osutil = Mock()
        ph.write_provisioned = Mock()

        deprovision_handler = Mock()
        mock_deprovision.return_value = deprovision_handler

        self.assertTrue(ph.is_provisioned())
        deprovision_handler.run_changed_unique_id.assert_called_once()
Ejemplo n.º 5
0
    def test_is_provisioned_is_provisioned(self, mock_deprovision, mock_read,
                                           mock_isfile):
        ph = ProvisionHandler()
        ph.osutil = Mock()
        ph.osutil.get_instance_id = \
            Mock(return_value="B9F3C233-9913-9F42-8EB3-BA656DF32502")
        ph.write_provisioned = Mock()

        deprovision_handler = Mock()
        mock_deprovision.return_value = deprovision_handler

        self.assertTrue(ph.is_provisioned())
        deprovision_handler.run_changed_unique_id.assert_not_called()
Ejemplo n.º 6
0
    def test_is_provisioned_is_provisioned(self,
            mock_deprovision, mock_read, mock_isfile):
        ph = ProvisionHandler()
        ph.osutil = Mock()
        ph.osutil.get_instance_id = \
            Mock(return_value="B9F3C233-9913-9F42-8EB3-BA656DF32502")
        ph.write_provisioned = Mock()

        deprovision_handler = Mock()
        mock_deprovision.return_value = deprovision_handler

        self.assertTrue(ph.is_provisioned())
        deprovision_handler.run_changed_unique_id.assert_not_called()
Ejemplo n.º 7
0
    def test_is_provisioned_is_provisioned(self,
            mock_deprovision, mock_read, mock_isfile):

        ph = ProvisionHandler()
        ph.osutil = Mock()
        ph.osutil.is_current_instance_id = Mock(return_value=True)
        ph.write_provisioned = Mock()

        deprovision_handler = Mock()
        mock_deprovision.return_value = deprovision_handler

        self.assertTrue(ph.is_provisioned())
        self.assertEqual(1, ph.osutil.is_current_instance_id.call_count)
        self.assertEqual(0, deprovision_handler.run_changed_unique_id.call_count)
Ejemplo n.º 8
0
    def test_is_provisioned_is_provisioned(self,
            mock_deprovision, mock_read, mock_isfile):

        ph = ProvisionHandler()
        ph.osutil = Mock()
        ph.osutil.is_current_instance_id = Mock(return_value=True)
        ph.write_provisioned = Mock()

        deprovision_handler = Mock()
        mock_deprovision.return_value = deprovision_handler

        self.assertTrue(ph.is_provisioned())
        self.assertEqual(1, ph.osutil.is_current_instance_id.call_count)
        self.assertEqual(0, deprovision_handler.run_changed_unique_id.call_count)
Ejemplo n.º 9
0
    def test_check_provisioned_file_is_provisioned(self, mock_deprovision,
                                                   mock_read, mock_isfile):  # pylint: disable=unused-argument

        ph = ProvisionHandler()  # pylint: disable=invalid-name
        ph.osutil = Mock()
        ph.osutil.is_current_instance_id = Mock(return_value=True)
        ph.write_provisioned = Mock()

        deprovision_handler = Mock()
        mock_deprovision.return_value = deprovision_handler

        self.assertTrue(ph.check_provisioned_file())
        self.assertEqual(1, ph.osutil.is_current_instance_id.call_count)
        self.assertEqual(0,
                         deprovision_handler.run_changed_unique_id.call_count)
Ejemplo n.º 10
0
    def __init__(self, verbose, conf_file_path=None):
        """
        Initialize agent running environment.
        """
        self.conf_file_path = conf_file_path
        self.osutil = get_osutil()

        # Init stdout log
        level = logger.LogLevel.VERBOSE if verbose else logger.LogLevel.INFO
        logger.add_logger_appender(logger.AppenderType.STDOUT, level)

        # Init config
        conf_file_path = self.conf_file_path \
                if self.conf_file_path is not None \
                    else self.osutil.get_agent_conf_file_path()
        conf.load_conf_from_file(conf_file_path)

        # Init log
        verbose = verbose or conf.get_logs_verbose()
        level = logger.LogLevel.VERBOSE if verbose else logger.LogLevel.INFO
        logger.add_logger_appender(logger.AppenderType.FILE,
                                   level,
                                   path=conf.get_agent_log_file())

        # echo the log to /dev/console if the machine will be provisioned
        if conf.get_logs_console() and not ProvisionHandler.is_provisioned():
            self.__add_console_appender(level)

        if event.send_logs_to_telemetry():
            logger.add_logger_appender(logger.AppenderType.TELEMETRY,
                                       logger.LogLevel.WARNING,
                                       path=event.add_log_event)

        ext_log_dir = conf.get_ext_log_dir()
        try:
            if os.path.isfile(ext_log_dir):
                raise Exception("{0} is a file".format(ext_log_dir))
            if not os.path.isdir(ext_log_dir):
                fileutil.mkdir(ext_log_dir, mode=0o755, owner="root")
        except Exception as e:
            logger.error("Exception occurred while creating extension "
                         "log directory {0}: {1}".format(ext_log_dir, e))

        # Init event reporter
        # Note that the reporter is not fully initialized here yet. Some telemetry fields are filled with data
        # originating from the goal state or IMDS, which requires a WireProtocol instance. Once a protocol
        # has been established, those fields must be explicitly initialized using
        # initialize_event_logger_vminfo_common_parameters(). Any events created before that initialization
        # will contain dummy values on those fields.
        event.init_event_status(conf.get_lib_dir())
        event_dir = os.path.join(conf.get_lib_dir(), event.EVENTS_DIRECTORY)
        event.init_event_logger(event_dir)
        event.enable_unhandled_err_dump("WALA")
Ejemplo n.º 11
0
    def test_provisioning_is_skipped_when_not_enabled(self, mock_conf):
        ph = ProvisionHandler()
        ph.osutil = DefaultOSUtil()
        ph.osutil.get_instance_id = Mock(
                        return_value='B9F3C233-9913-9F42-8EB3-BA656DF32502')

        ph.is_provisioned = Mock()
        ph.report_ready = Mock()
        ph.write_provisioned = Mock()

        ph.run()

        ph.is_provisioned.assert_not_called()
        ph.report_ready.assert_called_once()
        ph.write_provisioned.assert_called_once()
Ejemplo n.º 12
0
    def test_provisioning_is_skipped_when_not_enabled(self, mock_conf):  # pylint: disable=unused-argument
        ph = ProvisionHandler()  # pylint: disable=invalid-name
        ph.osutil = DefaultOSUtil()
        ph.osutil.get_instance_id = Mock(
            return_value='B9F3C233-9913-9F42-8EB3-BA656DF32502')

        ph.check_provisioned_file = Mock()
        ph.report_ready = Mock()
        ph.write_provisioned = Mock()

        ph.run()

        self.assertEqual(0, ph.check_provisioned_file.call_count)
        self.assertEqual(1, ph.report_ready.call_count)
        self.assertEqual(1, ph.write_provisioned.call_count)
Ejemplo n.º 13
0
    def test_provisioning_is_skipped_when_not_enabled(self, mock_conf):
        ph = ProvisionHandler()
        ph.osutil = DefaultOSUtil()
        ph.osutil.get_instance_id = Mock(
                        return_value='B9F3C233-9913-9F42-8EB3-BA656DF32502')

        ph.is_provisioned = Mock()
        ph.report_ready = Mock()
        ph.write_provisioned = Mock()

        ph.run()

        self.assertEqual(0, ph.is_provisioned.call_count)
        self.assertEqual(1, ph.report_ready.call_count)
        self.assertEqual(1, ph.write_provisioned.call_count)
Ejemplo n.º 14
0
    def test_daemon_agent_disabled(self, _, patch_run_latest, gpa):
        """
        Agent should provision, then sleep forever when disable_agent is found
        """

        with patch('azurelinuxagent.pa.provision.get_provision_handler',
                   return_value=ProvisionHandler()):
            # file is created by provisioning handler
            self.assertFalse(os.path.exists(
                conf.get_disable_agent_file_path()))
            daemon_handler = get_daemon_handler()

            # we need to assert this thread will sleep forever, so fork it
            daemon = Process(target=daemon_handler.run)
            daemon.start()
            daemon.join(timeout=5)

            self.assertTrue(daemon.is_alive())
            daemon.terminate()

            # disable_agent was written, run_latest was not called
            self.assertTrue(os.path.exists(conf.get_disable_agent_file_path()))
            self.assertEqual(0, patch_run_latest.call_count)
Ejemplo n.º 15
0
    def test_daemon_agent_enabled(self, patch_run_provision, patch_run_latest,
                                  gpa):
        """
        Agent should run normally when no disable_agent is found
        """
        with patch('azurelinuxagent.pa.provision.get_provision_handler',
                   return_value=ProvisionHandler()):
            # DaemonHandler._initialize_telemetry requires communication with WireServer and IMDS; since we
            # are not using telemetry in this test we mock it out
            with patch(
                    'azurelinuxagent.daemon.main.DaemonHandler._initialize_telemetry'
            ):
                self.assertFalse(
                    os.path.exists(conf.get_disable_agent_file_path()))
                daemon_handler = get_daemon_handler()

                def stop_daemon(child_args):
                    daemon_handler.running = False

                patch_run_latest.side_effect = stop_daemon
                daemon_handler.run()

                self.assertEqual(1, patch_run_provision.call_count)
                self.assertEqual(1, patch_run_latest.call_count)
Ejemplo n.º 16
0
class TestDaemon(AgentTestCase):
    @patch("time.sleep")
    def test_daemon_restart(self, mock_sleep):
        # Mock daemon function
        daemon_handler = get_daemon_handler()
        mock_daemon = Mock(side_effect=MockDaemonCall(daemon_handler, 2))
        daemon_handler.daemon = mock_daemon

        daemon_handler.check_pid = Mock()

        daemon_handler.run()

        mock_sleep.assert_any_call(15)
        self.assertEquals(2, daemon_handler.daemon.call_count)

    @patch("time.sleep")
    @patch("azurelinuxagent.daemon.main.conf")
    @patch("azurelinuxagent.daemon.main.sys.exit")
    def test_check_pid(self, mock_exit, mock_conf, _):
        daemon_handler = get_daemon_handler()

        mock_pid_file = os.path.join(self.tmp_dir, "pid")
        mock_conf.get_agent_pid_file_path = Mock(return_value=mock_pid_file)

        daemon_handler.check_pid()
        self.assertTrue(os.path.isfile(mock_pid_file))

        daemon_handler.check_pid()
        mock_exit.assert_any_call(0)

    @patch("azurelinuxagent.daemon.main.DaemonHandler.check_pid")
    @patch("azurelinuxagent.common.conf.get_fips_enabled", return_value=True)
    def test_set_openssl_fips(self, _, __):
        daemon_handler = get_daemon_handler()
        daemon_handler.running = False
        with patch.dict("os.environ"):
            daemon_handler.run()
            self.assertTrue(OPENSSL_FIPS_ENVIRONMENT in os.environ)
            self.assertEqual('1', os.environ[OPENSSL_FIPS_ENVIRONMENT])

    @patch("azurelinuxagent.daemon.main.DaemonHandler.check_pid")
    @patch("azurelinuxagent.common.conf.get_fips_enabled", return_value=False)
    def test_does_not_set_openssl_fips(self, _, __):
        daemon_handler = get_daemon_handler()
        daemon_handler.running = False
        with patch.dict("os.environ"):
            daemon_handler.run()
            self.assertFalse(OPENSSL_FIPS_ENVIRONMENT in os.environ)

    @patch('azurelinuxagent.ga.update.UpdateHandler.run_latest')
    @patch('azurelinuxagent.pa.provision.default.ProvisionHandler.run')
    @patch('azurelinuxagent.pa.provision.get_provision_handler',
           return_value=ProvisionHandler())
    def test_daemon_agent_enabled(self, _, patch_run_provision,
                                  patch_run_latest):
        """
        Agent should run normally when no disable_agent is found
        """

        self.assertFalse(os.path.exists(conf.get_disable_agent_file_path()))
        daemon_handler = get_daemon_handler()

        def stop_daemon(child_args):
            daemon_handler.running = False

        patch_run_latest.side_effect = stop_daemon
        daemon_handler.run()

        self.assertEqual(1, patch_run_provision.call_count)
        self.assertEqual(1, patch_run_latest.call_count)

    @patch('azurelinuxagent.ga.update.UpdateHandler.run_latest',
           side_effect=AgentTestCase.fail)
    @patch('azurelinuxagent.pa.provision.default.ProvisionHandler.run',
           side_effect=ProvisionHandler.write_agent_disabled)
    @patch('azurelinuxagent.pa.provision.get_provision_handler',
           return_value=ProvisionHandler())
    def test_daemon_agent_disabled(self, _, __, patch_run_latest):
        """
        Agent should provision, then sleep forever when disable_agent is found
        """

        # file is created by provisioning handler
        self.assertFalse(os.path.exists(conf.get_disable_agent_file_path()))
        daemon_handler = get_daemon_handler()

        # we need to assert this thread will sleep forever, so fork it
        daemon = Process(target=daemon_handler.run)
        daemon.start()
        daemon.join(timeout=5)

        self.assertTrue(daemon.is_alive())
        daemon.terminate()

        # disable_agent was written, run_latest was not called
        self.assertTrue(os.path.exists(conf.get_disable_agent_file_path()))
        self.assertEqual(0, patch_run_latest.call_count)
Ejemplo n.º 17
0
 def test_is_provisioned_not_provisioned(self, mock_isfile):
     ph = ProvisionHandler()
     self.assertFalse(ph.is_provisioned())
Ejemplo n.º 18
0
 def test_check_provisioned_file_not_provisioned(self, mock_isfile):  # pylint: disable=unused-argument
     ph = ProvisionHandler()  # pylint: disable=invalid-name
     self.assertFalse(ph.check_provisioned_file())
Ejemplo n.º 19
0
    def test_daemon_agent_enabled(self, patch_run_provision, patch_run_latest):
        """
        Agent should run normally when no disable_agent is found
        """
        with patch('azurelinuxagent.pa.provision.get_provision_handler', return_value=ProvisionHandler()):
            self.assertFalse(os.path.exists(conf.get_disable_agent_file_path()))
            daemon_handler = get_daemon_handler()

            def stop_daemon(child_args):
                daemon_handler.running = False

            patch_run_latest.side_effect = stop_daemon
            daemon_handler.run()

            self.assertEqual(1, patch_run_provision.call_count)
            self.assertEqual(1, patch_run_latest.call_count)
Ejemplo n.º 20
0
 def test_is_provisioned_not_provisioned(self, mock_isfile):
     ph = ProvisionHandler()
     self.assertFalse(ph.is_provisioned())