delve/cmd/dlv/dlv_test.go

74 lines
1.6 KiB
Go
Raw Normal View History

package main
import (
"bufio"
"os"
"os/exec"
"path/filepath"
"runtime"
"testing"
2017-02-08 16:00:44 +00:00
protest "github.com/derekparker/delve/pkg/proc/test"
"github.com/derekparker/delve/service/rpc2"
)
func assertNoError(err error, t testing.TB, s string) {
if err != nil {
_, file, line, _ := runtime.Caller(1)
fname := filepath.Base(file)
t.Fatalf("failed assertion at %s:%d: %s - %s\n", fname, line, s, err)
}
}
func TestBuild(t *testing.T) {
const listenAddr = "localhost:40573"
2016-11-18 07:21:50 +00:00
makefilepath := filepath.Join(os.Getenv("GOPATH"), "src", "github.com", "derekparker", "delve", "Makefile")
t.Logf("makefile: %q", makefilepath)
var err error
for _, make := range []string{"make", "mingw32-make"} {
err = exec.Command(make, "-f", makefilepath, "build").Run()
if err == nil {
break
}
}
assertNoError(err, t, "make")
wd, _ := os.Getwd()
dlvbin := filepath.Join(wd, "dlv")
defer os.Remove(dlvbin)
fixtures := protest.FindFixturesDir()
buildtestdir := filepath.Join(fixtures, "buildtest")
2016-11-18 07:21:50 +00:00
cmd := exec.Command(dlvbin, "debug", "--headless=true", "--listen="+listenAddr, "--api-version=2")
cmd.Dir = buildtestdir
stdout, err := cmd.StdoutPipe()
assertNoError(err, t, "stdout pipe")
cmd.Start()
defer func() {
2016-11-18 07:21:50 +00:00
if runtime.GOOS != "windows" {
cmd.Process.Signal(os.Interrupt)
2016-11-18 07:21:50 +00:00
cmd.Wait()
} else {
// sending os.Interrupt on windows is not supported
cmd.Process.Kill()
2016-11-18 07:21:50 +00:00
}
}()
scan := bufio.NewScanner(stdout)
// wait for the debugger to start
scan.Scan()
go func() {
for scan.Scan() {
// keep pipe empty
}
}()
client := rpc2.NewClient(listenAddr)
state := <-client.Continue()
if !state.Exited {
t.Fatal("Program did not exit")
}
}