pkg/proc: simplify tests by using errors.As (#3818)

This commit is contained in:
Oleksandr Redko 2024-10-01 18:54:11 +03:00 committed by GitHub
parent 8b878fb238
commit 8c645a32d7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 51 additions and 65 deletions

@ -1,6 +1,7 @@
package gdbserial_test package gdbserial_test
import ( import (
"errors"
"flag" "flag"
"fmt" "fmt"
"os" "os"
@ -76,7 +77,7 @@ func TestRestartAfterExit(t *testing.T) {
loc, err := p.CurrentThread().Location() loc, err := p.CurrentThread().Location()
assertNoError(err, t, "CurrentThread().Location()") assertNoError(err, t, "CurrentThread().Location()")
err = grp.Continue() err = grp.Continue()
if _, isexited := err.(proc.ErrProcessExited); err == nil || !isexited { if !errors.As(err, &proc.ErrProcessExited{}) {
t.Fatalf("program did not exit: %v", err) t.Fatalf("program did not exit: %v", err)
} }
@ -89,7 +90,7 @@ func TestRestartAfterExit(t *testing.T) {
t.Fatalf("stopped at %d (expected %d)", loc2.Line, loc.Line) t.Fatalf("stopped at %d (expected %d)", loc2.Line, loc.Line)
} }
err = grp.Continue() err = grp.Continue()
if _, isexited := err.(proc.ErrProcessExited); err == nil || !isexited { if !errors.As(err, &proc.ErrProcessExited{}) {
t.Fatalf("program did not exit (after exit): %v", err) t.Fatalf("program did not exit (after exit): %v", err)
} }
}) })
@ -113,7 +114,7 @@ func TestRestartDuringStop(t *testing.T) {
t.Fatalf("stopped at %d (expected %d)", loc2.Line, loc.Line) t.Fatalf("stopped at %d (expected %d)", loc2.Line, loc.Line)
} }
err = grp.Continue() err = grp.Continue()
if _, isexited := err.(proc.ErrProcessExited); err == nil || !isexited { if !errors.As(err, &proc.ErrProcessExited{}) {
t.Fatalf("program did not exit (after exit): %v", err) t.Fatalf("program did not exit (after exit): %v", err)
} }
}) })

@ -1211,12 +1211,11 @@ func TestBreakpointCounts(t *testing.T) {
bp := setFileBreakpoint(p, t, fixture.Source, 12) bp := setFileBreakpoint(p, t, fixture.Source, 12)
for { for {
if err := grp.Continue(); err != nil { err := grp.Continue()
if _, exited := err.(proc.ErrProcessExited); exited { if errors.As(err, &proc.ErrProcessExited{}) {
break break
}
assertNoError(err, t, "Continue()")
} }
assertNoError(err, t, "Continue()")
} }
t.Logf("TotalHitCount: %d", bp.Logical.TotalHitCount) t.Logf("TotalHitCount: %d", bp.Logical.TotalHitCount)
@ -1241,12 +1240,11 @@ func TestHardcodedBreakpointCounts(t *testing.T) {
withTestProcess("hcbpcountstest", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) { withTestProcess("hcbpcountstest", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {
counts := map[int64]int{} counts := map[int64]int{}
for { for {
if err := grp.Continue(); err != nil { err := grp.Continue()
if _, exited := err.(proc.ErrProcessExited); exited { if errors.As(err, &proc.ErrProcessExited{}) {
break break
}
assertNoError(err, t, "Continue()")
} }
assertNoError(err, t, "Continue()")
for _, th := range p.ThreadList() { for _, th := range p.ThreadList() {
bp := th.Breakpoint().Breakpoint bp := th.Breakpoint().Breakpoint
@ -1298,12 +1296,11 @@ func TestBreakpointCountsWithDetection(t *testing.T) {
bp := setFileBreakpoint(p, t, fixture.Source, 12) bp := setFileBreakpoint(p, t, fixture.Source, 12)
for { for {
if err := grp.Continue(); err != nil { err := grp.Continue()
if _, exited := err.(proc.ErrProcessExited); exited { if errors.As(err, &proc.ErrProcessExited{}) {
break break
}
assertNoError(err, t, "Continue()")
} }
assertNoError(err, t, "Continue()")
for _, th := range p.ThreadList() { for _, th := range p.ThreadList() {
if bp := th.Breakpoint(); bp.Breakpoint == nil { if bp := th.Breakpoint(); bp.Breakpoint == nil {
continue continue
@ -1526,16 +1523,16 @@ func TestCondBreakpointError(t *testing.T) {
err = grp.Continue() err = grp.Continue()
if err != nil { if err != nil {
if _, exited := err.(proc.ErrProcessExited); !exited { if !errors.As(err, &proc.ErrProcessExited{}) {
t.Fatalf("Unexpected error on second Continue(): %v", err) t.Fatalf("Unexpected error on second Continue(): %v", err)
} }
} else { return
nvar := evalVariable(p, t, "n") }
nvar := evalVariable(p, t, "n")
n, _ := constant.Int64Val(nvar.Value) n, _ := constant.Int64Val(nvar.Value)
if n != 7 { if n != 7 {
t.Fatalf("Stopped on wrong goroutine %d\n", n) t.Fatalf("Stopped on wrong goroutine %d\n", n)
}
} }
}) })
} }
@ -1732,10 +1729,8 @@ func TestIssue414(t *testing.T) {
} else { } else {
err = grp.Next() err = grp.Next()
} }
if err != nil { if errors.As(err, &proc.ErrProcessExited{}) {
if _, exited := err.(proc.ErrProcessExited); exited { break
break
}
} }
assertNoError(err, t, "Step()") assertNoError(err, t, "Step()")
} }
@ -1804,13 +1799,12 @@ func TestCmdLineArgs(t *testing.T) {
if bp.Breakpoint != nil && bp.Logical.Name == proc.UnrecoveredPanic { if bp.Breakpoint != nil && bp.Logical.Name == proc.UnrecoveredPanic {
t.Fatalf("testing args failed on unrecovered-panic breakpoint: %v", bp) t.Fatalf("testing args failed on unrecovered-panic breakpoint: %v", bp)
} }
exit, exited := err.(proc.ErrProcessExited) var exit proc.ErrProcessExited
if !exited { if !errors.As(err, &exit) {
t.Fatalf("Process did not exit: %v", err) t.Fatalf("Process did not exit: %v", err)
} else { }
if exit.Status != 0 { if exit.Status != 0 {
t.Fatalf("process exited with invalid status %d", exit.Status) t.Fatalf("process exited with invalid status %d", exit.Status)
}
} }
} }
@ -4442,14 +4436,10 @@ func TestStepOutPreservesGoroutine(t *testing.T) {
logState() logState()
err = grp.StepOut() err = grp.StepOut()
if err != nil { if errors.As(err, &proc.ErrProcessExited{}) {
_, isexited := err.(proc.ErrProcessExited) return
if !isexited {
assertNoError(err, t, "StepOut()")
} else {
return
}
} }
assertNoError(err, t, "StepOut()")
logState() logState()
@ -4817,12 +4807,11 @@ func TestWatchpointCounts(t *testing.T) {
assertNoError(err, t, "SetWatchpoint(write-only)") assertNoError(err, t, "SetWatchpoint(write-only)")
for { for {
if err := grp.Continue(); err != nil { err := grp.Continue()
if errors.As(err, &proc.ErrProcessExited{}) { if errors.As(err, &proc.ErrProcessExited{}) {
break break
}
assertNoError(err, t, "Continue()")
} }
assertNoError(err, t, "Continue()")
} }
t.Logf("TotalHitCount: %d", bp.Logical.TotalHitCount) t.Logf("TotalHitCount: %d", bp.Logical.TotalHitCount)
@ -5137,13 +5126,10 @@ func TestFollowExec(t *testing.T) {
for { for {
t.Log("Continuing") t.Log("Continuing")
err := grp.Continue() err := grp.Continue()
if err != nil { if errors.As(err, &proc.ErrProcessExited{}) {
_, isexited := err.(proc.ErrProcessExited) break
if isexited {
break
}
assertNoError(err, t, "Continue")
} }
assertNoError(err, t, "Continue")
if first { if first {
first = false first = false
@ -5313,12 +5299,11 @@ func TestFollowExecRegexFilter(t *testing.T) {
assertNoError(grp.Continue(), t, "Continue 3") assertNoError(grp.Continue(), t, "Continue 3")
assertFunctionName(grp.Selected, t, "main.traceme3", "Program did not continue to the expected location (3)") assertFunctionName(grp.Selected, t, "main.traceme3", "Program did not continue to the expected location (3)")
err := grp.Continue() err := grp.Continue()
if err != nil { if errors.As(err, &proc.ErrProcessExited{}) {
_, isexited := err.(proc.ErrProcessExited) return
if !isexited { }
assertNoError(err, t, "Continue 4") assertNoError(err, t, "Continue 4")
} if err == nil {
} else {
t.Fatal("process did not exit after 4 continues") t.Fatal("process did not exit after 4 continues")
} }
}) })

@ -1,6 +1,7 @@
package proc_test package proc_test
import ( import (
"errors"
"fmt" "fmt"
"go/constant" "go/constant"
"go/parser" "go/parser"
@ -80,12 +81,11 @@ func TestScope(t *testing.T) {
t.Logf("%d breakpoints set", len(scopeChecks)) t.Logf("%d breakpoints set", len(scopeChecks))
for { for {
if err := grp.Continue(); err != nil { err := grp.Continue()
if _, exited := err.(proc.ErrProcessExited); exited { if errors.As(err, &proc.ErrProcessExited{}) {
break break
}
assertNoError(err, t, "Continue()")
} }
assertNoError(err, t, "Continue()")
bp := p.CurrentThread().Breakpoint() bp := p.CurrentThread().Breakpoint()
scopeCheck := findScopeCheck(scopeChecks, bp.Line) scopeCheck := findScopeCheck(scopeChecks, bp.Line)
@ -104,7 +104,7 @@ func TestScope(t *testing.T) {
} }
scopeCheck.ok = true scopeCheck.ok = true
err := p.ClearBreakpoint(bp.Addr) err = p.ClearBreakpoint(bp.Addr)
assertNoError(err, t, "ClearBreakpoint") assertNoError(err, t, "ClearBreakpoint")
} }
}) })