Browse Source

pkg/expect: add SendLine for interactive mode

Gyu-Ho Lee 9 years ago
parent
commit
d898c68f2c
2 changed files with 22 additions and 3 deletions
  1. 6 0
      pkg/expect/expect.go
  2. 16 3
      pkg/expect/expect_test.go

+ 6 - 0
pkg/expect/expect.go

@@ -17,6 +17,7 @@ package expect
 
 
 import (
 import (
 	"bufio"
 	"bufio"
+	"io"
 	"os"
 	"os"
 	"os/exec"
 	"os/exec"
 	"strings"
 	"strings"
@@ -112,3 +113,8 @@ func (ep *ExpectProcess) Close() error {
 	ep.cmd = nil
 	ep.cmd = nil
 	return err
 	return err
 }
 }
+
+func (ep *ExpectProcess) SendLine(command string) error {
+	_, err := io.WriteString(ep.fpty, command+"\r\n")
+	return err
+}

+ 16 - 3
pkg/expect/expect_test.go

@@ -16,9 +16,7 @@
 
 
 package expect
 package expect
 
 
-import (
-	"testing"
-)
+import "testing"
 
 
 func TestEcho(t *testing.T) {
 func TestEcho(t *testing.T) {
 	ep, err := NewExpect("/bin/echo", "hello world")
 	ep, err := NewExpect("/bin/echo", "hello world")
@@ -40,3 +38,18 @@ func TestEcho(t *testing.T) {
 		t.Fatalf("expected error on closed expect process")
 		t.Fatalf("expected error on closed expect process")
 	}
 	}
 }
 }
+
+func TestSendLine(t *testing.T) {
+	ep, err := NewExpect("/usr/bin/tr", "a", "b")
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer ep.Close()
+	if err := ep.SendLine("a"); err != nil {
+		t.Fatal(err)
+	}
+	_, eerr := ep.Expect("b")
+	if eerr != nil {
+		t.Fatal(eerr)
+	}
+}