mirror of
https://github.com/kasmtech/KasmVNC.git
synced 2024-11-28 02:53:41 +01:00
156 lines
5.4 KiB
Python
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))
|