KasmVNC/spec/vncserver_select_de_spec.py
2022-08-19 17:54:11 +00:00

156 lines
5.4 KiB
Python

import os
import sys
import pexpect
from mamba import description, context, it, fit, before, after
from expects import expect, equal
from helper.spec_helper import start_xvnc, kill_xvnc, run_cmd, clean_env, \
add_kasmvnc_user_docker, clean_kasm_users, start_xvnc_pexpect
# WIP. Plan to move to start_xvnc_pexpect(), because pexpect provides a way to
# wait for vncserver output. start_xvnc() just blindly prints input to vncserver
# without knowing what it prints back.
def select_de(de_name):
try:
extra_args = f'-select-de {de_name}'
completed_process = start_xvnc(extra_args)
expect(completed_process.returncode).to(equal(0))
finally:
kill_xvnc()
def check_de_was_setup_to_run(de_name):
completed_process = run_cmd(f'grep -q {de_name} ~/.vnc/xstartup')
expect(completed_process.returncode).to(equal(0))
with description('vncserver') as self:
with before.each:
clean_env()
with after.each:
kill_xvnc()
with context('on the first run'):
with before.each:
add_kasmvnc_user_docker()
with it('asks user to select a DE'):
child = start_xvnc_pexpect()
child.expect(r'\[1\] Cinnamon.+Manually edit')
child.sendline("1\n")
child.wait()
expect(child.exitstatus).to(equal(0))
check_de_was_setup_to_run('cinnamon')
with it("doesn't prompt user to select a DE if prompting is disabled"):
child = start_xvnc_pexpect("-prompt 0")
child.expect(r'Warning: the Desktop Environment.+wasn\'t selected')
child.wait()
expect(child.exitstatus).to(equal(0))
with it('asks to select a DE, when ran with -select-de'):
child = start_xvnc_pexpect('-select-de')
child.expect(r'\[1\] Cinnamon.+Manually edit')
child.sendline("1\n")
child.wait()
expect(child.exitstatus).to(equal(0))
check_de_was_setup_to_run('cinnamon')
with it("doesn't prompt user to select a DE if prompting is disabled"):
child = start_xvnc_pexpect("-select-de -prompt 0")
child.expect(r'Warning: the Desktop Environment.+wasn\'t selected')
child.wait()
expect(child.exitstatus).to(equal(0))
with it('selects passed DE with -s'):
select_de('mate')
check_de_was_setup_to_run('mate')
with it('selects manual xstartup editing, not a DE'):
select_de('manual')
check_de_was_setup_to_run('twm')
with context('after DE was selected'):
with before.each:
add_kasmvnc_user_docker()
with it("don't ask to choose DE by default"):
select_de('mate')
completed_process = start_xvnc()
expect(completed_process.returncode).to(equal(0))
check_de_was_setup_to_run('mate')
with it('asks to select a DE, when ran with -select-de'):
select_de('mate')
choose_cinnamon_and_answer_yes = "1\ny\n"
completed_process = start_xvnc('-select-de',
input=choose_cinnamon_and_answer_yes)
expect(completed_process.returncode).to(equal(0))
check_de_was_setup_to_run('cinnamon')
with it("doesn't ask user to select a DE if prompting is disabled"):
child = start_xvnc_pexpect("-select-de -prompt 0")
child.expect(r'Warning: the Desktop Environment.+wasn\'t selected')
child.wait()
expect(child.exitstatus).to(equal(0))
with it('selects passed DE with -s'):
select_de('mate')
completed_process = start_xvnc('-select-de cinnamon')
expect(completed_process.returncode).to(equal(0))
check_de_was_setup_to_run('cinnamon')
with context('guided user creation'):
with it('asks to create a user if none exist'):
clean_kasm_users()
child = start_xvnc_pexpect('-select-de cinnamon')
child.expect('Provide selection number:')
child.sendline('1')
child.expect('Enter username')
child.sendline()
child.expect('Password:')
child.sendline('password')
child.expect('Verify:')
child.sendline('password')
child.expect(pexpect.EOF)
child.close()
expect(child.exitstatus).to(equal(0))
home_dir = os.environ['HOME']
user = os.environ['USER']
completed_process = run_cmd(f'grep -qw {user} {home_dir}/.kasmpasswd')
expect(completed_process.returncode).to(equal(0))
with it('specify custom username'):
custom_username = 'custom_username'
child = start_xvnc_pexpect('-select-de cinnamon')
child.expect('Provide selection number:')
child.sendline('1')
child.expect('Enter username')
child.sendline(custom_username)
child.expect('Password:')
child.sendline('password')
child.expect('Verify:')
child.sendline('password')
child.expect(pexpect.EOF)
child.wait()
expect(child.exitstatus).to(equal(0))
home_dir = os.environ['HOME']
completed_process = run_cmd(f'grep -qw {custom_username} {home_dir}/.kasmpasswd')
expect(completed_process.returncode).to(equal(0))