本文整理汇总了Golang中github.com/coreos/gexpect.Spawn函数的典型用法代码示例。如果您正苦于以下问题:Golang Spawn函数的具体用法?Golang Spawn怎么用?Golang Spawn使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Spawn函数的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: SpawnOrFail
func (a *GoroutineAssistant) SpawnOrFail(cmd string) *gexpect.ExpectSubprocess {
a.t.Logf("Command: %v", cmd)
child, err := gexpect.Spawn(cmd)
if err != nil {
a.Fatalf("Cannot exec rkt: %v", err)
}
return child
}
示例2: spawnOrFail
func spawnOrFail(t *testing.T, cmd string) *gexpect.ExpectSubprocess {
t.Logf("Running command: %v", cmd)
child, err := gexpect.Spawn(cmd)
if err != nil {
t.Fatalf("Cannot exec rkt: %v", err)
}
return child
}
示例3: TestUserns
func TestUserns(t *testing.T) {
if !common.SupportsUserNS() {
t.Skip("User namespaces are not supported on this host.")
}
if err := checkUserNS(); err != nil {
t.Skip("User namespaces don't work on this host.")
}
// we need CAP_SYS_PTRACE to read /proc/1/root
image := patchTestACI("rkt-inspect-stat.aci", "--exec=/inspect --stat-file", "--capability=CAP_SYS_PTRACE")
defer os.Remove(image)
ctx := testutils.NewRktRunCtx()
defer ctx.Cleanup()
for i, tt := range usernsTests {
for _, userNsOpt := range []string{"", "--private-users"} {
runCmd := tt.runCmd
runCmd = strings.Replace(runCmd, "^IMAGE^", image, -1)
runCmd = strings.Replace(runCmd, "^RKT_BIN^", ctx.Cmd(), -1)
runCmd = strings.Replace(runCmd, "^FILE^", tt.file, -1)
runCmd = strings.Replace(runCmd, "^USERNS^", userNsOpt, -1)
if userNsOpt == "--private-users" {
t.Logf("Running 'run' test #%v: %v", i, runCmd)
child, err := gexpect.Spawn(runCmd)
if err != nil {
t.Fatalf("Cannot exec rkt #%v: %v", i, err)
}
expectedResult := tt.file + `: mode: (\w+.\w+.\w+)`
result, _, err := expectRegexWithOutput(child, expectedResult)
if err != nil || result[1] != tt.expectMode {
t.Fatalf("Expected %q but not found: %v", tt.expectMode, result)
}
expectedResult = tt.file + `: user: (\d)`
result, _, err = expectRegexWithOutput(child, expectedResult)
if err != nil || result[0] == tt.expectUid {
t.Fatalf("Expected %q but not found: %v", tt.expectUid, result)
}
expectedResult = tt.file + `: group: (\d)`
result, _, err = expectRegexWithOutput(child, expectedResult)
if err != nil || result[0] == tt.expectGid {
t.Fatalf("Expected %q but not found: %v", tt.expectGid, result)
}
err = child.Wait()
if err != nil {
t.Fatalf("rkt didn't terminate correctly: %v", err)
}
ctx.Reset()
}
}
}
}
示例4: main
func main() {
log.Printf("Testing Ping interact... \n")
child, err := gexpect.Spawn("ping -c8 127.0.0.1")
if err != nil {
panic(err)
}
child.Interact()
log.Printf("Success\n")
}
示例5: TestImageGCTreeStore
func TestImageGCTreeStore(t *testing.T) {
ctx := testutils.NewRktRunCtx()
defer ctx.Cleanup()
expectedTreeStores := 2
// If overlayfs is not supported only the stage1 image is rendered in the treeStore
if !common.SupportsOverlay() {
expectedTreeStores = 1
}
// at this point we know that RKT_INSPECT_IMAGE env var is not empty
referencedACI := os.Getenv("RKT_INSPECT_IMAGE")
cmd := fmt.Sprintf("%s --insecure-options=image run --mds-register=false %s", ctx.Cmd(), referencedACI)
t.Logf("Running %s: %v", referencedACI, cmd)
child, err := gexpect.Spawn(cmd)
if err != nil {
t.Fatalf("Cannot exec: %v", err)
}
if err := child.Wait(); err != nil {
t.Fatalf("rkt didn't terminate correctly: %v", err)
}
treeStoreIDs, err := getTreeStoreIDs(ctx)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
// We expect 2 treeStoreIDs for stage1 and app (only 1 if overlay is not supported/enabled)
if len(treeStoreIDs) != expectedTreeStores {
t.Fatalf("expected %d entries in the treestore but found %d entries", expectedTreeStores, len(treeStoreIDs))
}
runImageGC(t, ctx)
treeStoreIDs, err = getTreeStoreIDs(ctx)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
// We expect 1/2 treeStoreIDs again as no pod gc has been executed
if len(treeStoreIDs) != expectedTreeStores {
t.Fatalf("expected %d entries in the treestore but found %d entries", expectedTreeStores, len(treeStoreIDs))
}
runGC(t, ctx)
runImageGC(t, ctx)
treeStoreIDs, err = getTreeStoreIDs(ctx)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if len(treeStoreIDs) != 0 {
t.Fatalf("expected empty treestore but found %d entries", len(treeStoreIDs))
}
}
示例6: removeImage
func removeImage(t *testing.T, ctx *testutils.RktRunCtx, images ...string) {
cmd := fmt.Sprintf("%s image rm %s", ctx.Cmd(), strings.Join(images, " "))
child, err := gexpect.Spawn(cmd)
if err != nil {
t.Fatalf("Cannot exec: %v", err)
}
if err := expectWithOutput(child, rmImageOk); err != nil {
t.Fatalf("Expected %q but not found: %v", rmImageOk, err)
}
if err := child.Wait(); err != nil {
t.Fatalf("rkt didn't terminate correctly: %v", err)
}
}
示例7: TestUserns
func TestUserns(t *testing.T) {
if !common.SupportsUserNS() {
t.Skip("User namespaces are not supported on this host.")
}
if err := checkUserNS(); err != nil {
t.Skip("User namespaces don't work on this host.")
}
image := patchTestACI("rkt-inspect-stat.aci", "--exec=/inspect --stat-file")
defer os.Remove(image)
ctx := testutils.NewRktRunCtx()
defer ctx.Cleanup()
for i, tt := range usernsTests {
for _, userNsOpt := range []string{"", "--private-users"} {
runCmd := tt.runCmd
runCmd = strings.Replace(runCmd, "^IMAGE^", image, -1)
runCmd = strings.Replace(runCmd, "^RKT_BIN^", ctx.Cmd(), -1)
runCmd = strings.Replace(runCmd, "^FILE^", tt.file, -1)
runCmd = strings.Replace(runCmd, "^USERNS^", userNsOpt, -1)
t.Logf("Running 'run' test #%v: %v", i, runCmd)
child, err := gexpect.Spawn(runCmd)
if err != nil {
t.Fatalf("Cannot exec rkt #%v: %v", i, err)
}
err = expectWithOutput(child, tt.file+": mode: "+tt.expectMode)
if err != nil {
t.Fatalf("Expected %q but not found: %v", tt.expectMode, err)
}
err = expectWithOutput(child, tt.file+": user: "+tt.expectUid)
if err != nil {
t.Fatalf("Expected %q but not found: %v", tt.expectUid, err)
}
err = expectWithOutput(child, tt.file+": group: "+tt.expectGid)
if err != nil {
t.Fatalf("Expected %q but not found: %v", tt.expectGid, err)
}
err = child.Wait()
if err != nil {
t.Fatalf("rkt didn't terminate correctly: %v", err)
}
ctx.Reset()
}
}
}
示例8: main
func main() {
waitChan := make(chan string)
fmt.Printf("Starting screen.. \n")
child, err := gexpect.Spawn("screen")
if err != nil {
panic(err)
}
sender, reciever := child.AsyncInteractChannels()
go func() {
waitString := ""
count := 0
for {
select {
case waitString = <-waitChan:
count++
case msg, open := <-reciever:
if !open {
return
}
fmt.Printf("Recieved: %s\n", msg)
if strings.Contains(msg, waitString) {
if count >= 1 {
waitChan <- msg
count -= 1
}
}
}
}
}()
wait := func(str string) {
waitChan <- str
<-waitChan
}
fmt.Printf("Waiting until started.. \n")
wait(" ")
fmt.Printf("Sending Enter.. \n")
sender <- "\n"
wait("$")
fmt.Printf("Sending echo.. \n")
sender <- "echo Hello World\n"
wait("Hello World")
fmt.Printf("Received echo. \n")
}
示例9: main
func main() {
fmt.Printf("Starting python.. \n")
child, err := gexpect.Spawn("python")
if err != nil {
panic(err)
}
fmt.Printf("Expecting >>>.. \n")
child.Expect(">>>")
fmt.Printf("print 'Hello World'..\n")
child.SendLine("print 'Hello World'")
child.Expect(">>>")
fmt.Printf("Interacting.. \n")
child.Interact()
fmt.Printf("Done \n")
child.Close()
}
示例10: getImageID
func getImageID(ctx *testutils.RktRunCtx, name string) (string, error) {
cmd := fmt.Sprintf(`/bin/sh -c "%s image list --fields=id,name --no-legend | grep %s | awk '{print $1}'"`, ctx.Cmd(), name)
child, err := gexpect.Spawn(cmd)
if err != nil {
return "", fmt.Errorf("Cannot exec rkt: %v", err)
}
imageID, err := child.ReadLine()
imageID = strings.TrimSpace(imageID)
imageID = string(bytes.Trim([]byte(imageID), "\x00"))
if err != nil {
return "", fmt.Errorf("Cannot exec: %v", err)
}
if err := child.Wait(); err != nil {
return "", fmt.Errorf("rkt didn't terminate correctly: %v", err)
}
return imageID, nil
}
示例11: TestPrepareAppEnsureEtcHosts
func TestPrepareAppEnsureEtcHosts(t *testing.T) {
etcHostsCreateImage := patchTestACI("rkt-inspect-etc-hosts-create.aci", "--exec=/inspect --read-file")
defer os.Remove(etcHostsCreateImage)
etcHostsExistsImage := patchTestACI("rkt-inspect-etc-hosts-exists.aci", "--exec=/inspect --read-file", "--mounts=etc,path=/etc,readOnly=false")
defer os.Remove(etcHostsExistsImage)
ctx := testutils.NewRktRunCtx()
defer ctx.Cleanup()
tmpdir := createTempDirOrPanic("rkt-tests.")
defer os.RemoveAll(tmpdir)
tmpetc := createTempDirOrPanic("rkt-tests-etc.")
defer os.RemoveAll(tmpetc)
tmpfile := filepath.Join(tmpetc, "hosts")
if err := ioutil.WriteFile(tmpfile, []byte(`<<<preexisting etc>>>`), 0600); err != nil {
t.Fatalf("Cannot create etc/hosts file: %v", err)
}
for i, tt := range etcHostsTests {
cmd := strings.Replace(tt.rktCmd, "^TMPDIR^", tmpdir, -1)
cmd = strings.Replace(cmd, "^RKT_BIN^", ctx.Cmd(), -1)
cmd = strings.Replace(cmd, "^ETC_HOSTS_CREATE^", etcHostsCreateImage, -1)
cmd = strings.Replace(cmd, "^ETC_HOSTS_EXISTS^", etcHostsExistsImage, -1)
cmd = strings.Replace(cmd, "^TMPETC^", tmpetc, -1)
t.Logf("Running test #%v: %v", i, cmd)
child, err := gexpect.Spawn(cmd)
if err != nil {
t.Fatalf("Cannot exec rkt #%v: %v", i, err)
}
_, _, err = expectRegexTimeoutWithOutput(child, tt.expectRegEx, time.Minute)
if err != nil {
t.Fatalf("Expected %q but not found #%v: %v", tt.expectRegEx, i, err)
}
err = child.Wait()
if err != nil {
t.Fatalf("rkt didn't terminate correctly: %v", err)
}
}
}
示例12: main
func main() {
log.Printf("Testing Ftp... ")
child, err := gexpect.Spawn("ftp ftp.openbsd.org")
if err != nil {
panic(err)
}
child.Expect("Name")
child.SendLine("anonymous")
child.Expect("Password")
child.SendLine("[email protected]")
child.Expect("ftp> ")
child.SendLine("cd /pub/OpenBSD/3.7/packages/i386")
child.Expect("ftp> ")
child.SendLine("bin")
child.Expect("ftp> ")
child.SendLine("prompt")
child.Expect("ftp> ")
child.SendLine("pwd")
child.Expect("ftp> ")
log.Printf("Success\n")
}
示例13: spawnCmd
func spawnCmd(args []string) (*gexpect.ExpectSubprocess, error) {
// redirect stderr to stdout since gexpect only uses stdout
cmd := `/bin/sh -c "` + strings.Join(args, " ") + ` 2>&1 "`
return gexpect.Spawn(cmd)
}
示例14: TestEtcHosts
/*
The stage0 can create an etc hosts
prepare-app will overwrite the app's /etc/hosts if the stage0 created one
Otherwise, it will create a fallback /etc/hosts if the stage2 does not have one
*/
func TestEtcHosts(t *testing.T) {
ctx := testutils.NewRktRunCtx()
defer ctx.Cleanup()
tmpdir := createTempDirOrPanic("rkt-tests.")
defer os.RemoveAll(tmpdir)
tmpetc := createTempDirOrPanic("rkt-tests-etc.")
defer os.RemoveAll(tmpetc)
tmpfile := filepath.Join(tmpetc, "hosts")
if err := ioutil.WriteFile(tmpfile, []byte(`<<<preexisting etc>>>`), 0600); err != nil {
t.Fatalf("Cannot create etc/hosts file: %v", err)
}
dat, err := ioutil.ReadFile("/etc/hosts")
if err != nil {
t.Fatal("Could not read host's /etc/hosts", err)
}
sum := fmt.Sprintf("%x", sha1.Sum(dat))
tests := []struct {
rktArgs string
inspectArgs string
expectRegEx string
}{
{
fmt.Sprintf("--volume hosts,kind=host,source=%s", tmpfile),
"--mount volume=hosts,target=/etc/hosts --exec=/inspect -- -file-name=/etc/hosts -read-file",
"<<<preexisting etc>>>",
},
{ // Test that with no /etc/hosts, the fallback is created
"",
"--exec=/inspect -- -file-name=/etc/hosts -hash-file",
"192f716fb0db669de1c537b845b632f03c9aeb40",
},
{ // Test that with --hosts-entry=host, the host's is copied
"--hosts-entry=host",
"--exec=/inspect -- -file-name=/etc/hosts -hash-file",
sum,
},
{ // test that we create our own
"--hosts-entry=128.66.0.99=host1",
"--exec=/inspect -- -file-name=/etc/hosts -read-file",
"128.66.0.99 host1",
},
}
for i, tt := range tests {
cmd := fmt.Sprintf(
"%s run --insecure-options=image %s %s %s",
ctx.Cmd(),
tt.rktArgs,
getInspectImagePath(),
tt.inspectArgs)
t.Logf("Running test #%v: %v", i, cmd)
child, err := gexpect.Spawn(cmd)
if err != nil {
t.Fatalf("Cannot exec rkt #%v: %v", i, err)
}
_, out, err := expectRegexTimeoutWithOutput(child, tt.expectRegEx, 30*time.Second)
if err != nil {
t.Fatalf("Test %d %v %v", i, err, out)
}
waitOrFail(t, child, 0)
}
}