Пример #1
0
class WatchdogVirtConsoleLogTest(TestHelper):
    def setUp(self):
        with session.begin():
            self.recipe = data_setup.create_recipe()
            job = data_setup.create_job_for_recipes([self.recipe])
            self.addCleanup(self.cleanup_job, job)
            data_setup.mark_recipe_running(self.recipe, virt=True, lab_controller=self.get_lc())
            self.cached_console_log = os.path.join(get_conf().get('CACHEPATH'),
                                                   'recipes',
                                                   str(self.recipe.id // 1000) + '+',
                                                   str(self.recipe.id), 'console.log')
        self.watchdog = Watchdog()
        self.monitor = Monitor({'recipe_id': self.recipe.id, 'is_virt_recipe': True}, self.watchdog)

    # https://bugzilla.redhat.com/show_bug.cgi?id=950903
    @patch.object(ProxyHelper, 'get_console_log')
    def test_stores_virt_console_logs(self, test_get_console_log):
        # set return value since we did not configure the OpenStack Identity APIs
        test_get_console_log.return_value = 'foo'
        self.monitor.run()
        self.assert_(self.check_console_log_registered())
        self.assert_(self.check_cached_log_contents('foo'))

    # https://bugzilla.redhat.com/show_bug.cgi?id=1504527
    @patch.object(ProxyHelper, 'get_console_log')
    def test_handles_non_ascii_characters_in_openstack_console(self, test_get_console_log):
        # OpenStack converts any non-ASCII bytes to U+FFFD.
        # Hence this two-byte UTF-8 sequence for U+00AE becomes U+FFFD U+FFFD.
        log_contents = u'Firmware for Intel\ufffd\ufffd Wireless 5150 A/G/N network adaptors\n'
        test_get_console_log.return_value = log_contents
        self.monitor.run()
        self.assert_(self.check_console_log_registered())
        self.assertEquals(open(self.cached_console_log).read().decode('utf8'), log_contents)
Пример #2
0
 def setUp(self):
     with session.begin():
         self.recipe = data_setup.create_recipe()
         job = data_setup.create_job_for_recipes([self.recipe])
         self.addCleanup(self.cleanup_job, job)
         data_setup.mark_recipe_running(self.recipe, virt=True, lab_controller=self.get_lc())
         self.cached_console_log = os.path.join(get_conf().get('CACHEPATH'),
                                                'recipes',
                                                str(self.recipe.id // 1000) + '+',
                                                str(self.recipe.id), 'console.log')
     self.watchdog = Watchdog()
     self.monitor = Monitor({'recipe_id': self.recipe.id, 'is_virt_recipe': True}, self.watchdog)
Пример #3
0
    def spawn_monitor(self, watchdog):
        monitor = Monitor(watchdog, self)
        greenlet = gevent.spawn(run_monitor, monitor)
        self.monitor_greenlets[watchdog['recipe_id']] = greenlet

        def completion_callback(greenlet):
            if greenlet.exception:
                logger.error('Monitor greenlet %r had unhandled exception: %r',
                             greenlet, greenlet.exception)
            del self.monitor_greenlets[watchdog['recipe_id']]

        greenlet.link(completion_callback)
Пример #4
0
    def setUp(self):
        with session.begin():
            self.system = data_setup.create_system(
                lab_controller=self.get_lc())
            self.recipe = data_setup.create_recipe()
            self.guest_recipe = data_setup.create_guestrecipe(self.recipe)
            job = data_setup.create_job_for_recipes(
                [self.recipe, self.guest_recipe])
            self.addCleanup(self.cleanup_job, job)

            data_setup.mark_recipe_running(self.recipe, system=self.system)
            data_setup.mark_recipe_installing(self.guest_recipe,
                                              system=self.system)

            self.console_log = os.path.join(get_conf().get('CONSOLE_LOGS'),
                                            self.system.fqdn)
            self.cached_console_log = os.path.join(
                get_conf().get('CACHEPATH'), 'recipes',
                str(self.recipe.id // 1000) + '+', str(self.recipe.id),
                'console.log')
        self.first_line = 'Here is the first line of the log file.\n'
        open(self.console_log, 'w').write(self.first_line)

        self.watchdog = Watchdog()

        self.monitor = Monitor(
            {
                'recipe_id': self.recipe.id,
                'is_virt_recipe': False,
                'system': self.system.fqdn
            }, self.watchdog)
        self.monitor_guest = Monitor(
            {
                'recipe_id': self.guest_recipe.id,
                'is_virt_recipe': False,
                'system': None
            }, self.watchdog)