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)
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)
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)
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)