# 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 assert c.expect(def_module.prompt) == 0, "Shell did not print expected prompt" # Ensure that sleep has enough time to start before we read its # /proc/ /stat file. proc_check.count_children_timeout(c, 1, 1)
# 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 assert c.expect(def_module.prompt) == 0, "Shell did not print expected prompt" c.sendline("exit") assert c.expect_exact("exit\r\n") == 0, "Shell output extraneous characters" shellio.success()
#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 assert c.expect(def_module.prompt) == 0, "Shell did not print expected prompt" c.sendline("exit"); assert c.expect_exact("exit\r\n") == 0, "Shell output extraneous characters" shellio.success()
#snag the jobid and pid of the second sleep command (jobid2, pid2) = shellio.parse_regular_expression(c, def_module.bgjob_regex) #check the prompt prints assert c.expect( def_module.prompt) == 0, "Shell did not print expected prompt (4)" #resume the command by its jobid c.sendline(def_module.builtin_commands['fg'] % jobid) #wait until it takes over the foreground process group proc_check.wait_until_child_is_in_foreground(c) #Ensure that the sleep is in the foreground process group via /proc/ assert proc_check.check_pid_fgpgrp(pid), "Error, the pid's process group is \ not the foreground process group" #send the command back to the background c.sendcontrol('z') #check the prompt prints assert c.expect( def_module.prompt) == 0, "Shell did not print expected prompt (5)" #resume the command by its jobid c.sendline(def_module.builtin_commands['fg'] % jobid2) #wait until it takes over the foreground process group proc_check.wait_until_child_is_in_foreground(c)
import pexpect, shellio, signal, time, os, re, proc_check #Ensure the shell process is terminated def force_shell_termination(shell_process): c.close(force=True) #pulling in the regular expression and other definitions definitions_scriptname = sys.argv[1] def_module = imp.load_source('', definitions_scriptname) logfile = None 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) c.timeout = 5 #backgrounding a exclusive access job will be stopped c.sendline("vim &") [job, pid] = shellio.parse_regular_expression(c,def_module.bgjob_regex) assert not proc_check.check_pid_fgpgrp(pid), "process is in the forground" c.sendline("fg 1") c.sendline("iderp"+chr(27)+":w derpderp") c.sendline("cat derpderp") assert c.expect_exact("derp") == 0, "typing to vim didn't work" shellio.success()
c.sendline("sleep 300 &") #snag the jobid and pid of the second sleep command (jobid2, pid2) = shellio.parse_regular_expression(c, def_module.bgjob_regex) #check the prompt prints assert c.expect(def_module.prompt) == 0, "Shell did not print expected prompt (4)" #resume the command by its jobid c.sendline(def_module.builtin_commands['fg'] % jobid) #wait until it takes over the foreground process group proc_check.wait_until_child_is_in_foreground(c) #Ensure that the sleep is in the foreground process group via /proc/ assert proc_check.check_pid_fgpgrp(pid), "Error, the pid's process group is \ not the foreground process group" #send the command back to the background c.sendcontrol('z') #check the prompt prints assert c.expect(def_module.prompt) == 0, "Shell did not print expected prompt (5)" #resume the command by its jobid c.sendline(def_module.builtin_commands['fg'] % jobid2) #wait until it takes over the foreground process group proc_check.wait_until_child_is_in_foreground(c)