blob: 505d30228a70a3fae05e48d7e7d532aaad17c372 [file] [log] [blame]
// Copyright 2022 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.
//go:build linux || darwin
// +build linux darwin
package releasetargets
import (
"bytes"
"flag"
"fmt"
"io"
"io/ioutil"
"sort"
"strings"
"testing"
"golang.org/x/build/dashboard"
"golang.org/x/build/internal/coordinator/pool"
)
var update = flag.Bool("update", false, "controls whether to update releases.txt")
func TestReleaseTargets(t *testing.T) {
out := &bytes.Buffer{}
for _, release := range sortedReleases() {
printRelease(out, release, TargetsForGo1Point(release))
}
if *update {
if err := ioutil.WriteFile("releases.txt", out.Bytes(), 0); err != nil {
t.Fatalf("updating golden: %v", err)
}
return
}
golden, err := ioutil.ReadFile("releases.txt")
if err != nil {
t.Fatalf("reading golden: %v", err)
}
if !bytes.Equal(golden, out.Bytes()) {
t.Error("Goldens need updating. Rerun with -update.")
}
}
func printRelease(w io.Writer, release int, targets ReleaseTargets) {
fmt.Fprintf(w, "Targets for release 1.%v\n%s\n", release, strings.Repeat("=", 80))
var targetNames []string
for name := range targets {
targetNames = append(targetNames, name)
}
sort.Strings(targetNames)
for _, name := range targetNames {
target := targets[name]
var flags []string
if target.BuildOnly {
flags = append(flags, "Build only")
}
if target.Race {
flags = append(flags, "Race enabled")
}
if target.LongTestBuilder != "" {
flags = append(flags, "Long tests on "+target.LongTestBuilder)
}
fmt.Fprintf(w, "%-15v %-10v %-10v %v\n", name, target.GOOS, target.GOARCH, target.Builder)
if len(flags) != 0 {
fmt.Fprintf(w, "\t%v\n", strings.Join(flags, ", "))
}
if len(target.ExtraEnv) != 0 {
fmt.Fprintf(w, "\tExtra env: %q\n", target.ExtraEnv)
}
if bc, ok := dashboard.Builders[target.Builder]; ok {
var runningOn string
switch pool.ForHost(bc.HostConfig()).(type) {
case *pool.EC2Buildlet:
runningOn = "AWS"
case *pool.GCEBuildlet:
runningOn = "GCP"
case *pool.ReverseBuildletPool:
runningOn = fmt.Sprintf("reverse builder: %v", bc.HostConfig().Notes)
default:
runningOn = "unknown"
}
fmt.Fprintf(w, "\tRunning on %v\n", runningOn)
}
fmt.Fprintf(w, "\n")
}
fmt.Fprintf(w, "\n\n")
}
func TestBuildersExist(t *testing.T) {
for _, rel := range allReleases {
for _, target := range rel {
_, ok := dashboard.Builders[target.Builder]
if !ok {
t.Errorf("missing builder: %q", target.Builder)
}
if _, ok := dashboard.Builders[target.LongTestBuilder]; target.LongTestBuilder != "" && !ok {
t.Errorf("missing longtest builder: %q", target.LongTestBuilder)
}
}
}
}