e2e, pkg/expect: distinguish between Stop and Close

Fixes #4928
This commit is contained in:
Anthony Romano
2016-04-02 23:29:49 -07:00
parent bb69dd324e
commit dc420d660e
4 changed files with 48 additions and 33 deletions

View File

@@ -95,20 +95,34 @@ func (ep *ExpectProcess) Expect(s string) (string, error) {
return "", ep.err
}
// Close waits for the expect process to close
func (ep *ExpectProcess) Close() error {
// Stop kills the expect process and waits for it to exit.
func (ep *ExpectProcess) Stop() error { return ep.close(true) }
// Close waits for the expect process to exit.
func (ep *ExpectProcess) Close() error { return ep.close(false) }
func (ep *ExpectProcess) close(kill bool) error {
if ep.cmd == nil {
return nil
return ep.err
}
ep.cmd.Process.Kill()
if kill {
ep.cmd.Process.Kill()
}
err := ep.cmd.Wait()
ep.ptyMu.Lock()
ep.fpty.Close()
ep.ptyMu.Unlock()
err := ep.cmd.Wait()
ep.wg.Wait()
if err != nil && strings.Contains(err.Error(), "signal:") {
// ignore signal errors; expected from pty
err = nil
if err != nil {
ep.err = err
if !kill && strings.Contains(err.Error(), "exit status") {
// non-zero exit code
err = nil
} else if kill && strings.Contains(err.Error(), "signal:") {
err = nil
}
}
ep.cmd = nil
return err

View File

@@ -44,12 +44,13 @@ func TestSend(t *testing.T) {
if err != nil {
t.Fatal(err)
}
defer ep.Close()
if err := ep.Send("a\r"); err != nil {
t.Fatal(err)
}
_, eerr := ep.Expect("b")
if eerr != nil {
t.Fatal(eerr)
if _, err := ep.Expect("b"); err != nil {
t.Fatal(err)
}
if err := ep.Stop(); err != nil {
t.Fatal(err)
}
}