diff options
Diffstat (limited to 'tests/core/build_stdlib')
-rw-r--r-- | tests/core/build_stdlib/BUILD.bazel | 6 | ||||
-rw-r--r-- | tests/core/build_stdlib/README.rst | 11 | ||||
-rw-r--r-- | tests/core/build_stdlib/build_stdlib_test.go | 97 |
3 files changed, 114 insertions, 0 deletions
diff --git a/tests/core/build_stdlib/BUILD.bazel b/tests/core/build_stdlib/BUILD.bazel new file mode 100644 index 00000000..2d619fc3 --- /dev/null +++ b/tests/core/build_stdlib/BUILD.bazel @@ -0,0 +1,6 @@ +load("@io_bazel_rules_go//go/tools/bazel_testing:def.bzl", "go_bazel_test") + +go_bazel_test( + name = "build_stdlib_test", + srcs = ["build_stdlib_test.go"], +) diff --git a/tests/core/build_stdlib/README.rst b/tests/core/build_stdlib/README.rst new file mode 100644 index 00000000..38a0f100 --- /dev/null +++ b/tests/core/build_stdlib/README.rst @@ -0,0 +1,11 @@ +Building with standard libraries with missing .a files +=========== + +Tests to ensure that building with Go 1.20 and later versions of Go, which no longer +include precompiled standard library .a files, continues to work + +build_stdlib_test +-------------- + +Test that a simple binary depending on a simple library can build when the WORKSPACE's +go version is set to 1.20rc1.
\ No newline at end of file diff --git a/tests/core/build_stdlib/build_stdlib_test.go b/tests/core/build_stdlib/build_stdlib_test.go new file mode 100644 index 00000000..31851b3a --- /dev/null +++ b/tests/core/build_stdlib/build_stdlib_test.go @@ -0,0 +1,97 @@ +// Copyright 2022 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 build_stdlib_test + +import ( + "bytes" + "os" + "testing" + + "github.com/bazelbuild/rules_go/go/tools/bazel_testing" +) + +func TestMain(m *testing.M) { + bazel_testing.TestMain(m, bazel_testing.Args{ + Main: ` +-- BUILD.bazel -- +load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") + +go_binary( + name = "program", + srcs = ["main.go"], + deps = [":library"], + visibility = ["//visibility:public"], +) + +go_library( + name = "library", + srcs = ["library.go"], + importpath = "example.com/library" +) +-- main.go -- +package main + +import "example.com/library" + +func main() { + library.F() +} +-- library.go -- +package library + +func F() {} +`, + }) +} + +const origWrapSDK = `go_wrap_sdk( + name = "go_sdk", + root_file = "@local_go_sdk//:ROOT", +) + +go_register_toolchains()` + +const toolchain120 = `go_register_toolchains(version = "1.20rc1")` + +func TestBoringcryptoExperimentPresent(t *testing.T) { + mustReplaceInFile(t, "WORKSPACE", origWrapSDK, toolchain120) + defer mustReplaceInFile(t, "WORKSPACE", toolchain120, origWrapSDK) + + cmd := bazel_testing.BazelCmd("build", "//:program") + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stdout + if err := cmd.Run(); err != nil { + t.Fatal("failed to run bazel build: ", err) + } + +} + +func mustReplaceInFile(t *testing.T, path, old, new string) { + t.Helper() + if old == new { + return + } + data, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + if !bytes.Contains(data, []byte(old)) { + t.Fatalf("bytes to replace %q not found in file %q with contents, %q", old, path, data) + } + data = bytes.ReplaceAll(data, []byte(old), []byte(new)) + if err := os.WriteFile(path, data, 0666); err != nil { + t.Fatal(err) + } +} |