github.com/cnboonhan/delve@v0.0.0-20230908061759-363f2388c2fb/service/debugger/debugger_test.go (about) 1 package debugger 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 "runtime" 8 "strings" 9 "testing" 10 11 "github.com/go-delve/delve/pkg/gobuild" 12 protest "github.com/go-delve/delve/pkg/proc/test" 13 "github.com/go-delve/delve/service/api" 14 ) 15 16 func TestDebugger_LaunchNoMain(t *testing.T) { 17 fixturesDir := protest.FindFixturesDir() 18 nomaindir := filepath.Join(fixturesDir, "nomaindir") 19 debugname := "debug" 20 exepath := filepath.Join(nomaindir, debugname) 21 defer os.Remove(exepath) 22 if err := gobuild.GoBuild(debugname, []string{nomaindir}, fmt.Sprintf("-o %s", exepath)); err != nil { 23 t.Fatalf("go build error %v", err) 24 } 25 26 d := new(Debugger) 27 _, err := d.Launch([]string{exepath}, ".") 28 if err == nil { 29 t.Fatalf("expected error but none was generated") 30 } 31 if err != api.ErrNotExecutable { 32 t.Fatalf("expected error \"%v\" got \"%v\"", api.ErrNotExecutable, err) 33 } 34 } 35 36 func TestDebugger_LaunchInvalidFormat(t *testing.T) { 37 goos := os.Getenv("GOOS") 38 goarch := os.Getenv("GOARCH") 39 defer func() { 40 // restore environment values 41 os.Setenv("GOOS", goos) 42 os.Setenv("GOARCH", goarch) 43 }() 44 fixturesDir := protest.FindFixturesDir() 45 buildtestdir := filepath.Join(fixturesDir, "buildtest") 46 debugname := "debug" 47 switchOS := map[string]string{ 48 "darwin": "linux", 49 "windows": "linux", 50 "freebsd": "windows", 51 "linux": "windows", 52 } 53 if runtime.GOARCH == "arm64" && runtime.GOOS == "linux" { 54 os.Setenv("GOARCH", "amd64") 55 } 56 if runtime.GOARCH == "ppc64le" && runtime.GOOS == "linux" { 57 os.Setenv("GOARCH", "amd64") 58 } 59 os.Setenv("GOOS", switchOS[runtime.GOOS]) 60 exepath := filepath.Join(buildtestdir, debugname) 61 if err := gobuild.GoBuild(debugname, []string{buildtestdir}, fmt.Sprintf("-o %s", exepath)); err != nil { 62 t.Fatalf("go build error %v", err) 63 } 64 defer os.Remove(exepath) 65 66 d := new(Debugger) 67 _, err := d.Launch([]string{exepath}, ".") 68 if err == nil { 69 t.Fatalf("expected error but none was generated") 70 } 71 if err != api.ErrNotExecutable { 72 t.Fatalf("expected error %q got \"%v\"", api.ErrNotExecutable, err) 73 } 74 } 75 76 func TestDebugger_LaunchCurrentDir(t *testing.T) { 77 fixturesDir := protest.FindFixturesDir() 78 testDir := filepath.Join(fixturesDir, "buildtest") 79 debugname := "debug" 80 exepath := filepath.Join(testDir, debugname) 81 originalPath, err := os.Getwd() 82 if err != nil { 83 t.Fatal(err) 84 } 85 defer os.Chdir(originalPath) 86 defer func() { 87 if err := os.Remove(exepath); err != nil { 88 t.Fatalf("error removing executable %v", err) 89 } 90 }() 91 if err := gobuild.GoBuild(debugname, []string{testDir}, fmt.Sprintf("-o %s", exepath)); err != nil { 92 t.Fatalf("go build error %v", err) 93 } 94 95 os.Chdir(testDir) 96 97 d := new(Debugger) 98 d.config = &Config{} 99 _, err = d.Launch([]string{debugname}, ".") 100 if err == nil { 101 t.Fatal("expected error but none was generated") 102 } 103 if err != nil && !strings.Contains(err.Error(), "unknown backend") { 104 t.Fatal(err) 105 } 106 }