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 }