Source file
test/linkx_run.go
1
2
3
4
5
6
7
8
9
10
11 package main
12
13 import (
14 "bytes"
15 "fmt"
16 "os"
17 "os/exec"
18 "strings"
19 )
20
21 func main() {
22
23 test("=")
24 }
25
26 func test(sep string) {
27
28 cmd := exec.Command("go", "run", "-ldflags=-X main.tbd"+sep+"hello -X main.overwrite"+sep+"trumped -X main.nosuchsymbol"+sep+"neverseen", "linkx.go")
29 var out, errbuf bytes.Buffer
30 cmd.Stdout = &out
31 cmd.Stderr = &errbuf
32 err := cmd.Run()
33 if err != nil {
34 fmt.Println(errbuf.String())
35 fmt.Println(out.String())
36 fmt.Println(err)
37 os.Exit(1)
38 }
39
40 want := "hello\nhello\nhello\ntrumped\ntrumped\ntrumped\n"
41 got := out.String()
42 if got != want {
43 fmt.Printf("got %q want %q\n", got, want)
44 os.Exit(1)
45 }
46
47
48 cmd = exec.Command("go", "run", "-ldflags=-X main.tbd", "linkx.go")
49 _, err = cmd.CombinedOutput()
50 if err == nil {
51 fmt.Println("-X linker flag should not accept keys without values")
52 os.Exit(1)
53 }
54
55
56 cmd = exec.Command("go", "run", "-ldflags=-X main.b=false -X main.x=42", "linkx.go")
57 outx, err := cmd.CombinedOutput()
58 if err == nil {
59 fmt.Println("-X linker flag should not overwrite non-strings")
60 os.Exit(1)
61 }
62 outstr := string(outx)
63 if !strings.Contains(outstr, "main.b") {
64 fmt.Printf("-X linker flag did not diagnose overwrite of main.b:\n%s\n", outstr)
65 os.Exit(1)
66 }
67 if !strings.Contains(outstr, "main.x") {
68 fmt.Printf("-X linker flag did not diagnose overwrite of main.x:\n%s\n", outstr)
69 os.Exit(1)
70 }
71 }
72
View as plain text