proctl_test.go 1.6 KB
Newer Older
D
Derek Parker 已提交
1 2 3 4
package proctl

import (
	"os/exec"
5
	"syscall"
D
Derek Parker 已提交
6 7 8
	"testing"
)

9
func StartTestProcess() (*exec.Cmd, error) {
D
Derek Parker 已提交
10 11 12 13
	cmd := exec.Command("../fixtures/testprog")

	err := cmd.Start()
	if err != nil {
14
		return nil, err
D
Derek Parker 已提交
15 16
	}

17
	return cmd, nil
D
Derek Parker 已提交
18 19
}

20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
func TestAttachProcess(t *testing.T) {
	cmd, err := StartTestProcess()
	if err != nil {
		t.Fatal("Starting test process:", err)
	}

	pid := cmd.Process.Pid
	p, err := NewDebugProcess(pid)
	if err != nil {
		t.Fatal("NewDebugProcess():", err)
	}

	if !p.ProcessState.Sys().(syscall.WaitStatus).Stopped() {
		t.Errorf("Process was not stopped correctly")
	}
}

D
Derek Parker 已提交
37
func TestStep(t *testing.T) {
38
	cmd, err := StartTestProcess()
D
Derek Parker 已提交
39 40 41 42
	if err != nil {
		t.Fatal("Starting test process:", err)
	}

43
	pid := cmd.Process.Pid
D
Derek Parker 已提交
44 45 46 47 48 49 50
	p, err := NewDebugProcess(pid)
	if err != nil {
		t.Fatal("NewDebugProcess():", err)
	}

	regs, err := p.Registers()
	if err != nil {
51
		t.Fatal("Registers():", err, pid)
D
Derek Parker 已提交
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
	}

	rip := regs.PC()

	err = p.Step()
	if err != nil {
		t.Fatal("Step():", err)
	}

	regs, err = p.Registers()
	if err != nil {
		t.Fatal("Registers():", err)
	}

	if rip >= regs.PC() {
		t.Errorf("Expected %#v to be greater than %#v", regs.PC(), rip)
	}
69 70

	cmd.Process.Kill()
D
Derek Parker 已提交
71
}
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93

func TestContinue(t *testing.T) {
	cmd, err := StartTestProcess()
	if err != nil {
		t.Fatal("Starting test process:", err)
	}

	pid := cmd.Process.Pid
	p, err := NewDebugProcess(pid)
	if err != nil {
		t.Fatal("NewDebugProcess():", err)
	}

	if p.ProcessState.Exited() {
		t.Fatal("Process already exited")
	}

	err = p.Continue()
	if err != nil {
		t.Fatal("Continue():", err)
	}

94 95
	if !p.ProcessState.Success() {
		t.Fatal("Process did not exit successfully")
96 97
	}
}