forked from leemcloughlin/expect
-
Notifications
You must be signed in to change notification settings - Fork 0
/
example_test.go
119 lines (106 loc) · 2.68 KB
/
example_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
File summary: testable examples
Package: expect
Author: Lee McLoughlin
Copyright (C) 2016 LMMR Tech Ltd
*/
package expect
import (
"fmt"
"os"
)
func ExampleExpect() {
// Run rev, the reverse text lines command, send it hello and
// look for olleh
exp, err := NewExpect("rev")
if err != nil {
fmt.Fprintf(os.Stderr, "NewExpect failed %s", err)
}
exp.SetTimeoutSecs(5) // Shouldn't happen
exp.Send("hello\r")
i, found, err := exp.Expect("olleh")
if i == 0 {
fmt.Println("found", string(found))
} else {
fmt.Println("failed ", err)
}
exp.Send(EOF)
// Output:
// found olleh
}
/*
This example works and the code is small but I just really dislike
using panic's
func Test_Examplep(tst *testing.T) {
// https://en.wikipedia.org/wiki/Expect
fmt.Fprintln(os.Stderr, "Using expectp to panic on error - not a Go thing to do")
defer func() {
if r := recover(); r != nil {
tst.Errorf("failed: %s", r)
}
}()
//remote_server := "example.com"
remote_server := "localhost"
my_user_id := "lee"
my_password := "lee"
my_command := "ls"
t, err := Spawn("telnet", remote_server)
if err != nil {
tst.Errorf("failed to telnet: %s", err)
return
}
tst.Logf("telnet spawned ok")
t.SetTimeoutSecs(5)
t.Expectp("username:")
// Send the username, and then wait for a password prompt.
t.Send(my_user_id + "\r")
t.Expectp("password:")
// Send the password, and then wait for a shell prompt.
t.Send(my_password + "\r")
t.Expectp("%")
t.Clear()
// Send the prebuilt command, and then wait for another shell prompt.
t.Send(my_command + "\r")
t.Expectp("%")
// Capture the results of the command into a variable. This can be displayed, or written to disk.
results := t.BufStr()
// Exit the telnet session, and wait for a special end-of-file character.
t.Send("exit\r")
t.Expectp() // read EOF
fmt.Fprintln(os.Stderr, "results are:", results)
tst.Log("OK")
}
*/
func ExampleExpect_ownEcho() {
// Run rev, the reverse text lines command, send it hello and
// look for hello echo'd back then olleh
exp, err := NewExpect("rev")
if err != nil {
fmt.Fprintf(os.Stderr, "NewExpect failed %s", err)
}
exp.SetTimeoutSecs(5) // Shouldn't happen
exp.Send("hello\r")
// Remember terminals echo, by default, so I will get back the hello I
// just sent before its reverse
i, found, err := exp.Expect("hello", "olleh")
if i == 0 {
fmt.Println("found", string(found))
} else {
fmt.Println("failed ", err)
}
i, found, err = exp.Expect("hello", "olleh")
if i == 1 {
fmt.Println("found", string(found))
} else {
fmt.Println("failed ", err)
}
exp.Send(EOF)
i, _, _ = exp.Expect()
if i == NotFound {
fmt.Println("found EOF")
}
// Output:
// found hello
// found olleh
// found EOF
}