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