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.
		
		
		
		
		
			
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
import os
 | 
						|
import sys
 | 
						|
import shutil
 | 
						|
import subprocess
 | 
						|
import pexpect
 | 
						|
from path import Path
 | 
						|
from expects import expect, equal
 | 
						|
 | 
						|
vncserver_cmd = 'vncserver :1'
 | 
						|
running_xvnc = False
 | 
						|
debug_output = False
 | 
						|
config_dir = "spec/tmp"
 | 
						|
config_filename = os.path.join(config_dir, "config.yaml")
 | 
						|
 | 
						|
if os.getenv('KASMVNC_SPEC_DEBUG_OUTPUT'):
 | 
						|
    debug_output = True
 | 
						|
 | 
						|
 | 
						|
def write_config(config_text):
 | 
						|
    os.makedirs(config_dir, exist_ok=True)
 | 
						|
 | 
						|
    with open(config_filename, "w") as f:
 | 
						|
        f.write(config_text)
 | 
						|
 | 
						|
 | 
						|
def clean_env():
 | 
						|
    clean_kasm_users()
 | 
						|
 | 
						|
    home_dir = os.environ['HOME']
 | 
						|
    vnc_dir = os.path.join(home_dir, ".vnc")
 | 
						|
    Path(vnc_dir).rmtree(ignore_errors=True)
 | 
						|
 | 
						|
 | 
						|
def clean_kasm_users():
 | 
						|
    home_dir = os.environ['HOME']
 | 
						|
    password_file = os.path.join(home_dir, ".kasmpasswd")
 | 
						|
    Path(password_file).remove_p()
 | 
						|
 | 
						|
 | 
						|
def start_xvnc_pexpect(extra_args="", **kwargs):
 | 
						|
    global running_xvnc
 | 
						|
 | 
						|
    # ":;" is a hack. Without it, Xvnc doesn't run. No idea what happens, but
 | 
						|
    # when I run top, Xvnc just isn't there. I suspect a race.
 | 
						|
    child = pexpect.spawn('/bin/bash',
 | 
						|
                          ['-ic', f':;{vncserver_cmd} {extra_args}'],
 | 
						|
                          timeout=5, encoding='utf-8', **kwargs)
 | 
						|
    if debug_output:
 | 
						|
        child.logfile_read = sys.stderr
 | 
						|
 | 
						|
    running_xvnc = True
 | 
						|
 | 
						|
    return child
 | 
						|
 | 
						|
 | 
						|
def start_xvnc(extra_args="", **kwargs):
 | 
						|
    global running_xvnc
 | 
						|
    completed_process = run_cmd(f'{vncserver_cmd} {extra_args}',
 | 
						|
                                print_stderr=False, **kwargs)
 | 
						|
    if completed_process.returncode == 0:
 | 
						|
        running_xvnc = True
 | 
						|
 | 
						|
    return completed_process
 | 
						|
 | 
						|
 | 
						|
def run_cmd(cmd, print_stderr=True, **kwargs):
 | 
						|
    completed_process = subprocess.run(cmd, shell=True, text=True,
 | 
						|
                                       capture_output=True,
 | 
						|
                                       executable='/bin/bash', **kwargs)
 | 
						|
    if debug_output:
 | 
						|
        if len(completed_process.stderr) > 0:
 | 
						|
            print(completed_process.stderr)
 | 
						|
        if len(completed_process.stdout) > 0:
 | 
						|
            print(completed_process.stdout)
 | 
						|
    elif print_stderr:
 | 
						|
        if len(completed_process.stderr) > 0:
 | 
						|
            print(completed_process.stderr)
 | 
						|
 | 
						|
    return completed_process
 | 
						|
 | 
						|
 | 
						|
def add_kasmvnc_user_docker():
 | 
						|
    completed_process = run_cmd('echo -e "password\\npassword\\n" | vncpasswd -u docker -w')
 | 
						|
    expect(completed_process.returncode).to(equal(0))
 | 
						|
 | 
						|
 | 
						|
def kill_xvnc():
 | 
						|
    global running_xvnc
 | 
						|
    if not running_xvnc:
 | 
						|
        return
 | 
						|
 | 
						|
    run_cmd('vncserver -kill :1', print_stderr=False)
 | 
						|
    running_xvnc = False
 |