blob: 2ddb24b94b66539bd80985995edb824339c326ac [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package rt_test
import (
"bufio"
"fmt"
"os"
"syscall"
"testing"
"v.io/x/lib/gosh"
"v.io/x/ref/lib/signals"
_ "v.io/x/ref/runtime/factories/generic"
"v.io/x/ref/test"
"v.io/x/ref/test/v23test"
)
func simpleEchoProgram() {
fmt.Printf("ready\n")
scanner := bufio.NewScanner(os.Stdin)
if scanner.Scan() {
fmt.Printf("%s\n", scanner.Text())
}
<-signals.ShutdownOnSignals(nil)
}
var withRuntime = gosh.RegisterFunc("withRuntime", func() {
_, shutdown := test.V23Init()
defer shutdown()
simpleEchoProgram()
})
var withoutRuntime = gosh.RegisterFunc("withoutRuntime", func() {
simpleEchoProgram()
})
func TestWithRuntime(t *testing.T) {
sh := v23test.NewShell(t, nil)
defer sh.Cleanup()
sh.PropagateChildOutput = true
c := sh.FuncCmd(withRuntime)
stdin := c.StdinPipe()
c.Start()
c.S.Expect("ready")
// The Vanadium runtime spawns a goroutine that listens for SIGHUP and
// prevents process exit.
c.Signal(syscall.SIGHUP)
stdin.Write([]byte("foo\n"))
c.S.Expect("foo")
c.Terminate(os.Interrupt)
c.S.ExpectEOF()
}
func TestWithoutRuntime(t *testing.T) {
sh := v23test.NewShell(t, nil)
defer sh.Cleanup()
sh.PropagateChildOutput = true
c := sh.FuncCmd(withoutRuntime)
c.ExitErrorIsOk = true
c.Start()
c.S.Expect("ready")
// Processes without a Vanadium runtime should exit on SIGHUP.
c.Terminate(syscall.SIGHUP)
c.S.ExpectEOF()
}