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  }