You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			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))
 |