github.com/gojue/ecapture@v0.8.2/pkg/proc/proc_test.go (about)

     1  package proc
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"os"
     7  	"os/exec"
     8  	"path/filepath"
     9  	"testing"
    10  )
    11  
    12  const ELF_BUILD_BY_CGO = "go_elf"
    13  
    14  func TestExtraceGoVersion(t *testing.T) {
    15  	path := fmt.Sprintf("/proc/%d/exe", os.Getppid())
    16  	ver, err := ExtraceGoVersion(path)
    17  	if err != nil {
    18  		t.Log(err)
    19  		return
    20  	}
    21  	t.Log(ver)
    22  }
    23  
    24  // cd go_elf
    25  // CGO_ENABLED=1 go build .
    26  func TestExtraceGoVersionGccgo(t *testing.T) {
    27  	e := os.Chdir("go_elf")
    28  	if e != nil {
    29  		t.Fatalf("chdir error:%v\n", e)
    30  	}
    31  
    32  	p, e := os.Getwd()
    33  	if e != nil {
    34  		t.Fatalf("Getwd error:%v", e)
    35  	}
    36  	t.Logf("pwd:%s", p)
    37  
    38  	// go build go_elf
    39  	pathEnv := os.Getenv("PATH")
    40  	t.Logf("env $PATH:%s", pathEnv)
    41  
    42  	// mkdir directories
    43  	goBuildPath := filepath.Join(os.TempDir(), "go-build")
    44  	goEnvPath := filepath.Join(os.TempDir(), "go-env")
    45  	e = os.MkdirAll(goBuildPath, os.ModePerm)
    46  	if e != nil {
    47  		t.Fatal(e)
    48  	}
    49  	e = os.MkdirAll(goEnvPath, os.ModePerm)
    50  	if e != nil {
    51  		t.Fatal(e)
    52  	}
    53  
    54  	c := exec.Command("go", "build", "-v", ".")
    55  
    56  	var outb, errb bytes.Buffer
    57  	c.Stdout = &outb
    58  	c.Stderr = &errb
    59  	e = c.Run()
    60  	t.Logf("output:%s, errput:%s", outb.String(), errb.String())
    61  	if e != nil {
    62  		c.Stderr = os.Stderr
    63  		t.Fatalf("go build failed:%v", e)
    64  	}
    65  
    66  	p1 := filepath.Join(p, ELF_BUILD_BY_CGO)
    67  	ver, err := ExtraceGoVersion(p1)
    68  	t.Logf("Extrace GoVersion from CGO ELF :%s", p1)
    69  	if err != nil {
    70  		t.Fatal(err)
    71  	}
    72  	t.Logf("version found :%v", ver)
    73  }