コード例 #1
0
 def test_watchdog_show_non_running_task(self):
     with session.begin():
         r1 = data_setup.create_recipe()
         data_setup.create_job_for_recipes([r1])
         data_setup.mark_recipe_waiting(r1)
     out = run_client(['bkr', 'watchdog-show', '%s' % r1.tasks[0].id])
     self.assertEquals(out, '%s: N/A\n' % r1.tasks[0].id, out)
コード例 #2
0
 def test_unknown_fqdns_dont_appear(self):
     # If we have a recipe where the FQDN is not known (for example 
     # a guest that hasn't finished installing yet), previously it would 
     # appear as the string 'None'. Now it's just not included.
     with session.begin():
         hostrecipe = data_setup.create_recipe(role=u'SERVERS')
         guestrecipe = data_setup.create_guestrecipe(host=hostrecipe,
                 role=u'CLIENTS')
         data_setup.create_job_for_recipes([hostrecipe, guestrecipe])
         system = data_setup.create_system(fqdn=u'host.bz952948',
                 lab_controller=self.lc)
         data_setup.mark_recipe_running(hostrecipe, system=system)
         data_setup.mark_recipe_waiting(guestrecipe)
         self.assertEquals(guestrecipe.resource.fqdn, None)
     self.server.auth.login_password(self.lc.user.user_name, u'logmein')
     self.assertEquals(self.server.recipes.tasks.peer_roles(
             hostrecipe.tasks[0].id),
             {'SERVERS': ['host.bz952948'],
              'STANDALONE': ['host.bz952948'],
              'CLIENTS': []})
     self.assertEquals(self.server.recipes.tasks.peer_roles(
             guestrecipe.tasks[0].id),
             {'SERVERS': ['host.bz952948'],
              'STANDALONE': ['host.bz952948'],
              'CLIENTS': []})
コード例 #3
0
 def test_watchdog_show_non_running_task(self):
     with session.begin():
         r1 = data_setup.create_recipe()
         data_setup.create_job_for_recipes([r1])
         data_setup.mark_recipe_waiting(r1)
     out = run_client(['bkr', 'watchdog-show', '%s' % r1.tasks[0].id])
     self.assertEquals(out, '%s: N/A\n' % r1.tasks[0].id, out)
コード例 #4
0
ファイル: test_systems.py プロジェクト: gnaponie/beaker
    def test_recipe_provisioned(self):
        with session.begin():
            distro_tree = data_setup.create_distro_tree(
                arch=u'x86_64',
                osmajor=u'Fedora20',
                lab_controllers=[self.lc],
                urls=[
                    u'nfs://example.nfs.test:/path/to/os',
                    u'http://example.com/ipxe-test/F20/x86_64/os/'
                ])
            recipe = data_setup.create_recipe(distro_tree=distro_tree)
            data_setup.create_job_for_recipes([recipe])
            data_setup.mark_recipe_waiting(recipe,
                                           virt=True,
                                           lab_controller=self.lc)
        response = requests.get(get_server_base() +
                                'systems/by-uuid/%s/ipxe-script' %
                                recipe.resource.instance_id)
        response.raise_for_status()
        self.assertEquals(
            response.text, """#!ipxe
kernel http://example.com/ipxe-test/F20/x86_64/os/pxeboot/vmlinuz console=tty0 console=ttyS0,115200n8 ks=%s noverifyssl netboot_method=ipxe
initrd http://example.com/ipxe-test/F20/x86_64/os/pxeboot/initrd
boot
""" % recipe.installation.rendered_kickstart.link)
コード例 #5
0
 def test_unknown_fqdns_dont_appear(self):
     # If we have a recipe where the FQDN is not known (for example
     # a guest that hasn't finished installing yet), previously it would
     # appear as the string 'None'. Now it's just not included.
     with session.begin():
         hostrecipe = data_setup.create_recipe(role=u'SERVERS')
         guestrecipe = data_setup.create_guestrecipe(host=hostrecipe,
                                                     role=u'CLIENTS')
         data_setup.create_job_for_recipes([hostrecipe, guestrecipe])
         system = data_setup.create_system(fqdn=u'host.bz952948')
         data_setup.mark_recipe_running(hostrecipe, system=system)
         data_setup.mark_recipe_waiting(guestrecipe)
         self.assertEquals(guestrecipe.resource.fqdn, None)
     self.server.auth.login_password(self.lc.user.user_name, u'logmein')
     self.assertEquals(
         self.server.recipes.tasks.peer_roles(hostrecipe.tasks[0].id), {
             'SERVERS': ['host.bz952948'],
             'STANDALONE': ['host.bz952948'],
             'CLIENTS': []
         })
     self.assertEquals(
         self.server.recipes.tasks.peer_roles(guestrecipe.tasks[0].id), {
             'SERVERS': ['host.bz952948'],
             'STANDALONE': [],
             'CLIENTS': []
         })
コード例 #6
0
ファイル: test_watchdogs.py プロジェクト: sibiaoluo/beaker
 def test_handles_null_recipe_task_id(self):
     with session.begin():
         dt = data_setup.create_distro_tree()
         running_recipe = data_setup.create_recipe(distro_tree=dt)
         waiting_recipe = data_setup.create_recipe(distro_tree=dt)
         job = data_setup.create_job_for_recipes([running_recipe, waiting_recipe])
         data_setup.mark_recipe_running(running_recipe)
         data_setup.mark_recipe_waiting(waiting_recipe)
         self.assertEquals(waiting_recipe.watchdog.recipetask, None)
     b = self.browser
     b.get(get_server_base() + "watchdogs/")
     self.assertEquals(b.title, "Watchdogs")
コード例 #7
0
 def _make_command(lc=None, creation_date=None):
     job = data_setup.create_job(distro_tree=distro_tree)
     recipe = job.recipesets[0].recipes[0]
     system = data_setup.create_system(lab_controller=lc)
     data_setup.mark_recipe_waiting(recipe, system=system)
     command = CommandActivity(
             user=None, service=u'testdata', action=u'on',
             status=CommandStatus.running,
             callback=u'bkr.server.model.auto_cmd_handler')
     if creation_date is not None:
         command.created = command.updated = creation_date
     system.command_queue.append(command)
     return recipe.tasks[0], command
コード例 #8
0
 def test_reserves_system_when_recipe_waiting(self):
     # Anaconda installs the OS (Status: Installing) and reboots
     # beakerd comes along and calls update_dirty_jobs which sets the recipe to: Waiting
     data_setup.mark_recipe_waiting(self.recipe)
     # In the meantime however our task has finished really quickly, which
     # means the min_status is TaskStatus.completed and therefore finished
     data_setup.mark_recipe_tasks_finished(self.recipe, only=True)
     # beakerd hasn't come along and updated our recipe yet, so it's still
     # in waiting
     self.assertEqual(self.recipe.status, TaskStatus.waiting)
     # Now beakerd updates it and should reserve our system
     self.job.update_status()
     self.assertEqual(self.recipe.status, TaskStatus.reserved)
コード例 #9
0
 def test_handles_null_recipe_task_id(self):
     with session.begin():
         dt = data_setup.create_distro_tree()
         running_recipe = data_setup.create_recipe(distro_tree=dt)
         waiting_recipe = data_setup.create_recipe(distro_tree=dt)
         job = data_setup.create_job_for_recipes(
             [running_recipe, waiting_recipe])
         data_setup.mark_recipe_running(running_recipe)
         data_setup.mark_recipe_waiting(waiting_recipe)
         self.assertEquals(waiting_recipe.watchdog.recipetask, None)
     b = self.browser
     b.get(get_server_base() + 'watchdogs/')
     self.assertEquals(b.title, 'Watchdogs')
コード例 #10
0
 def test_reserves_system_when_recipe_waiting(self):
     # Anaconda installs the OS (Status: Installing) and reboots
     # beakerd comes along and calls update_dirty_jobs which sets the recipe to: Waiting
     data_setup.mark_recipe_waiting(self.recipe)
     # In the meantime however our task has finished really quickly, which
     # means the min_status is TaskStatus.completed and therefore finished
     data_setup.mark_recipe_tasks_finished(self.recipe, only=True)
     # beakerd hasn't come along and updated our recipe yet, so it's still
     # in waiting
     self.assertEqual(self.recipe.status, TaskStatus.waiting)
     # Now beakerd updates it and should reserve our system
     self.job.update_status()
     self.assertEqual(self.recipe.status, TaskStatus.reserved)
コード例 #11
0
 def _make_command(lc=None, creation_date=None):
     job = data_setup.create_job(distro_tree=distro_tree)
     recipe = job.recipesets[0].recipes[0]
     system = data_setup.create_system(lab_controller=lc)
     data_setup.mark_recipe_waiting(recipe, system=system)
     command = CommandActivity(
             user=None, service=u'testdata', action=u'on',
             status=CommandStatus.running,
             callback=u'bkr.server.model.auto_cmd_handler')
     if creation_date is not None:
         command.created = command.updated = creation_date
     system.command_queue.append(command)
     return recipe.tasks[0], command
コード例 #12
0
 def test_install_done_preserves_system_resource_fqdn(self):
     with session.begin():
         distro_tree = data_setup.create_distro_tree()
         recipe = data_setup.create_recipe(distro_tree=distro_tree)
         system = data_setup.create_system(lab_controller=self.lc)
         initial_fqdn = system.fqdn
         data_setup.create_job_for_recipes([recipe])
         data_setup.mark_recipe_waiting(recipe, system=system)
         self.assertEqual(recipe.resource.fqdn, initial_fqdn)
     result = self.server.recipes.install_done(recipe.id, 'somename')
     self.assertEqual(result, initial_fqdn)
     with session.begin():
         session.expire(recipe.resource)
         self.assertEqual(recipe.resource.fqdn, initial_fqdn)
コード例 #13
0
ファイル: test_recipes_xmlrpc.py プロジェクト: joyxu/beaker
 def test_install_done_preserves_system_resource_fqdn(self):
     with session.begin():
         distro_tree = data_setup.create_distro_tree()
         recipe = data_setup.create_recipe(distro_tree=distro_tree)
         system = data_setup.create_system(lab_controller=self.lc)
         initial_fqdn = system.fqdn
         data_setup.create_job_for_recipes([recipe])
         data_setup.mark_recipe_waiting(recipe, system=system)
         self.assertEqual(recipe.resource.fqdn, initial_fqdn)
     result = self.server.recipes.install_done(recipe.id, 'somename')
     self.assertEqual(result, initial_fqdn)
     with session.begin():
         session.expire(recipe.resource)
         self.assertEqual(recipe.resource.fqdn, initial_fqdn)
コード例 #14
0
ファイル: test_systems.py プロジェクト: beaker-project/beaker
 def test_recipe_provision_with_custom_distro_and_incompatible_url(self):
     with session.begin():
         recipe = data_setup.create_recipe(custom_distro=True)
         self.assertIsNone(recipe.distro_tree)
         recipe.installation.tree_url = 'nfs://mydistro.dummylab.test:/os/'
         data_setup.create_job_for_recipes([recipe])
         data_setup.mark_recipe_waiting(recipe, virt=True,
                 lab_controller=self.lc)
     response = requests.get(get_server_base() +
             'systems/by-uuid/%s/ipxe-script' % recipe.resource.instance_id)
     self.assertEqual(response.status_code, 404)
     self.assertMultiLineEqual(
         response.text,
         'Given tree URL nfs://mydistro.dummylab.test:/os/ incompatible with iPXE')
コード例 #15
0
ファイル: test_recipes_xmlrpc.py プロジェクト: joyxu/beaker
 def test_install_done_updates_resource_fqdn(self):
     with session.begin():
         distro_tree = data_setup.create_distro_tree()
         recipe = data_setup.create_recipe(distro_tree=distro_tree)
         guestrecipe = data_setup.create_guestrecipe(
             host=recipe, distro_tree=distro_tree)
         data_setup.create_job_for_recipes([recipe, guestrecipe])
         data_setup.mark_recipe_running(recipe)
         data_setup.mark_recipe_waiting(guestrecipe)
     fqdn = 'theguestname'
     result = self.server.recipes.install_done(guestrecipe.id, fqdn)
     self.assertEqual(result, fqdn)
     with session.begin():
         session.expire(guestrecipe.resource)
         self.assertEqual(guestrecipe.resource.fqdn, fqdn)
コード例 #16
0
 def test_reserves_system_when_recipe_waiting(self):
     recipe = data_setup.create_recipe(task_list=[Task.by_name(u"/distribution/utils/dummy")], reservesys=True)
     job = data_setup.create_job_for_recipes([recipe])
     # Anaconda installs the OS (Status: Installing) and reboots
     # beakerd comes along and calls update_dirty_jobs which sets the recipe to: Waiting
     data_setup.mark_recipe_waiting(recipe)
     # In the meantime however our task has finished really quickly, which
     # means the min_status is TaskStatus.completed and therefore finished
     data_setup.mark_recipe_tasks_finished(recipe, only=True)
     # beakerd hasn't come along and updated our recipe yet, so it's still
     # in waiting
     self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.waiting)
     # Now beakerd updates it and should reserve our system
     job.update_status()
     self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved)
コード例 #17
0
 def test_install_start(self):
     with session.begin():
         system = data_setup.create_system(lab_controller=self.lc)
         recipe = data_setup.create_recipe()
         data_setup.create_job_for_recipes([recipe])
         data_setup.mark_recipe_waiting(recipe, system=system)
     self.server.recipes.install_start(recipe.id)
     with session.begin():
         session.expire_all()
         assert_datetime_within(recipe.installation.install_started,
                 tolerance=datetime.timedelta(seconds=10),
                 reference=datetime.datetime.utcnow())
         assert_datetime_within(recipe.watchdog.kill_time,
                 tolerance=datetime.timedelta(seconds=10),
                 reference=datetime.datetime.utcnow() + datetime.timedelta(hours=3))
コード例 #18
0
 def test_install_done_updates_resource_fqdn(self):
     with session.begin():
         distro_tree = data_setup.create_distro_tree()
         recipe = data_setup.create_recipe(distro_tree=distro_tree)
         guestrecipe = data_setup.create_guestrecipe(host=recipe,
                 distro_tree=distro_tree)
         data_setup.create_job_for_recipes([recipe, guestrecipe])
         data_setup.mark_recipe_running(recipe)
         data_setup.mark_recipe_waiting(guestrecipe)
     fqdn = 'theguestname'
     result = self.server.recipes.install_done(guestrecipe.id, fqdn)
     self.assertEqual(result, fqdn)
     with session.begin():
         session.expire(guestrecipe.resource)
         self.assertEqual(guestrecipe.resource.fqdn, fqdn)
コード例 #19
0
ファイル: test_systems.py プロジェクト: beaker-project/beaker
    def test_recipe_provision_with_custom_distro(self):
        with session.begin():
            recipe = data_setup.create_recipe(custom_distro=True)
            self.assertIsNone(recipe.distro_tree)
            recipe.installation.tree_url = 'http://mydistro.dummylab.test/os/'
            data_setup.create_job_for_recipes([recipe])
            data_setup.mark_recipe_waiting(recipe, virt=True,
                    lab_controller=self.lc)
        response = requests.get(get_server_base() +
                'systems/by-uuid/%s/ipxe-script' % recipe.resource.instance_id)
        response.raise_for_status()
        self.assertMultiLineEqual(response.text, """#!ipxe
kernel http://mydistro.dummylab.test/os/pxeboot/vmlinuz console=tty0 console=ttyS0,115200n8 ks=%s noverifyssl netboot_method=ipxe
initrd http://mydistro.dummylab.test/os/pxeboot/initrd
boot
""" % recipe.installation.rendered_kickstart.link)
コード例 #20
0
 def test_install_start(self):
     with session.begin():
         system = data_setup.create_system(lab_controller=self.lc)
         recipe = data_setup.create_recipe()
         data_setup.create_job_for_recipes([recipe])
         data_setup.mark_recipe_waiting(recipe, system=system)
     self.server.auth.login_password(self.lc.user.user_name, u'logmein')
     self.server.recipes.install_start(recipe.id)
     with session.begin():
         session.expire_all()
         assert_datetime_within(recipe.watchdog.kill_time,
                 tolerance=datetime.timedelta(seconds=10),
                 reference=datetime.datetime.utcnow() + datetime.timedelta(hours=3))
         self.assertEqual(recipe.tasks[0].results[0].result, TaskResult.pass_)
         self.assertEqual(recipe.tasks[0].results[0].path, u'/start')
         self.assertEqual(recipe.tasks[0].results[0].log, u'Install Started')
コード例 #21
0
 def test_recipe_provision_with_custom_distro_and_incompatible_url(self):
     with session.begin():
         recipe = data_setup.create_recipe(custom_distro=True)
         self.assertIsNone(recipe.distro_tree)
         recipe.installation.tree_url = 'nfs://mydistro.dummylab.test:/os/'
         data_setup.create_job_for_recipes([recipe])
         data_setup.mark_recipe_waiting(recipe,
                                        virt=True,
                                        lab_controller=self.lc)
     response = requests.get(get_server_base() +
                             'systems/by-uuid/%s/ipxe-script' %
                             recipe.resource.instance_id)
     self.assertEqual(response.status_code, 404)
     self.assertMultiLineEqual(
         response.text,
         'Given tree URL nfs://mydistro.dummylab.test:/os/ incompatible with iPXE'
     )
コード例 #22
0
ファイル: test_systems.py プロジェクト: beaker-project/beaker
 def test_lab_incompatible_URLs(self):
     with session.begin():
         distro_tree = data_setup.create_distro_tree(
             arch=u'x86_64', osmajor=u'Fedora20',
             lab_controllers=[self.lc],
             urls=[u'nfs://example.nfs.test:/path/to/os'])
         recipe = data_setup.create_recipe(distro_tree=distro_tree)
         data_setup.create_job_for_recipes([recipe])
         data_setup.mark_recipe_waiting(recipe, virt=True,
                 lab_controller=self.lc)
     response = requests.get(get_server_base() +
             'systems/by-uuid/%s/ipxe-script' % recipe.resource.instance_id)
     self.assertEqual(response.status_code, 404)
     self.assertMultiLineEqual(
         response.text,
         'Lab lab.ipxescript.httptest does not provide HTTP or FTP URLs for distro tree: %s'
         % distro_tree.id)
コード例 #23
0
    def test_recipe_provision_with_custom_distro(self):
        with session.begin():
            recipe = data_setup.create_recipe(custom_distro=True)
            self.assertIsNone(recipe.distro_tree)
            recipe.installation.tree_url = 'http://mydistro.dummylab.test/os/'
            data_setup.create_job_for_recipes([recipe])
            data_setup.mark_recipe_waiting(recipe,
                                           virt=True,
                                           lab_controller=self.lc)
        response = requests.get(get_server_base() +
                                'systems/by-uuid/%s/ipxe-script' %
                                recipe.resource.instance_id)
        response.raise_for_status()
        self.assertMultiLineEqual(response.text, """#!ipxe
kernel http://mydistro.dummylab.test/os/pxeboot/vmlinuz console=tty0 console=ttyS0,115200n8 inst.ks=%s noverifyssl netboot_method=ipxe
initrd http://mydistro.dummylab.test/os/pxeboot/initrd
boot
""" % recipe.installation.rendered_kickstart.link)  # noqa: E501
コード例 #24
0
ファイル: test_systems.py プロジェクト: ShaolongHu/beaker
    def test_recipe_provisioned(self):
        with session.begin():
            distro_tree = data_setup.create_distro_tree(
                    arch=u'x86_64', osmajor=u'Fedora20',
                    lab_controllers=[self.lc],
                    urls=[u'http://example.com/ipxe-test/F20/x86_64/os/'])
            recipe = data_setup.create_recipe(distro_tree=distro_tree)
            data_setup.create_job_for_recipes([recipe])
            data_setup.mark_recipe_waiting(recipe, virt=True,
                    lab_controller=self.lc)
            recipe.provision()
        response = requests.get(get_server_base() +
                'systems/by-uuid/%s/ipxe-script' % recipe.resource.instance_id)
        response.raise_for_status()
        self.assertEquals(response.text, """#!ipxe
kernel http://example.com/ipxe-test/F20/x86_64/os/pxeboot/vmlinuz console=tty0 console=ttyS0,115200n8 ks=%s noverifyssl netboot_method=ipxe
initrd http://example.com/ipxe-test/F20/x86_64/os/pxeboot/initrd
boot
""" % recipe.rendered_kickstart.link)
コード例 #25
0
 def test_lab_incompatible_URLs(self):
     with session.begin():
         distro_tree = data_setup.create_distro_tree(
             arch=u'x86_64',
             osmajor=u'Fedora20',
             lab_controllers=[self.lc],
             urls=[u'nfs://example.nfs.test:/path/to/os'])
         recipe = data_setup.create_recipe(distro_tree=distro_tree)
         data_setup.create_job_for_recipes([recipe])
         data_setup.mark_recipe_waiting(recipe,
                                        virt=True,
                                        lab_controller=self.lc)
     response = requests.get(get_server_base() +
                             'systems/by-uuid/%s/ipxe-script' %
                             recipe.resource.instance_id)
     self.assertEqual(response.status_code, 404)
     self.assertMultiLineEqual(
         response.text,
         'Lab lab.ipxescript.httptest does not provide HTTP or FTP URLs for distro tree: %s'
         % distro_tree.id)
コード例 #26
0
    def test_install_start_faulty(self):
        s = xmlrpclib.ServerProxy(self.get_proxy_url())

        with session.begin():
            recipe = data_setup.create_recipe()
            data_setup.create_job_for_recipes([recipe])
            data_setup.mark_recipe_waiting(recipe)

        s.install_start(recipe.id)
        with session.begin():
            session.expire_all()
            start1_kill_time = recipe.watchdog.kill_time

        # a buggy second start report
        time.sleep(1)
        s.install_start(recipe.id)
        with session.begin():
            session.expire_all()
            start2_kill_time = recipe.watchdog.kill_time

        self.assertTrue(start1_kill_time == start2_kill_time)
コード例 #27
0
ファイル: test_proxy.py プロジェクト: ShaolongHu/beaker
    def test_install_start_faulty(self):
        s = xmlrpclib.ServerProxy(self.get_proxy_url())

        with session.begin():
            recipe = data_setup.create_recipe()
            data_setup.create_job_for_recipes([recipe])
            data_setup.mark_recipe_waiting(recipe)

        s.install_start(recipe.id)
        with session.begin():
            session.expire_all()
            start1_kill_time = recipe.watchdog.kill_time

        # a buggy second start report
        time.sleep(1)
        s.install_start(recipe.id)
        with session.begin():
            session.expire_all()
            start2_kill_time = recipe.watchdog.kill_time

        self.assertTrue(start1_kill_time == start2_kill_time)
コード例 #28
0
 def setUp(self):
     with session.begin():
         self.recipe = data_setup.create_recipe()
         data_setup.create_job_for_recipes([self.recipe])
         data_setup.mark_recipe_waiting(self.recipe)
コード例 #29
0
ファイル: test_proxy.py プロジェクト: ShaolongHu/beaker
 def setUp(self):
     with session.begin():
         self.recipe = data_setup.create_recipe()
         data_setup.create_job_for_recipes([self.recipe])
         data_setup.mark_recipe_waiting(self.recipe)