c.timeout = 2 # ensure that shell prints expected prompt assert c.expect(def_module.prompt) == 0, "Shell did not print expected prompt" # run a command c.sendline("sleep 30 &") # pull the jobid and pid from the background process printout (jobid, pid) = shellio.parse_regular_expression(c, def_module.bgjob_regex) # ensure that the shell prints the expected prompt assert c.expect(def_module.prompt) == 0, "Shell did not print expected prompt" #The job needs to be running when we call stop proc_check.count_children_timeout(c, 1, 1) # send the stop command to the process c.sendline(def_module.builtin_commands['stop'] % jobid) #Ensure that sleep has enough time to stop before we read its #/proc/ pid /stat file. time.sleep(.5) #Ensure that sleep is now stopped in the background, and is not #the foreground process. assert not proc_check.check_pid_fgpgrp(pid), \ 'Error: process is in the foreground' assert proc_check.check_pid_status(pid, 'T'), 'Error: process not stopped' #check the prompt prints
# run program sleep c.sendline("sleep 30 &") # Used to get the jobid and pid of the sleep process (jobid, pid) = shellio.parse_regular_expression(c, def_module.bgjob_regex) # ensure that shell prints expected prompt assert c.expect(def_module.prompt) == 0, "Shell did not print expected prompt" # send the stop command to the process c.sendline(def_module.builtin_commands["stop"] % jobid) # Ensure that sleep has enough time to stop before we read its # /proc/ /stat file. proc_check.count_children_timeout(c, 1, 1) # Ensure that sleep is now stopped in the background, and is not # the foreground process. assert not proc_check.check_pid_fgpgrp(pid), "Error: process is in the foreground" assert proc_check.check_pid_status(pid, "T"), "Error: process not stopped" # check the prompt prints assert c.expect(def_module.prompt) == 0, "Shell did not print expected prompt" # resume the sleep program c.sendline(def_module.builtin_commands["bg"] % jobid) # check the prompt prints
if hasattr(def_module, 'logfile'): logfile = def_module.logfile # spawn an instance of the shell c = pexpect.spawn(def_module.shell, drainpty=True, logfile=logfile) atexit.register(force_shell_termination, shell_process=c) # set timeout for all following 'expect*' calls to 2 seconds c.timeout = 2 # ensure that the shell prints the expected prompt assert c.expect(def_module.prompt) == 0, "Shell did not print expected prompt" # run a non-existent command c.sendline("this_command_does_not_exist") # this should fail somehow and not leave any children behind proc_check.count_children_timeout(c, 0, 2) # eventually, the shell should go back to the prompt assert c.expect(def_module.prompt) == 0, "Shell did not print expected prompt" # end the shell program by sending it an end-of-file character c.sendline("exit") # ensure that no extra characters are output after exiting assert c.expect_exact("exit\r\n") == 0, "Shell output extraneous characters" # the test was successful shellio.success()