2015-01-16 03:29:16 +03:00
|
|
|
// Copyright 2015 The Go Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package dashboard
|
|
|
|
|
|
|
|
import (
|
2019-10-16 09:02:29 +03:00
|
|
|
"bytes"
|
2019-03-07 20:44:41 +03:00
|
|
|
"fmt"
|
2019-10-16 09:02:29 +03:00
|
|
|
"os/exec"
|
|
|
|
"path/filepath"
|
2019-11-07 16:15:55 +03:00
|
|
|
"regexp"
|
2019-10-16 09:02:29 +03:00
|
|
|
"runtime"
|
|
|
|
"sort"
|
2015-01-16 03:29:16 +03:00
|
|
|
"strings"
|
|
|
|
"testing"
|
2019-02-14 05:18:06 +03:00
|
|
|
"time"
|
2020-08-20 18:53:58 +03:00
|
|
|
|
|
|
|
"github.com/google/go-cmp/cmp"
|
2015-01-16 03:29:16 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestOSARCHAccessors(t *testing.T) {
|
|
|
|
valid := func(s string) bool { return s != "" && !strings.Contains(s, "-") }
|
|
|
|
for _, conf := range Builders {
|
|
|
|
os := conf.GOOS()
|
|
|
|
arch := conf.GOARCH()
|
|
|
|
osArch := os + "-" + arch
|
|
|
|
if !valid(os) || !valid(arch) || !(conf.Name == osArch || strings.HasPrefix(conf.Name, osArch+"-")) {
|
|
|
|
t.Errorf("OS+ARCH(%q) = %q, %q; invalid", conf.Name, os, arch)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2017-04-12 03:35:37 +03:00
|
|
|
|
2019-02-14 05:18:06 +03:00
|
|
|
func TestDistTestsExecTimeout(t *testing.T) {
|
|
|
|
tests := []struct {
|
|
|
|
c *BuildConfig
|
|
|
|
want time.Duration
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
&BuildConfig{
|
|
|
|
env: []string{},
|
|
|
|
testHostConf: &HostConfig{},
|
|
|
|
},
|
|
|
|
20 * time.Minute,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
&BuildConfig{
|
|
|
|
env: []string{"GO_TEST_TIMEOUT_SCALE=2"},
|
|
|
|
testHostConf: &HostConfig{},
|
|
|
|
},
|
|
|
|
40 * time.Minute,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
&BuildConfig{
|
|
|
|
env: []string{},
|
|
|
|
testHostConf: &HostConfig{
|
|
|
|
env: []string{"GO_TEST_TIMEOUT_SCALE=3"},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
60 * time.Minute,
|
|
|
|
},
|
|
|
|
// BuildConfig's env takes precedence:
|
|
|
|
{
|
|
|
|
&BuildConfig{
|
|
|
|
env: []string{"GO_TEST_TIMEOUT_SCALE=2"},
|
|
|
|
testHostConf: &HostConfig{
|
|
|
|
env: []string{"GO_TEST_TIMEOUT_SCALE=3"},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
40 * time.Minute,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
for i, tt := range tests {
|
|
|
|
got := tt.c.DistTestsExecTimeout(nil)
|
|
|
|
if got != tt.want {
|
|
|
|
t.Errorf("%d. got %v; want %v", i, got, tt.want)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-07 20:44:41 +03:00
|
|
|
// TestTrybots tests that a given repo & its branch yields the provided
|
|
|
|
// complete set of builders. See also: TestBuilders, which tests both trybots
|
|
|
|
// and post-submit builders, both at arbitrary branches.
|
|
|
|
func TestTrybots(t *testing.T) {
|
|
|
|
tests := []struct {
|
|
|
|
repo string // "go", "net", etc
|
|
|
|
branch string // of repo
|
|
|
|
want []string
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
repo: "go",
|
|
|
|
branch: "master",
|
|
|
|
want: []string{
|
2019-04-18 22:45:32 +03:00
|
|
|
"android-amd64-emu",
|
2019-03-07 20:44:41 +03:00
|
|
|
"freebsd-amd64-12_0",
|
|
|
|
"js-wasm",
|
|
|
|
"linux-386",
|
|
|
|
"linux-amd64",
|
|
|
|
"linux-amd64-race",
|
2019-05-10 22:28:40 +03:00
|
|
|
"misc-compile-other",
|
|
|
|
"misc-compile-darwin",
|
2020-11-03 06:25:51 +03:00
|
|
|
"misc-compile-darwinarm64",
|
2019-05-10 22:28:40 +03:00
|
|
|
"misc-compile-linuxarm",
|
|
|
|
"misc-compile-solaris",
|
2019-03-07 20:44:41 +03:00
|
|
|
"misc-compile-freebsd",
|
|
|
|
"misc-compile-mips",
|
|
|
|
"misc-compile-netbsd",
|
|
|
|
"misc-compile-openbsd",
|
|
|
|
"misc-compile-plan9",
|
|
|
|
"misc-compile-ppc",
|
|
|
|
"openbsd-amd64-64",
|
|
|
|
"windows-386-2008",
|
|
|
|
"windows-amd64-2016",
|
|
|
|
},
|
|
|
|
},
|
2019-10-11 21:47:51 +03:00
|
|
|
{
|
|
|
|
repo: "go",
|
|
|
|
branch: "dev.link",
|
|
|
|
want: []string{
|
2020-03-14 00:09:21 +03:00
|
|
|
"android-amd64-emu",
|
2019-10-11 21:47:51 +03:00
|
|
|
"freebsd-amd64-12_0",
|
|
|
|
"js-wasm",
|
|
|
|
"linux-386",
|
|
|
|
"linux-amd64",
|
|
|
|
"linux-amd64-race",
|
|
|
|
"misc-compile-other",
|
|
|
|
"misc-compile-darwin",
|
2020-11-03 06:25:51 +03:00
|
|
|
"misc-compile-darwinarm64",
|
2019-10-11 21:47:51 +03:00
|
|
|
"misc-compile-linuxarm",
|
|
|
|
"misc-compile-solaris",
|
|
|
|
"misc-compile-freebsd",
|
|
|
|
"misc-compile-mips",
|
|
|
|
"misc-compile-netbsd",
|
|
|
|
"misc-compile-openbsd",
|
|
|
|
"misc-compile-plan9",
|
|
|
|
"misc-compile-ppc",
|
|
|
|
"openbsd-amd64-64",
|
|
|
|
"windows-386-2008",
|
|
|
|
"windows-amd64-2016",
|
|
|
|
},
|
|
|
|
},
|
2020-11-03 06:25:51 +03:00
|
|
|
{
|
|
|
|
repo: "go",
|
|
|
|
branch: "release-branch.go1.16",
|
|
|
|
want: []string{
|
|
|
|
"android-amd64-emu",
|
|
|
|
"freebsd-amd64-12_0",
|
|
|
|
"js-wasm",
|
|
|
|
"linux-386",
|
|
|
|
"linux-amd64",
|
|
|
|
"linux-amd64-race",
|
|
|
|
"misc-compile-darwin",
|
|
|
|
"misc-compile-darwinarm64", // Starts with Go 1.16.
|
|
|
|
"misc-compile-freebsd",
|
|
|
|
"misc-compile-linuxarm",
|
|
|
|
"misc-compile-mips",
|
|
|
|
"misc-compile-netbsd",
|
|
|
|
"misc-compile-openbsd",
|
|
|
|
"misc-compile-other",
|
|
|
|
"misc-compile-plan9",
|
|
|
|
"misc-compile-ppc",
|
|
|
|
"misc-compile-solaris",
|
|
|
|
"openbsd-amd64-64",
|
|
|
|
"windows-386-2008",
|
|
|
|
"windows-amd64-2016",
|
|
|
|
|
|
|
|
// Include longtest builders on Go repo release branches. See issue 37827.
|
|
|
|
"linux-386-longtest",
|
|
|
|
"linux-amd64-longtest",
|
|
|
|
"windows-amd64-longtest",
|
|
|
|
},
|
|
|
|
},
|
2019-03-07 20:44:41 +03:00
|
|
|
{
|
|
|
|
repo: "go",
|
2020-05-27 01:12:12 +03:00
|
|
|
branch: "release-branch.go1.14",
|
2019-03-07 20:44:41 +03:00
|
|
|
want: []string{
|
2020-05-27 01:12:12 +03:00
|
|
|
"android-amd64-emu",
|
2019-03-07 20:44:41 +03:00
|
|
|
"freebsd-amd64-12_0",
|
|
|
|
"js-wasm",
|
|
|
|
"linux-386",
|
|
|
|
"linux-amd64",
|
|
|
|
"linux-amd64-race",
|
2019-05-10 22:28:40 +03:00
|
|
|
"misc-compile-darwin",
|
2019-03-07 20:44:41 +03:00
|
|
|
"misc-compile-freebsd",
|
2019-05-10 22:28:40 +03:00
|
|
|
"misc-compile-linuxarm",
|
2019-03-07 20:44:41 +03:00
|
|
|
"misc-compile-mips",
|
|
|
|
"misc-compile-netbsd",
|
|
|
|
"misc-compile-openbsd",
|
2019-05-10 22:28:40 +03:00
|
|
|
"misc-compile-other",
|
2019-03-07 20:44:41 +03:00
|
|
|
"misc-compile-plan9",
|
|
|
|
"misc-compile-ppc",
|
2019-05-10 22:28:40 +03:00
|
|
|
"misc-compile-solaris",
|
2019-03-07 20:44:41 +03:00
|
|
|
"openbsd-amd64-64",
|
|
|
|
"windows-386-2008",
|
|
|
|
"windows-amd64-2016",
|
2020-05-27 01:19:05 +03:00
|
|
|
|
|
|
|
// Include longtest builders on Go repo release branches. See issue 37827.
|
|
|
|
"linux-386-longtest",
|
|
|
|
"linux-amd64-longtest",
|
|
|
|
"windows-amd64-longtest",
|
2019-03-07 20:44:41 +03:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
repo: "mobile",
|
|
|
|
branch: "master",
|
|
|
|
want: []string{
|
|
|
|
"android-amd64-emu",
|
|
|
|
"linux-amd64-androidemu",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
repo: "sys",
|
|
|
|
branch: "master",
|
|
|
|
want: []string{
|
2019-04-26 17:04:00 +03:00
|
|
|
"android-amd64-emu",
|
2019-03-07 20:44:41 +03:00
|
|
|
"freebsd-386-11_2",
|
|
|
|
"freebsd-amd64-11_2",
|
|
|
|
"freebsd-amd64-12_0",
|
|
|
|
"linux-386",
|
|
|
|
"linux-amd64",
|
2019-03-11 21:49:56 +03:00
|
|
|
"linux-amd64-race",
|
2020-04-08 19:43:09 +03:00
|
|
|
"netbsd-amd64-9_0",
|
2019-03-07 20:44:41 +03:00
|
|
|
"openbsd-386-64",
|
|
|
|
"openbsd-amd64-64",
|
|
|
|
"windows-386-2008",
|
|
|
|
"windows-amd64-2016",
|
|
|
|
},
|
|
|
|
},
|
2019-03-14 23:35:32 +03:00
|
|
|
{
|
|
|
|
repo: "exp",
|
|
|
|
branch: "master",
|
|
|
|
want: []string{
|
|
|
|
"linux-amd64",
|
|
|
|
"linux-amd64-race",
|
|
|
|
"windows-386-2008",
|
|
|
|
"windows-amd64-2016",
|
|
|
|
},
|
|
|
|
},
|
2019-03-07 20:44:41 +03:00
|
|
|
}
|
|
|
|
for i, tt := range tests {
|
|
|
|
if tt.branch == "" || tt.repo == "" {
|
|
|
|
t.Errorf("incomplete test entry %d", i)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
t.Run(fmt.Sprintf("%s/%s", tt.repo, tt.branch), func(t *testing.T) {
|
|
|
|
var got []string
|
|
|
|
goBranch := tt.branch // hard-code the common case for now
|
|
|
|
for _, bc := range TryBuildersForProject(tt.repo, tt.branch, goBranch) {
|
|
|
|
got = append(got, bc.Name)
|
|
|
|
}
|
|
|
|
m := map[string]bool{}
|
|
|
|
for _, b := range tt.want {
|
|
|
|
m[b] = true
|
|
|
|
}
|
|
|
|
for _, b := range got {
|
|
|
|
if _, ok := m[b]; !ok {
|
|
|
|
t.Errorf("got unexpected %q", b)
|
|
|
|
}
|
|
|
|
delete(m, b)
|
|
|
|
}
|
|
|
|
for b := range m {
|
|
|
|
t.Errorf("missing expected %q", b)
|
2018-10-26 22:21:58 +03:00
|
|
|
}
|
|
|
|
})
|
2017-04-12 03:35:37 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-07 20:44:41 +03:00
|
|
|
// TestBuilderConfig whether a given builder and repo at different
|
|
|
|
// branches is either a post-submit builder, trybot, neither, or both.
|
|
|
|
func TestBuilderConfig(t *testing.T) {
|
|
|
|
// builderConfigWant is bitmask of 4 different things to assert are wanted:
|
|
|
|
// - being a post-submit builder
|
|
|
|
// - NOT being a post-submit builder
|
|
|
|
// - being a trybot builder
|
|
|
|
// - NOT being a post-submit builder
|
|
|
|
type want uint8
|
|
|
|
const (
|
|
|
|
isTrybot want = 1 << iota
|
|
|
|
notTrybot
|
|
|
|
isBuilder // post-submit
|
|
|
|
notBuilder // not post-submit
|
2019-03-01 05:12:29 +03:00
|
|
|
|
2019-03-07 20:44:41 +03:00
|
|
|
none = notTrybot + notBuilder
|
|
|
|
both = isTrybot + isBuilder
|
|
|
|
onlyPost = notTrybot + isBuilder
|
|
|
|
)
|
2019-03-01 05:12:29 +03:00
|
|
|
|
2019-03-07 20:44:41 +03:00
|
|
|
type builderAndRepo struct {
|
|
|
|
testName string
|
|
|
|
builder string
|
|
|
|
repo string
|
|
|
|
branch string
|
|
|
|
goBranch string
|
|
|
|
}
|
dashboard: catch potential pitfall in TestBuilderConfig
Previously, it was possible to accidentally try to specify the
branch name for the Go repository by writing something like:
{b("nacl-386", "go@go1.13"), none},
That looks like it would test the right thing,
but in reality it would be equivalent to:
{b("nacl-386@master", "go"), none},
Because the branch of the builder always overwrites the branch
of the "go" repository.
This is not intuitive and easy to miss when reviewing or reading
the code.
Add a check that detects and panics on this b() API pitfall,
so that it is not accidentally introduced in the future, and
so that code readers don't need to spend time verifying that
none of the existing test cases have fallen victim to it.
Updates golang/go#34738
Change-Id: Id2986e88c0e3585eaa7b45f33de97e1902847305
Reviewed-on: https://go-review.googlesource.com/c/build/+/199817
Reviewed-by: Bryan C. Mills <bcmills@google.com>
2019-10-08 20:08:27 +03:00
|
|
|
// builder may end in "@go1.N" or "@1.N" (as alias for "@release-branch.go1.N") or "@branch-name".
|
|
|
|
// repo (other than "go") may end in "@go1.N" or "@1.N" (as alias for "@release-branch.go1.N").
|
2019-03-07 20:44:41 +03:00
|
|
|
b := func(builder, repo string) builderAndRepo {
|
|
|
|
br := builderAndRepo{
|
|
|
|
testName: builder + "," + repo,
|
|
|
|
builder: builder,
|
|
|
|
goBranch: "master",
|
|
|
|
repo: repo,
|
|
|
|
branch: "master",
|
|
|
|
}
|
|
|
|
if strings.Contains(builder, "@") {
|
|
|
|
f := strings.SplitN(builder, "@", 2)
|
|
|
|
br.builder = f[0]
|
|
|
|
br.goBranch = f[1]
|
|
|
|
}
|
|
|
|
if strings.Contains(repo, "@") {
|
|
|
|
f := strings.SplitN(repo, "@", 2)
|
|
|
|
br.repo = f[0]
|
|
|
|
br.branch = f[1]
|
dashboard: catch potential pitfall in TestBuilderConfig
Previously, it was possible to accidentally try to specify the
branch name for the Go repository by writing something like:
{b("nacl-386", "go@go1.13"), none},
That looks like it would test the right thing,
but in reality it would be equivalent to:
{b("nacl-386@master", "go"), none},
Because the branch of the builder always overwrites the branch
of the "go" repository.
This is not intuitive and easy to miss when reviewing or reading
the code.
Add a check that detects and panics on this b() API pitfall,
so that it is not accidentally introduced in the future, and
so that code readers don't need to spend time verifying that
none of the existing test cases have fallen victim to it.
Updates golang/go#34738
Change-Id: Id2986e88c0e3585eaa7b45f33de97e1902847305
Reviewed-on: https://go-review.googlesource.com/c/build/+/199817
Reviewed-by: Bryan C. Mills <bcmills@google.com>
2019-10-08 20:08:27 +03:00
|
|
|
if br.repo == "go" {
|
|
|
|
panic(fmt.Errorf(`b(%q, %q): for "go" repo, must use the @%s suffix on the builder, not on the repo`, builder, repo, br.branch))
|
|
|
|
}
|
2019-03-07 20:44:41 +03:00
|
|
|
}
|
|
|
|
expandBranch := func(s *string) {
|
|
|
|
if strings.HasPrefix(*s, "go1.") {
|
|
|
|
*s = "release-branch." + *s
|
|
|
|
} else if strings.HasPrefix(*s, "1.") {
|
|
|
|
*s = "release-branch.go" + *s
|
|
|
|
}
|
2019-03-01 05:12:29 +03:00
|
|
|
}
|
2019-03-07 20:44:41 +03:00
|
|
|
expandBranch(&br.branch)
|
|
|
|
expandBranch(&br.goBranch)
|
|
|
|
if br.repo == "go" {
|
|
|
|
br.branch = br.goBranch
|
|
|
|
}
|
|
|
|
return br
|
2019-03-01 05:12:29 +03:00
|
|
|
}
|
|
|
|
tests := []struct {
|
2019-03-07 20:44:41 +03:00
|
|
|
br builderAndRepo
|
|
|
|
want want
|
2019-03-01 05:12:29 +03:00
|
|
|
}{
|
2019-03-07 20:44:41 +03:00
|
|
|
{b("linux-amd64", "go"), both},
|
|
|
|
{b("linux-amd64", "net"), both},
|
|
|
|
{b("linux-amd64", "sys"), both},
|
2019-05-16 23:04:34 +03:00
|
|
|
{b("linux-amd64", "website"), both},
|
2019-03-07 20:44:41 +03:00
|
|
|
|
2019-03-11 07:20:46 +03:00
|
|
|
// Don't test all subrepos on all the builders.
|
|
|
|
{b("linux-amd64-ssacheck", "net"), none},
|
2020-10-05 19:20:33 +03:00
|
|
|
{b("linux-amd64-ssacheck@go1.15", "net"), none},
|
2020-10-07 18:24:42 +03:00
|
|
|
{b("linux-386-softfloat", "crypto"), onlyPost},
|
|
|
|
{b("linux-386-softfloat@go1.16", "crypto"), onlyPost},
|
|
|
|
{b("linux-386-softfloat@go1.15", "crypto"), none},
|
2020-10-05 19:20:33 +03:00
|
|
|
{b("linux-386-387", "crypto"), none},
|
|
|
|
{b("linux-386-387@go1.16", "crypto"), none},
|
|
|
|
{b("linux-386-387@go1.15", "crypto"), onlyPost},
|
|
|
|
{b("linux-386-387@go1.15", "crypto@1.15"), onlyPost},
|
|
|
|
{b("linux-386-387@go1.15", "build"), none},
|
|
|
|
{b("linux-386-387@go1.14", "crypto"), onlyPost},
|
|
|
|
{b("linux-arm-arm5spacemonkey@go1.15", "net"), none},
|
2019-11-25 12:00:55 +03:00
|
|
|
{b("linux-arm-arm5spacemonkey", "exp"), none},
|
|
|
|
{b("linux-arm-arm5spacemonkey", "mobile"), none},
|
2019-03-11 07:20:46 +03:00
|
|
|
|
2019-03-07 20:44:41 +03:00
|
|
|
// The mobile repo requires Go 1.13+.
|
|
|
|
{b("android-amd64-emu", "mobile"), both},
|
|
|
|
{b("android-amd64-emu", "mobile@1.10"), none},
|
|
|
|
{b("android-amd64-emu", "mobile@1.11"), none},
|
|
|
|
{b("android-amd64-emu@go1.10", "mobile"), none},
|
|
|
|
{b("android-amd64-emu@go1.12", "mobile"), none},
|
|
|
|
{b("android-amd64-emu@go1.13", "mobile"), both},
|
|
|
|
{b("android-amd64-emu", "mobile@1.13"), both},
|
2020-08-04 18:53:43 +03:00
|
|
|
{b("freebsd-386-11_1@go1.14", "mobile"), none}, // See golang.org/issue/36506.
|
2020-01-10 23:53:25 +03:00
|
|
|
|
|
|
|
{b("android-amd64-emu", "go"), both},
|
2019-04-26 17:04:00 +03:00
|
|
|
{b("android-amd64-emu", "crypto"), both},
|
|
|
|
{b("android-amd64-emu", "net"), both},
|
|
|
|
{b("android-amd64-emu", "sync"), both},
|
|
|
|
{b("android-amd64-emu", "sys"), both},
|
|
|
|
{b("android-amd64-emu", "text"), both},
|
|
|
|
{b("android-amd64-emu", "time"), both},
|
|
|
|
{b("android-amd64-emu", "tools"), both},
|
2019-08-29 16:22:13 +03:00
|
|
|
{b("android-amd64-emu", "website"), none},
|
2019-03-07 20:44:41 +03:00
|
|
|
|
|
|
|
{b("android-386-emu", "go"), onlyPost},
|
|
|
|
{b("android-386-emu", "mobile"), onlyPost},
|
|
|
|
{b("android-386-emu", "mobile@1.10"), none},
|
|
|
|
{b("android-386-emu", "mobile@1.11"), none},
|
|
|
|
{b("android-386-emu@go1.10", "mobile"), none},
|
|
|
|
{b("android-386-emu@go1.12", "mobile"), none},
|
|
|
|
{b("android-386-emu@go1.13", "mobile"), onlyPost},
|
|
|
|
{b("android-386-emu", "mobile@1.13"), onlyPost},
|
|
|
|
|
|
|
|
{b("linux-amd64", "net"), both},
|
|
|
|
{b("linux-amd64", "net@1.12"), both},
|
|
|
|
{b("linux-amd64@go1.12", "net@1.12"), both},
|
|
|
|
{b("linux-amd64", "net@1.11"), both},
|
|
|
|
{b("linux-amd64", "net@1.11"), both},
|
|
|
|
{b("linux-amd64", "net@1.10"), none}, // too old
|
|
|
|
{b("linux-amd64@go1.10", "net"), none}, // too old
|
|
|
|
{b("linux-amd64@go1.12", "net@1.12"), both},
|
|
|
|
|
2019-09-10 02:21:11 +03:00
|
|
|
{b("linux-mips64le-mengzhuo", "go"), onlyPost},
|
|
|
|
{b("linux-mips64le-mengzhuo", "sys"), onlyPost},
|
|
|
|
{b("linux-mips64le-mengzhuo", "net"), onlyPost},
|
|
|
|
|
2020-11-10 20:56:57 +03:00
|
|
|
// OpenBSD.
|
|
|
|
{b("openbsd-amd64-64@go1.16", "go"), both},
|
|
|
|
{b("openbsd-amd64-64@go1.15", "go"), both},
|
|
|
|
{b("openbsd-amd64-64@go1.14", "go"), both},
|
|
|
|
{b("openbsd-amd64-62@go1.16", "go"), none}, // golang.org/issue/42426.
|
|
|
|
{b("openbsd-amd64-62@go1.15", "go"), onlyPost},
|
|
|
|
{b("openbsd-amd64-62@go1.14", "go"), onlyPost},
|
|
|
|
|
2019-03-07 20:44:41 +03:00
|
|
|
// go1.12.html: "Go 1.12 is the last release that is
|
|
|
|
// supported on FreeBSD 10.x [... and 11.1]"
|
2020-08-04 18:53:43 +03:00
|
|
|
// But golang.org/issue/40563 happened.
|
2019-03-07 20:44:41 +03:00
|
|
|
{b("freebsd-amd64-11_1", "go"), none},
|
|
|
|
{b("freebsd-amd64-11_1", "net"), none},
|
2019-12-01 16:33:59 +03:00
|
|
|
{b("freebsd-amd64-11_1", "mobile"), none},
|
2020-08-04 18:53:43 +03:00
|
|
|
{b("freebsd-amd64-11_1@go1.14", "go"), isBuilder},
|
|
|
|
{b("freebsd-amd64-11_1@go1.14", "net"), isBuilder},
|
|
|
|
{b("freebsd-amd64-11_1@go1.14", "mobile"), none},
|
|
|
|
{b("freebsd-amd64-11_1@go1.13", "go"), isBuilder},
|
|
|
|
{b("freebsd-amd64-11_1@go1.13", "net"), isBuilder},
|
2019-12-01 16:33:59 +03:00
|
|
|
{b("freebsd-amd64-11_1@go1.13", "mobile"), none},
|
2019-03-07 20:44:41 +03:00
|
|
|
|
2019-03-13 00:13:50 +03:00
|
|
|
// FreeBSD 12.0
|
|
|
|
{b("freebsd-amd64-12_0", "go"), both},
|
|
|
|
{b("freebsd-amd64-12_0", "net"), both},
|
2019-12-01 16:33:59 +03:00
|
|
|
{b("freebsd-amd64-12_0", "mobile"), none},
|
2019-03-13 00:13:50 +03:00
|
|
|
{b("freebsd-386-12_0", "go"), onlyPost},
|
|
|
|
{b("freebsd-386-12_0", "net"), onlyPost},
|
2019-12-01 16:33:59 +03:00
|
|
|
{b("freebsd-386-12_0", "mobile"), none},
|
2019-03-13 00:13:50 +03:00
|
|
|
|
2019-05-01 01:37:31 +03:00
|
|
|
// NetBSD
|
2020-04-08 19:43:09 +03:00
|
|
|
{b("netbsd-amd64-9_0", "go"), onlyPost},
|
|
|
|
{b("netbsd-amd64-9_0", "net"), onlyPost},
|
2020-04-09 14:59:16 +03:00
|
|
|
{b("netbsd-amd64-9_0", "sys"), both},
|
2020-04-08 19:43:09 +03:00
|
|
|
{b("netbsd-386-9_0", "go"), onlyPost},
|
|
|
|
{b("netbsd-386-9_0", "net"), onlyPost},
|
2019-05-01 01:37:31 +03:00
|
|
|
|
2019-03-13 11:29:15 +03:00
|
|
|
// AIX starts at Go 1.12
|
|
|
|
{b("aix-ppc64", "go"), onlyPost},
|
|
|
|
{b("aix-ppc64", "net"), onlyPost},
|
2019-06-04 11:14:55 +03:00
|
|
|
{b("aix-ppc64", "mobile"), none},
|
|
|
|
{b("aix-ppc64", "exp"), none},
|
2019-10-14 12:31:13 +03:00
|
|
|
{b("aix-ppc64", "term"), onlyPost},
|
2019-03-13 11:29:15 +03:00
|
|
|
{b("aix-ppc64@go1.12", "go"), onlyPost},
|
2019-04-19 17:37:11 +03:00
|
|
|
{b("aix-ppc64@go1.12", "net"), none},
|
2019-06-04 11:14:55 +03:00
|
|
|
{b("aix-ppc64@go1.12", "mobile"), none},
|
2019-04-19 17:37:11 +03:00
|
|
|
{b("aix-ppc64@go1.13", "net"), onlyPost},
|
2019-06-04 11:14:55 +03:00
|
|
|
{b("aix-ppc64@go1.13", "mobile"), none},
|
2020-03-14 00:09:21 +03:00
|
|
|
{b("aix-ppc64@dev.link", "go"), onlyPost},
|
2019-03-13 11:29:15 +03:00
|
|
|
|
2019-03-11 07:20:46 +03:00
|
|
|
{b("linux-amd64-nocgo", "mobile"), none},
|
|
|
|
|
2019-05-01 23:28:43 +03:00
|
|
|
// Virtual mobiledevices
|
2020-10-03 12:37:07 +03:00
|
|
|
{b("ios-arm64-corellium", "go"), isBuilder},
|
2019-05-01 23:28:43 +03:00
|
|
|
{b("android-arm64-corellium", "go"), isBuilder},
|
2019-05-02 01:54:54 +03:00
|
|
|
{b("android-arm-corellium", "go"), isBuilder},
|
2019-05-01 21:33:26 +03:00
|
|
|
|
2020-10-03 12:37:07 +03:00
|
|
|
// Mobile builders that run with GOOS=linux/ios and have
|
2019-03-12 19:21:55 +03:00
|
|
|
// a device attached.
|
|
|
|
{b("linux-amd64-androidemu", "mobile"), both},
|
|
|
|
|
2019-03-01 05:12:29 +03:00
|
|
|
// But the emulators run all:
|
2019-03-07 20:44:41 +03:00
|
|
|
{b("android-amd64-emu", "mobile"), isBuilder},
|
|
|
|
{b("android-386-emu", "mobile"), isBuilder},
|
|
|
|
{b("android-amd64-emu", "net"), isBuilder},
|
|
|
|
{b("android-386-emu", "net"), isBuilder},
|
|
|
|
{b("android-amd64-emu", "go"), isBuilder},
|
|
|
|
{b("android-386-emu", "go"), isBuilder},
|
2019-03-11 07:20:46 +03:00
|
|
|
|
2019-03-11 21:49:56 +03:00
|
|
|
// Only test tip for js/wasm, and only for some repos:
|
2019-03-11 07:20:46 +03:00
|
|
|
{b("js-wasm", "go"), both},
|
2019-03-11 21:49:56 +03:00
|
|
|
{b("js-wasm", "arch"), onlyPost},
|
|
|
|
{b("js-wasm", "crypto"), onlyPost},
|
|
|
|
{b("js-wasm", "sys"), onlyPost},
|
2019-03-11 07:20:46 +03:00
|
|
|
{b("js-wasm", "net"), onlyPost},
|
|
|
|
{b("js-wasm@go1.12", "net"), none},
|
2019-03-11 21:49:56 +03:00
|
|
|
{b("js-wasm", "benchmarks"), none},
|
|
|
|
{b("js-wasm", "debug"), none},
|
|
|
|
{b("js-wasm", "mobile"), none},
|
|
|
|
{b("js-wasm", "perf"), none},
|
|
|
|
{b("js-wasm", "talks"), none},
|
|
|
|
{b("js-wasm", "tools"), none},
|
|
|
|
{b("js-wasm", "tour"), none},
|
|
|
|
{b("js-wasm", "website"), none},
|
|
|
|
|
|
|
|
// Race builders. Linux for all, GCE buidlers for
|
|
|
|
// post-submit, and only post-submit for "go" for
|
|
|
|
// Darwin (limited resources).
|
|
|
|
{b("linux-amd64-race", "go"), both},
|
|
|
|
{b("linux-amd64-race", "net"), both},
|
|
|
|
{b("windows-amd64-race", "go"), onlyPost},
|
|
|
|
{b("windows-amd64-race", "net"), onlyPost},
|
|
|
|
{b("freebsd-amd64-race", "go"), onlyPost},
|
|
|
|
{b("freebsd-amd64-race", "net"), onlyPost},
|
|
|
|
{b("darwin-amd64-race", "go"), onlyPost},
|
|
|
|
{b("darwin-amd64-race", "net"), none},
|
|
|
|
|
|
|
|
// Long test.
|
|
|
|
{b("linux-amd64-longtest", "go"), onlyPost},
|
|
|
|
{b("linux-amd64-longtest", "net"), onlyPost},
|
2020-05-27 01:19:05 +03:00
|
|
|
{b("linux-amd64-longtest@go1.14", "go"), both},
|
2020-05-27 01:12:12 +03:00
|
|
|
{b("linux-amd64-longtest@go1.14", "net"), none},
|
2019-10-28 23:16:36 +03:00
|
|
|
{b("windows-amd64-longtest", "go"), onlyPost},
|
2020-05-27 01:19:05 +03:00
|
|
|
{b("windows-amd64-longtest@go1.14", "go"), both},
|
2019-10-28 23:16:36 +03:00
|
|
|
{b("windows-amd64-longtest", "net"), onlyPost},
|
|
|
|
{b("windows-amd64-longtest", "exp"), onlyPost},
|
|
|
|
{b("windows-amd64-longtest", "mobile"), none},
|
2020-07-01 21:14:47 +03:00
|
|
|
{b("linux-386-longtest", "go"), onlyPost},
|
|
|
|
{b("linux-386-longtest", "net"), onlyPost},
|
|
|
|
{b("linux-386-longtest", "exp"), none},
|
|
|
|
{b("linux-386-longtest", "mobile"), none},
|
2019-03-14 23:35:32 +03:00
|
|
|
|
2019-04-05 08:26:05 +03:00
|
|
|
// Experimental exp repo runs in very few places.
|
2019-03-14 23:35:32 +03:00
|
|
|
{b("linux-amd64", "exp"), both},
|
2019-04-05 08:26:05 +03:00
|
|
|
{b("linux-amd64-race", "exp"), both},
|
|
|
|
{b("linux-amd64-longtest", "exp"), onlyPost},
|
2019-03-14 23:35:32 +03:00
|
|
|
{b("windows-386-2008", "exp"), both},
|
2019-04-05 08:26:05 +03:00
|
|
|
{b("windows-amd64-2016", "exp"), both},
|
|
|
|
{b("darwin-amd64-10_14", "exp"), onlyPost},
|
2019-11-19 17:55:01 +03:00
|
|
|
{b("darwin-amd64-10_15", "exp"), onlyPost},
|
2019-04-05 08:26:05 +03:00
|
|
|
// ... but not on most others:
|
2019-09-28 20:43:42 +03:00
|
|
|
{b("darwin-amd64-10_12", "exp"), none},
|
2020-08-04 18:53:43 +03:00
|
|
|
{b("freebsd-386-11_1@go1.14", "exp"), none},
|
2019-04-05 08:26:05 +03:00
|
|
|
{b("freebsd-386-11_2", "exp"), none},
|
|
|
|
{b("freebsd-386-12_0", "exp"), none},
|
2020-08-04 18:53:43 +03:00
|
|
|
{b("freebsd-amd64-11_1@go1.14", "exp"), none},
|
2019-04-05 08:26:05 +03:00
|
|
|
{b("freebsd-amd64-11_2", "exp"), none},
|
|
|
|
{b("freebsd-amd64-12_0", "exp"), none},
|
|
|
|
{b("openbsd-amd64-62", "exp"), none},
|
|
|
|
{b("openbsd-amd64-64", "exp"), none},
|
|
|
|
{b("js-wasm", "exp"), none},
|
|
|
|
|
|
|
|
// exp is experimental; it doesn't test against release branches.
|
|
|
|
{b("linux-amd64@go1.12", "exp"), none},
|
2019-03-18 19:48:22 +03:00
|
|
|
|
2019-12-07 08:14:28 +03:00
|
|
|
// the build repo is only really useful for linux-amd64 (where we run it),
|
|
|
|
// and darwin-amd64 and perhaps windows-amd64 (for stuff like gomote).
|
|
|
|
// No need for any other operating systems to use it.
|
|
|
|
{b("linux-amd64", "build"), both},
|
|
|
|
{b("linux-amd64-longtest", "build"), onlyPost},
|
|
|
|
{b("windows-amd64-2016", "build"), both},
|
|
|
|
{b("darwin-amd64-10_12", "build"), none},
|
|
|
|
{b("darwin-amd64-10_14", "build"), none},
|
|
|
|
{b("darwin-amd64-10_15", "build"), onlyPost},
|
|
|
|
{b("openbsd-amd64-64", "build"), none},
|
|
|
|
{b("linux-amd64-fedora", "build"), none},
|
|
|
|
{b("linux-amd64-clang", "build"), none},
|
|
|
|
{b("linux-amd64-sid", "build"), none},
|
2019-12-12 20:43:59 +03:00
|
|
|
{b("linux-amd64-nocgo", "build"), none},
|
|
|
|
{b("linux-386-longtest", "build"), none},
|
|
|
|
{b("freebsd-386-11_1", "build"), none},
|
|
|
|
{b("js-wasm", "build"), none},
|
|
|
|
{b("android-386-emu", "build"), none},
|
|
|
|
{b("android-amd64-emu", "build"), none},
|
2019-12-07 08:14:28 +03:00
|
|
|
|
2019-03-18 19:48:22 +03:00
|
|
|
// Only use latest macOS for subrepos, and only amd64:
|
|
|
|
{b("darwin-amd64-10_12", "net"), onlyPost},
|
|
|
|
{b("darwin-amd64-10_11", "net"), none},
|
|
|
|
{b("darwin-amd64-10_11@go1.12", "net"), none},
|
2019-03-27 02:04:31 +03:00
|
|
|
|
2019-11-19 17:55:01 +03:00
|
|
|
{b("darwin-amd64-10_15", "go"), onlyPost},
|
2019-03-27 02:04:31 +03:00
|
|
|
{b("darwin-amd64-10_14", "go"), onlyPost},
|
|
|
|
{b("darwin-amd64-10_12", "go"), onlyPost},
|
2020-03-10 20:26:20 +03:00
|
|
|
{b("darwin-amd64-10_11", "go"), none},
|
|
|
|
{b("darwin-amd64-10_11@go1.14", "go"), onlyPost}, // Go 1.14 is the last release that will run on macOS 10.11 El Capitan.
|
|
|
|
{b("darwin-amd64-10_11@go1.15", "go"), none}, // Go 1.15 will require macOS 10.12 Sierra or later.
|
2020-04-04 06:21:35 +03:00
|
|
|
{b("darwin-386-10_14", "go"), none},
|
2019-08-26 23:40:35 +03:00
|
|
|
{b("darwin-386-10_14@go1.13", "go"), onlyPost},
|
2020-04-04 06:21:35 +03:00
|
|
|
{b("darwin-386-10_14@go1.14", "go"), onlyPost}, // Go 1.14 is the last release that supports 32-bit on macOS.
|
|
|
|
{b("darwin-386-10_14@go1.15", "go"), none},
|
2019-04-03 07:45:29 +03:00
|
|
|
|
2019-04-18 22:33:19 +03:00
|
|
|
// plan9 only lived at master. We didn't support any past releases.
|
|
|
|
// But it's off for now as it's always failing.
|
|
|
|
{b("plan9-386", "go"), none}, // temporarily disabled
|
|
|
|
{b("plan9-386", "net"), none}, // temporarily disabled
|
2019-11-28 13:33:00 +03:00
|
|
|
{b("plan9-386", "exp"), none},
|
|
|
|
{b("plan9-386", "mobile"), none},
|
2019-04-03 08:03:37 +03:00
|
|
|
{b("plan9-386@go1.12", "go"), none},
|
|
|
|
{b("plan9-386@go1.12", "net"), none},
|
|
|
|
{b("plan9-amd64-9front", "go"), onlyPost},
|
2019-11-28 13:33:00 +03:00
|
|
|
{b("plan9-amd64-9front", "exp"), none},
|
|
|
|
{b("plan9-amd64-9front", "mobile"), none},
|
2019-04-03 08:03:37 +03:00
|
|
|
{b("plan9-amd64-9front@go1.12", "go"), none},
|
|
|
|
{b("plan9-amd64-9front", "net"), onlyPost},
|
|
|
|
{b("plan9-amd64-9front@go1.12", "net"), none},
|
|
|
|
{b("plan9-arm", "go"), onlyPost},
|
2019-11-28 13:33:00 +03:00
|
|
|
{b("plan9-arm", "exp"), none},
|
|
|
|
{b("plan9-arm", "mobile"), none},
|
2019-04-03 08:03:37 +03:00
|
|
|
{b("plan9-arm@go1.12", "go"), none},
|
|
|
|
{b("plan9-arm", "net"), onlyPost},
|
|
|
|
{b("plan9-arm@go1.12", "net"), none},
|
2019-04-05 08:26:05 +03:00
|
|
|
|
2019-10-21 18:00:32 +03:00
|
|
|
{b("dragonfly-amd64", "go"), onlyPost},
|
|
|
|
{b("dragonfly-amd64", "net"), onlyPost},
|
|
|
|
{b("dragonfly-amd64@go1.13", "net"), none}, // Dragonfly ABI changes only supported by Go 1.14+
|
|
|
|
{b("dragonfly-amd64@go1.13", "go"), none}, // Dragonfly ABI changes only supported by Go 1.14+
|
2020-04-04 13:40:16 +03:00
|
|
|
{b("dragonfly-amd64-5_8", "go"), onlyPost},
|
|
|
|
{b("dragonfly-amd64-5_8", "net"), onlyPost},
|
|
|
|
{b("dragonfly-amd64-5_8@go1.13", "net"), onlyPost},
|
2020-03-19 17:34:11 +03:00
|
|
|
|
|
|
|
{b("linux-amd64-staticlockranking", "go"), onlyPost},
|
|
|
|
{b("linux-amd64-staticlockranking@go1.15", "go"), onlyPost},
|
|
|
|
{b("linux-amd64-staticlockranking@go1.14", "go"), none},
|
|
|
|
{b("linux-amd64-staticlockranking", "net"), none},
|
2019-03-01 05:12:29 +03:00
|
|
|
}
|
|
|
|
for _, tt := range tests {
|
2019-03-07 20:44:41 +03:00
|
|
|
t.Run(tt.br.testName, func(t *testing.T) {
|
|
|
|
bc, ok := Builders[tt.br.builder]
|
|
|
|
if !ok {
|
|
|
|
t.Fatalf("unknown builder %q", tt.br.builder)
|
|
|
|
}
|
|
|
|
gotPost := bc.BuildsRepoPostSubmit(tt.br.repo, tt.br.branch, tt.br.goBranch)
|
|
|
|
if tt.want&isBuilder != 0 && !gotPost {
|
|
|
|
t.Errorf("not a post-submit builder, but expected")
|
|
|
|
}
|
|
|
|
if tt.want¬Builder != 0 && gotPost {
|
|
|
|
t.Errorf("unexpectedly a post-submit builder")
|
|
|
|
}
|
|
|
|
|
|
|
|
gotTry := bc.BuildsRepoTryBot(tt.br.repo, tt.br.branch, tt.br.goBranch)
|
|
|
|
if tt.want&isTrybot != 0 && !gotTry {
|
|
|
|
t.Errorf("not trybot, but expected")
|
|
|
|
}
|
|
|
|
if tt.want¬Trybot != 0 && gotTry {
|
|
|
|
t.Errorf("unexpectedly a trybot")
|
|
|
|
}
|
|
|
|
|
|
|
|
if t.Failed() {
|
|
|
|
t.Logf("For: %+v", tt.br)
|
|
|
|
}
|
|
|
|
})
|
2019-03-01 05:12:29 +03:00
|
|
|
}
|
|
|
|
}
|
2019-03-01 19:54:25 +03:00
|
|
|
|
2019-03-07 20:44:41 +03:00
|
|
|
func TestHostConfigsAllUsed(t *testing.T) {
|
2020-08-04 19:01:34 +03:00
|
|
|
knownUnused := map[string]bool{
|
|
|
|
// Currently host-linux-armhf-cross and host-linux-armel-cross aren't
|
|
|
|
// referenced, but the coordinator hard-codes them, so don't make
|
|
|
|
// these two an error for now.
|
|
|
|
"host-linux-armhf-cross": true,
|
|
|
|
"host-linux-armel-cross": true,
|
|
|
|
|
|
|
|
"host-linux-x86-alpine": true, // TODO(golang.org/issue/19938): Fix the Alpine builder, or remove it.
|
|
|
|
}
|
|
|
|
|
|
|
|
used := make(map[string]bool)
|
2019-03-07 20:44:41 +03:00
|
|
|
for _, conf := range Builders {
|
|
|
|
used[conf.HostType] = true
|
2019-03-01 19:54:25 +03:00
|
|
|
}
|
2019-03-07 20:44:41 +03:00
|
|
|
for hostType := range Hosts {
|
2020-08-04 19:01:34 +03:00
|
|
|
if !used[hostType] && !knownUnused[hostType] {
|
|
|
|
t.Errorf("host type %q is not referenced from any build config", hostType)
|
|
|
|
}
|
|
|
|
if used[hostType] && knownUnused[hostType] {
|
|
|
|
t.Errorf("host type %q should not be listed in knownUnused since it's in use", hostType)
|
2019-03-07 20:44:41 +03:00
|
|
|
}
|
2019-03-01 19:54:25 +03:00
|
|
|
}
|
|
|
|
}
|
2019-03-11 21:49:56 +03:00
|
|
|
|
|
|
|
// tests that goBranch is optional for repo == "go"
|
|
|
|
func TestBuildsRepoAtAllImplicitGoBranch(t *testing.T) {
|
|
|
|
builder := Builders["android-amd64-emu"]
|
|
|
|
got := builder.buildsRepoAtAll("go", "master", "")
|
|
|
|
if !got {
|
|
|
|
t.Error("got = false; want true")
|
|
|
|
}
|
|
|
|
}
|
2019-04-02 18:27:10 +03:00
|
|
|
|
|
|
|
func TestShouldRunDistTest(t *testing.T) {
|
|
|
|
type buildMode int
|
|
|
|
const (
|
|
|
|
tryMode buildMode = 0
|
|
|
|
postSubmit buildMode = 1
|
|
|
|
)
|
|
|
|
|
|
|
|
tests := []struct {
|
|
|
|
builder string
|
|
|
|
test string
|
|
|
|
mode buildMode
|
|
|
|
want bool
|
|
|
|
}{
|
|
|
|
{"linux-amd64", "api", postSubmit, true},
|
|
|
|
{"linux-amd64", "api", tryMode, true},
|
2020-04-09 19:47:03 +03:00
|
|
|
{"freebsd-amd64-12_0", "api", postSubmit, true}, // freebsd-amd64-12_0 uses fasterTrybots policy, should still build.
|
|
|
|
{"freebsd-amd64-12_0", "api", tryMode, false}, // freebsd-amd64-12_0 uses fasterTrybots policy, should skip in try mode.
|
2019-04-02 18:27:10 +03:00
|
|
|
|
|
|
|
{"linux-amd64", "reboot", tryMode, true},
|
|
|
|
{"linux-amd64-race", "reboot", tryMode, false},
|
|
|
|
|
|
|
|
{"darwin-amd64-10_11", "test:foo", postSubmit, false},
|
|
|
|
{"darwin-amd64-10_12", "test:foo", postSubmit, false},
|
|
|
|
{"darwin-amd64-10_14", "test:foo", postSubmit, false},
|
|
|
|
{"darwin-amd64-10_14", "reboot", postSubmit, false},
|
|
|
|
{"darwin-amd64-10_14", "api", postSubmit, false},
|
|
|
|
{"darwin-amd64-10_14", "codewalk", postSubmit, false},
|
2019-11-19 17:55:01 +03:00
|
|
|
{"darwin-amd64-10_15", "test:foo", postSubmit, false},
|
2019-04-02 18:27:10 +03:00
|
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
|
|
bc, ok := Builders[tt.builder]
|
|
|
|
if !ok {
|
|
|
|
t.Errorf("unknown builder %q", tt.builder)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
isTry := tt.mode == tryMode
|
|
|
|
if isTry && !bc.BuildsRepoTryBot("go", "master", "master") {
|
|
|
|
t.Errorf("builder %q is not a trybot, so can't run test %q in try mode", tt.builder, tt.test)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
got := bc.ShouldRunDistTest(tt.test, isTry)
|
|
|
|
if got != tt.want {
|
|
|
|
t.Errorf("%q.ShouldRunDistTest(%q, try %v) = %v; want %v", tt.builder, tt.test, isTry, got, tt.want)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-09-09 23:48:08 +03:00
|
|
|
|
|
|
|
func TestShouldTestPackageInGOPATHMode(t *testing.T) {
|
|
|
|
// This function doesn't change behavior depending on the builder
|
|
|
|
// at this time, so just use a common one.
|
|
|
|
bc, ok := Builders["linux-amd64"]
|
|
|
|
if !ok {
|
|
|
|
t.Fatal("unknown builder")
|
|
|
|
}
|
|
|
|
|
|
|
|
tests := []struct {
|
|
|
|
importPath string
|
|
|
|
want bool
|
|
|
|
}{
|
|
|
|
{"golang.org/x/image/bmp", true},
|
|
|
|
{"golang.org/x/tools/go/ast/astutil", true},
|
|
|
|
{"golang.org/x/tools/go/packages", true},
|
|
|
|
{"golang.org/x/tools", true}, // Three isn't a package there, but if there was, it should be tested.
|
|
|
|
{"golang.org/x/tools/gopls", false},
|
|
|
|
{"golang.org/x/tools/gopls/internal/foobar", false},
|
|
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
|
|
got := bc.ShouldTestPackageInGOPATHMode(tt.importPath)
|
|
|
|
if got != tt.want {
|
|
|
|
t.Errorf("ShouldTestPackageInGOPATHMode(%q) = %v; want %v", tt.importPath, got, tt.want)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-10-16 09:02:29 +03:00
|
|
|
|
|
|
|
func TestSlowBotAliases(t *testing.T) {
|
|
|
|
for term, name := range slowBotAliases {
|
|
|
|
if name == "" {
|
|
|
|
// Empty string means known missing builder.
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
if _, ok := Builders[name]; !ok {
|
|
|
|
t.Errorf("slowbot term %q references unknown builder %q", term, name)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
out, err := exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), "tool", "dist", "list").Output()
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("dist list: %v", err)
|
|
|
|
}
|
|
|
|
ports := strings.Fields(string(out))
|
|
|
|
|
|
|
|
done := map[string]bool{}
|
2020-04-23 01:52:59 +03:00
|
|
|
|
2019-10-16 09:02:29 +03:00
|
|
|
var add bytes.Buffer
|
|
|
|
check := func(term string, isArch bool) {
|
|
|
|
if done[term] {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
done[term] = true
|
|
|
|
_, isBuilderName := Builders[term]
|
|
|
|
_, hasAlias := slowBotAliases[term]
|
|
|
|
if !isBuilderName && !hasAlias {
|
|
|
|
prefix := term
|
|
|
|
if isArch {
|
|
|
|
prefix = "linux-" + term
|
|
|
|
}
|
|
|
|
var matches []string
|
|
|
|
for name := range Builders {
|
|
|
|
if strings.HasPrefix(name, prefix) {
|
|
|
|
matches = append(matches, name)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sort.Strings(matches)
|
|
|
|
t.Errorf("term %q has no match in slowBotAliases", term)
|
|
|
|
if len(matches) == 1 {
|
|
|
|
fmt.Fprintf(&add, "%q: %q,\n", term, matches[0])
|
|
|
|
} else if len(matches) > 1 {
|
|
|
|
t.Errorf("maybe add: %q: %q, (matches=%q)", term, matches[len(matches)-1], matches)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, port := range ports {
|
|
|
|
slash := strings.IndexByte(port, '/')
|
|
|
|
if slash == -1 {
|
|
|
|
t.Fatalf("unexpected port %q", port)
|
|
|
|
}
|
|
|
|
goos, goarch := port[:slash], port[slash+1:]
|
|
|
|
check(goos+"-"+goarch, false)
|
|
|
|
check(goos, false)
|
|
|
|
check(goarch, true)
|
|
|
|
}
|
|
|
|
|
|
|
|
if add.Len() > 0 {
|
|
|
|
t.Errorf("Missing items from slowBotAliases:\n%s", add.String())
|
|
|
|
}
|
|
|
|
}
|
2019-10-19 05:49:53 +03:00
|
|
|
|
|
|
|
func TestCrossCompileConfigs(t *testing.T) {
|
|
|
|
// Verify that Builders.CrossCompileConfig have valid host types.
|
|
|
|
for name, bc := range Builders {
|
|
|
|
cc := bc.CrossCompileConfig
|
|
|
|
if cc == nil {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
if _, ok := Hosts[cc.CompileHostType]; !ok {
|
|
|
|
t.Errorf("unknown host type %q for builder %q", cc.CompileHostType, name)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-11-07 16:15:55 +03:00
|
|
|
|
|
|
|
// TestTryBotsCompileAllPorts verifies that each port (go tool dist list) is covered by
|
|
|
|
// either a real trybot or a misc-compile trybot.
|
|
|
|
func TestTryBotsCompileAllPorts(t *testing.T) {
|
|
|
|
out, err := exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), "tool", "dist", "list").Output()
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("dist list: %v", err)
|
|
|
|
}
|
|
|
|
ports := strings.Fields(string(out))
|
|
|
|
|
|
|
|
done := map[string]bool{}
|
2020-09-28 18:04:35 +03:00
|
|
|
done["darwin-arm"] = true // TODO: Remove when Go 1.16 is out and Go 1.14 becomes unsupported.
|
|
|
|
done["darwin-arm64"] = true // TODO(golang.org/issue/39782): Add builder for darwin/arm64.
|
2019-11-07 16:15:55 +03:00
|
|
|
check := func(goos, goarch string) {
|
2020-09-28 18:04:35 +03:00
|
|
|
if goos == "android" || goos == "ios" {
|
2019-11-15 07:29:29 +03:00
|
|
|
// TODO(golang.org/issue/25963): support
|
2020-09-28 18:04:35 +03:00
|
|
|
// compilation-only Android and iOS trybots.
|
2019-11-15 07:29:29 +03:00
|
|
|
// buildall.bash doesn't set the environment
|
|
|
|
// up enough for e.g. compiling android-386
|
|
|
|
// from linux-amd64. (Issue #35596 too)
|
2020-09-28 18:04:35 +03:00
|
|
|
// iOS likely needs to be built on macOS
|
|
|
|
// with Xcode available.
|
2019-11-15 07:29:29 +03:00
|
|
|
return
|
|
|
|
}
|
2019-11-07 16:15:55 +03:00
|
|
|
goosArch := goos + "-" + goarch
|
|
|
|
if done[goosArch] {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
for _, conf := range Builders {
|
|
|
|
os := conf.GOOS()
|
|
|
|
arch := conf.GOARCH()
|
|
|
|
|
|
|
|
if os == goos && arch == goarch && (conf.tryOnly || conf.tryBot != nil) {
|
|
|
|
done[goosArch] = true
|
|
|
|
break
|
|
|
|
}
|
|
|
|
|
|
|
|
if strings.HasPrefix(conf.Name, "misc-compile-") {
|
|
|
|
re, err := regexp.Compile(conf.allScriptArgs[0])
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("Invalid misc-compile filtering pattern for builder %q: %q",
|
|
|
|
conf.Name, conf.allScriptArgs[0])
|
|
|
|
}
|
|
|
|
|
|
|
|
if re.MatchString(goosArch) || re.MatchString(goos) {
|
|
|
|
done[goosArch] = true
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if _, ok := done[goosArch]; !ok {
|
|
|
|
t.Errorf("Missing trybot or misc-compile trybot: %q", goosArch)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, port := range ports {
|
|
|
|
slash := strings.IndexByte(port, '/')
|
|
|
|
if slash == -1 {
|
|
|
|
t.Fatalf("unexpected port %q", port)
|
|
|
|
}
|
|
|
|
check(port[:slash], port[slash+1:])
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2019-11-19 17:55:01 +03:00
|
|
|
|
|
|
|
// TestExpectedMacstadiumVMCount ensures that only 20 instances of macOS virtual machines
|
|
|
|
// are expected at MacStadium.
|
|
|
|
// TODO: remove once the scheduler allocates VMs based on demand https://golang.org/issue/35698
|
|
|
|
func TestExpectedMacstadiumVMCount(t *testing.T) {
|
|
|
|
got := 0
|
|
|
|
for host, config := range Hosts {
|
|
|
|
if strings.HasPrefix(host, "host-darwin-10_") {
|
|
|
|
got += config.ExpectNum
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if got != 20 {
|
|
|
|
t.Fatalf("macstadium host count: got %d; want 20", got)
|
|
|
|
}
|
|
|
|
}
|
2020-05-13 21:30:25 +03:00
|
|
|
|
|
|
|
// Test that we have a longtest builder and
|
|
|
|
// that its environment configuration is okay.
|
|
|
|
func TestLongTestBuilder(t *testing.T) {
|
|
|
|
long, ok := Builders["linux-amd64-longtest"]
|
|
|
|
if !ok {
|
|
|
|
t.Fatal("we don't have a linux-amd64-longtest builder anymore, is that intentional?")
|
|
|
|
}
|
|
|
|
if !long.IsLongTest() {
|
|
|
|
t.Error("the linux-amd64-longtest builder isn't a longtest builder, is that intentional?")
|
|
|
|
}
|
|
|
|
var shortDisabled bool
|
|
|
|
for _, e := range long.Env() {
|
|
|
|
if e == "GO_TEST_SHORT=0" {
|
|
|
|
shortDisabled = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if !shortDisabled {
|
|
|
|
t.Error("the linux-amd64-longtest builder doesn't set GO_TEST_SHORT=0, is that intentional?")
|
|
|
|
}
|
|
|
|
}
|
2020-08-18 20:32:05 +03:00
|
|
|
|
|
|
|
func TestHostConfigIsVM(t *testing.T) {
|
|
|
|
testCases := []struct {
|
|
|
|
desc string
|
|
|
|
config *HostConfig
|
|
|
|
want bool
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
desc: "non-ec2-vm",
|
|
|
|
config: &HostConfig{
|
|
|
|
VMImage: "image-x",
|
|
|
|
ContainerImage: "",
|
|
|
|
isEC2: false,
|
|
|
|
},
|
|
|
|
want: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "non-ec2-container",
|
|
|
|
config: &HostConfig{
|
|
|
|
VMImage: "",
|
|
|
|
ContainerImage: "container-image-x",
|
|
|
|
isEC2: false,
|
|
|
|
},
|
|
|
|
want: false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "ec2-container",
|
|
|
|
config: &HostConfig{
|
|
|
|
VMImage: "image-x",
|
|
|
|
ContainerImage: "container-image-x",
|
|
|
|
isEC2: true,
|
|
|
|
},
|
|
|
|
want: false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "ec2-vm",
|
|
|
|
config: &HostConfig{
|
|
|
|
VMImage: "image-x",
|
|
|
|
ContainerImage: "",
|
|
|
|
isEC2: true,
|
|
|
|
},
|
|
|
|
want: true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
|
|
t.Run(fmt.Sprintf(tc.desc), func(t *testing.T) {
|
|
|
|
if got := tc.config.IsVM(); got != tc.want {
|
|
|
|
t.Errorf("HostConfig.IsVM() = %t; want %t", got, tc.want)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
2020-08-20 18:53:58 +03:00
|
|
|
|
|
|
|
func TestModulesEnv(t *testing.T) {
|
|
|
|
testCases := []struct {
|
|
|
|
desc string
|
|
|
|
buildConfig *BuildConfig
|
|
|
|
repo string
|
|
|
|
want []string
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
desc: "ec2-builder-repo-non-go",
|
|
|
|
buildConfig: &BuildConfig{
|
|
|
|
testHostConf: &HostConfig{
|
|
|
|
IsReverse: false,
|
|
|
|
isEC2: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
repo: "bar",
|
|
|
|
want: []string{"GOPROXY=https://proxy.golang.org"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "reverse-builder-repo-non-go",
|
|
|
|
buildConfig: &BuildConfig{
|
|
|
|
testHostConf: &HostConfig{
|
|
|
|
IsReverse: true,
|
|
|
|
isEC2: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
repo: "bar",
|
|
|
|
want: []string{"GOPROXY=https://proxy.golang.org"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "reverse-builder-repo-go",
|
|
|
|
buildConfig: &BuildConfig{
|
|
|
|
testHostConf: &HostConfig{
|
|
|
|
IsReverse: true,
|
|
|
|
isEC2: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
repo: "go",
|
|
|
|
want: []string{"GOPROXY=off"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "builder-repo-go",
|
|
|
|
buildConfig: &BuildConfig{
|
|
|
|
testHostConf: &HostConfig{
|
|
|
|
IsReverse: false,
|
|
|
|
isEC2: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
repo: "go",
|
|
|
|
want: []string{"GOPROXY=off"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "builder-repo-go-outbound-network-allowed",
|
|
|
|
buildConfig: &BuildConfig{
|
|
|
|
Name: "test-longtest",
|
|
|
|
testHostConf: &HostConfig{
|
|
|
|
IsReverse: false,
|
|
|
|
isEC2: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
repo: "go",
|
|
|
|
want: nil,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "builder-repo-special-case",
|
|
|
|
buildConfig: &BuildConfig{
|
|
|
|
testHostConf: &HostConfig{
|
|
|
|
IsReverse: false,
|
|
|
|
isEC2: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
repo: "build",
|
|
|
|
want: []string{"GO111MODULE=on"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "reverse-builder-repo-special-case",
|
|
|
|
buildConfig: &BuildConfig{
|
|
|
|
testHostConf: &HostConfig{
|
|
|
|
IsReverse: true,
|
|
|
|
isEC2: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
repo: "build",
|
|
|
|
want: []string{"GOPROXY=https://proxy.golang.org", "GO111MODULE=on"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "builder-repo-non-special-case",
|
|
|
|
buildConfig: &BuildConfig{
|
|
|
|
testHostConf: &HostConfig{
|
|
|
|
IsReverse: false,
|
|
|
|
isEC2: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
repo: "bar",
|
|
|
|
want: nil,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
|
|
t.Run(tc.desc, func(t *testing.T) {
|
|
|
|
got := tc.buildConfig.ModulesEnv(tc.repo)
|
|
|
|
if diff := cmp.Diff(tc.want, got); diff != "" {
|
|
|
|
t.Errorf("BuildConfig.ModulesEnv(%q) mismatch (-want, +got)\n%s", tc.repo, diff)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|