aboutsummaryrefslogtreecommitdiff
path: root/tests/core/stdlib/buildid_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'tests/core/stdlib/buildid_test.go')
-rw-r--r--tests/core/stdlib/buildid_test.go93
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/core/stdlib/buildid_test.go b/tests/core/stdlib/buildid_test.go
new file mode 100644
index 00000000..d95ba903
--- /dev/null
+++ b/tests/core/stdlib/buildid_test.go
@@ -0,0 +1,93 @@
+//go:build go1.10
+// +build go1.10
+
+/* Copyright 2018 The Bazel Authors. All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package buildid_test
+
+import (
+ "bytes"
+ "errors"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "testing"
+
+ "github.com/bazelbuild/rules_go/go/runfiles"
+)
+
+func TestEmptyBuildID(t *testing.T) {
+ // Locate the buildid tool and several archive files to check.
+ // fmt.a - pure go
+ // crypto/aes.a - contains assembly
+ // runtime/cgo.a - contains cgo
+ // The path may vary depending on platform and architecture, so just
+ // do a search.
+ var buildidPath string
+ pkgPaths := map[string]string{
+ "fmt.a": "",
+ "aes.a": "",
+ "cgo.a": "",
+ }
+ stdlibPkgDir, err := runfiles.Rlocation("io_bazel_rules_go/stdlib_/pkg")
+ if err != nil {
+ t.Fatal(err)
+ }
+ n := len(pkgPaths)
+ done := errors.New("done")
+ var visit filepath.WalkFunc
+ visit = func(path string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+ if filepath.Base(path) == "buildid" && (info.Mode()&0111) != 0 {
+ buildidPath = path
+ }
+ for pkg := range pkgPaths {
+ if filepath.Base(path) == pkg {
+ pkgPaths[pkg] = path
+ n--
+ }
+ }
+ if buildidPath != "" && n == 0 {
+ return done
+ }
+ return nil
+ }
+ if err = filepath.Walk(stdlibPkgDir, visit); err != nil && err != done {
+ t.Fatal(err)
+ }
+ if buildidPath == "" {
+ t.Fatal("buildid not found")
+ }
+
+ for pkg, path := range pkgPaths {
+ if path == "" {
+ t.Errorf("could not locate %s", pkg)
+ continue
+ }
+ // Equivalent to: go tool buildid pkg.a
+ // It's an error if this produces any output.
+ cmd := exec.Command(buildidPath, path)
+ out, err := cmd.Output()
+ if err != nil {
+ t.Error(err)
+ }
+ if len(bytes.TrimSpace(out)) > 0 {
+ t.Errorf("%s: unexpected buildid: %s", path, out)
+ }
+ }
+}