Blame test/verify/check-service

Packit Service 0246ed
#!/usr/bin/python3
Packit Service 0246ed
Packit Service 0246ed
# checkpoint:
Packit Service 0246ed
# 1. osbuild-composer.socket can be started and enabled
Packit Service 0246ed
# 2. no blueprint by default and can add and delete blueprint
Packit Service 0246ed
Packit Service 0246ed
import string
Packit Service 0246ed
import random
Packit Service 0246ed
Packit Service 0246ed
import composerlib
Packit Service 0246ed
import testlib
Packit Service 0246ed
Packit Service 0246ed
Packit Service 0246ed
@testlib.nondestructive
Packit Service 0246ed
class TestService(composerlib.ComposerCase):
Packit Service 0246ed
Packit Service 0246ed
    def setUp(self):
Packit Service 0246ed
        # remove all blueprints
Packit Service 0246ed
        # stop and disable osbuild-composer.socket service
Packit Service 0246ed
        super().setUp()
Packit Service 0246ed
Packit Service 0246ed
        self.machine.execute("""
Packit Service 0246ed
            for bp in $(composer-cli blueprints list); do
Packit Service 0246ed
                composer-cli blueprints delete $bp
Packit Service 0246ed
            done
Packit Service 0246ed
            systemctl disable --now osbuild-composer.socket
Packit Service 0246ed
        """)
Packit Service 0246ed
Packit Service 0246ed
    def testBasic(self):
Packit Service 0246ed
        b = self.browser
Packit Service 0246ed
Packit Service 0246ed
        self.login_and_go("/composer", authorized=True)
Packit Service 0246ed
        b.wait_present("#main")
Packit Service 0246ed
Packit Service 0246ed
        # start and enable osbuild-composer from UI
Packit Service 0246ed
        b.click("button:contains('Start')")
Packit Service 0246ed
        # work around .pf-c-empty-state element disappear in one second
Packit Service 0246ed
        b.wait_in_text("#main", "No Blueprints")
Packit Service 0246ed
        b.wait_text(".pf-c-empty-state h1", "No Blueprints")
Packit Service 0246ed
Packit Service 0246ed
        # create blueprint with random name and description
Packit Service 0246ed
        name_template = string.ascii_letters + string.digits + "-" + "_"
Packit Service 0246ed
        bp_name = "".join(random.sample(name_template, 20))
Packit Service 0246ed
        desc_template = string.ascii_letters + string.digits + " "
Packit Service 0246ed
        bp_desc = "".join(random.sample(desc_template, 40))
Packit Service 0246ed
        b.click(".pf-c-empty-state button:contains('Create Blueprint')")
Packit Service 0246ed
        b.wait_present("div[role=dialog] #cmpsr-modal-crt-blueprint")
Packit Service 0246ed
        # blueprint name
Packit Service 0246ed
        b.set_input_text("#textInput-modal-markup", bp_name)
Packit Service 0246ed
        # blueprint description
Packit Service 0246ed
        b.set_input_text("#textInput2-modal-markup", bp_desc)
Packit Service 0246ed
        # create
Packit Service 0246ed
        b.click("#create-blueprint-modal-create-button")
Packit Service 0246ed
        b.wait_not_present("div[role=dialog] #cmpsr-modal-crt-blueprint")
Packit Service 0246ed
Packit Service 0246ed
        # wait for all available compontents visible
Packit Service 0246ed
        with b.wait_timeout(300):
Packit Service 0246ed
            b.wait_present("ul[data-list=inputs]")
Packit Service 0246ed
        # search for openssh-server pacakge
Packit Service 0246ed
        b.set_input_text("#cmpsr-blueprint-input-filter", "openssh-server")
Packit Service 0246ed
        b.key_press("\r")
Packit Service 0246ed
        with b.wait_timeout(120):
Packit Service 0246ed
            b.wait_text("#openssh-server-input", "openssh-server")
Packit Service 0246ed
        # add it to blueprint
Packit Service 0246ed
        b.click("li[data-input=openssh-server] .fa-plus")
Packit Service 0246ed
        # wait for package added
Packit Service 0246ed
        b.wait_present("#blueprint-tabs")
Packit Service 0246ed
        b.wait_present("li[data-component=openssh-server]")
Packit Service 0246ed
        # click commit button
Packit Service 0246ed
        b.click(".cmpsr-header__actions .btn-primary")
Packit Service 0246ed
        # click commit button
Packit Service 0246ed
        b.click("#cmpsr-modal-pending-changes .modal-footer .btn-primary")
Packit Service 0246ed
        b.wait_not_present("#cmpsr-modal-pending-changes")
Packit Service 0246ed
Packit Service 0246ed
        # wait for toast notification dialog
Packit Service 0246ed
        b.wait_present("#cmpsr-toast-committed .pficon-ok")
Packit Service 0246ed
        # click close button
Packit Service 0246ed
        b.click("#cmpsr-toast-committed .pficon-close")
Packit Service 0246ed
        b.wait_not_present("#cmpsr-toast-committed .pficon-ok")
Packit Service 0246ed
Packit Service 0246ed
        # click back to blueprint link
Packit Service 0246ed
        b.click("a:contains('Back to Blueprints')")
Packit Service 0246ed
Packit Service 0246ed
        # new added blueprint should be there with correct name and description
Packit Service 0246ed
        b.wait_visible("li[data-blueprint={}]".format(bp_name))
Packit Service 0246ed
        b.wait_text("#{}-name".format(bp_name), bp_name)
Packit Service 0246ed
        b.wait_text("div[data-description]", bp_desc)
Packit Service 0246ed
Packit Service 0246ed
        # delete blueprint, cancel first
Packit Service 0246ed
        b.click("#{}-kebab".format(bp_name))
Packit Service 0246ed
        b.wait_attr("#{}-kebab".format(bp_name), "aria-expanded", "true")
Packit Service 0246ed
        b.click("ul[aria-labelledby={}-kebab] a:contains('Delete')".format(bp_name))
Packit Service 0246ed
        b.wait_attr("#{}-kebab".format(bp_name), "aria-expanded", "false")
Packit Service 0246ed
        b.click("#cmpsr-modal-delete button:contains('Cancel')")
Packit Service 0246ed
        b.wait_not_present("#cmpsr-modal-delete")
Packit Service 0246ed
        # delete here
Packit Service 0246ed
        b.click("#{}-kebab".format(bp_name))
Packit Service 0246ed
        b.wait_attr("#{}-kebab".format(bp_name), "aria-expanded", "true")
Packit Service 0246ed
        b.click("ul[aria-labelledby={}-kebab] a:contains('Delete')".format(bp_name))
Packit Service 0246ed
        b.wait_attr("#{}-kebab".format(bp_name), "aria-expanded", "false")
Packit Service 0246ed
        b.click("#cmpsr-modal-delete button:contains('Delete')")
Packit Service 0246ed
        b.wait_not_present("#cmpsr-modal-delete")
Packit Service 0246ed
        b.wait_not_present("li[data-blueprint={}]".format(bp_name))
Packit Service 0246ed
        # no blueprint here
Packit Service 0246ed
        b.wait_in_text("#main", "No Blueprints")
Packit Service 0246ed
Packit Service 0246ed
        # collect code coverage result
Packit Service 0246ed
        self.check_coverage()
Packit Service 0246ed
Packit Service 0246ed
    def testNoEnable(self):
Packit Service 0246ed
        b = self.browser
Packit Service 0246ed
        m = self.machine
Packit Service 0246ed
Packit Service 0246ed
        # stop and disable osbuild-composer.socket
Packit Service 0246ed
        m.execute("systemctl disable --now osbuild-composer.socket")
Packit Service 0246ed
Packit Service 0246ed
        self.login_and_go("/composer", authorized=True)
Packit Service 0246ed
        b.wait_present("#main")
Packit Service 0246ed
Packit Service 0246ed
        # do not enable osbuild-composer
Packit Service 0246ed
        b.click(".checkbox input")
Packit Service 0246ed
        # start and enable osbuild-composer from UI
Packit Service 0246ed
        b.click("button:contains('Start')")
Packit Service 0246ed
        # work around .pf-c-empty-state element disappear in one second
Packit Service 0246ed
        b.wait_in_text("#main", "No Blueprints")
Packit Service 0246ed
        b.wait_text(".pf-c-empty-state h1", "No Blueprints")
Packit Service 0246ed
        # osbuild-composer should be disabled
Packit Service 0246ed
        is_enabled = m.execute("systemctl is-enabled osbuild-composer.socket || true").rstrip()
Packit Service 0246ed
        self.assertEqual(is_enabled, "disabled")
Packit Service 0246ed
        # osbuild-composer should be started
Packit Service 0246ed
        is_active = m.execute("systemctl is-active osbuild-composer.socket").rstrip()
Packit Service 0246ed
        self.assertEqual(is_active, "active")
Packit Service 0246ed
Packit Service 0246ed
        # collect code coverage result
Packit Service 0246ed
        self.check_coverage()
Packit Service 0246ed
Packit Service 0246ed
    def testNonAdminUser(self):
Packit Service 0246ed
        b = self.browser
Packit Service 0246ed
        m = self.machine
Packit Service 0246ed
Packit Service 0246ed
        # stop and disable osbuild-composer.socket
Packit Service 0246ed
        m.execute("systemctl disable --now osbuild-composer.socket")
Packit Service 0246ed
Packit Service 0246ed
        self.login_and_go("/composer", authorized=False)
Packit Service 0246ed
        b.wait_present("#main")
Packit Service 0246ed
Packit Service 0246ed
        # Start button can be disabled button or clickable button
Packit Service 0246ed
        b.wait_present("button:contains('Start')")
Packit Service 0246ed
Packit Service 0246ed
        # disable this test due to https://github.com/osbuild/cockpit-composer/issues/941
Packit Service 0246ed
        # if "disabled" not in b.attr("button:contains('Start')", "class"):
Packit Service 0246ed
        #     b.click("button:contains('Start')")
Packit Service 0246ed
        #     # error message
Packit Service 0246ed
        #     b.wait_in_text(".cmpsr-alert-blank-slate", "Not permitted to perform this action.")
Packit Service 0246ed
        #     # Start button still there
Packit Service 0246ed
        #     b.wait_visible("button:contains('Start')")
Packit Service 0246ed
Packit Service 0246ed
        # collect code coverage result
Packit Service 0246ed
        self.check_coverage()
Packit Service 0246ed
Packit Service 0246ed
Packit Service 0246ed
if __name__ == '__main__':
Packit Service 0246ed
    testlib.test_main()