github.com/d4l3k/go@v0.0.0-20151015000803-65fc379daeda/src/internal/testenv/testenv.go (about)

     1  // Copyright 2015 The Go Authors.  All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Package testenv provides information about what functionality
     6  // is available in different testing environments run by the Go team.
     7  //
     8  // It is an internal package because these details are specific
     9  // to the Go team's test setup (on build.golang.org) and not
    10  // fundamental to tests in general.
    11  package testenv
    12  
    13  import (
    14  	"os"
    15  	"runtime"
    16  	"strings"
    17  	"testing"
    18  )
    19  
    20  // Builder reports the name of the builder running this test
    21  // (for example, "linux-amd64" or "windows-386-gce").
    22  // If the test is not running on the build infrastructure,
    23  // Builder returns the empty string.
    24  func Builder() string {
    25  	return os.Getenv("GO_BUILDER_NAME")
    26  }
    27  
    28  // HasGoBuild reports whether the current system can build programs with ``go build''
    29  // and then run them with os.StartProcess or exec.Command.
    30  func HasGoBuild() bool {
    31  	switch runtime.GOOS {
    32  	case "android", "nacl":
    33  		return false
    34  	case "darwin":
    35  		if strings.HasPrefix(runtime.GOARCH, "arm") {
    36  			return false
    37  		}
    38  	}
    39  	return true
    40  }
    41  
    42  // MustHaveGoBuild checks that the current system can build programs with ``go build''
    43  // and then run them with os.StartProcess or exec.Command.
    44  // If not, MustHaveGoBuild calls t.Skip with an explanation.
    45  func MustHaveGoBuild(t *testing.T) {
    46  	if !HasGoBuild() {
    47  		t.Skipf("skipping test: 'go build' not available on %s/%s", runtime.GOOS, runtime.GOARCH)
    48  	}
    49  }
    50  
    51  // HasGoRun reports whether the current system can run programs with ``go run.''
    52  func HasGoRun() bool {
    53  	// For now, having go run and having go build are the same.
    54  	return HasGoBuild()
    55  }
    56  
    57  // MustHaveGoRun checks that the current system can run programs with ``go run.''
    58  // If not, MustHaveGoRun calls t.Skip with an explanation.
    59  func MustHaveGoRun(t *testing.T) {
    60  	if !HasGoRun() {
    61  		t.Skipf("skipping test: 'go run' not available on %s/%s", runtime.GOOS, runtime.GOARCH)
    62  	}
    63  }
    64  
    65  // HasExec reports whether the current system can start new processes
    66  // using os.StartProcess or (more commonly) exec.Command.
    67  func HasExec() bool {
    68  	switch runtime.GOOS {
    69  	case "nacl":
    70  		return false
    71  	case "darwin":
    72  		if strings.HasPrefix(runtime.GOARCH, "arm") {
    73  			return false
    74  		}
    75  	}
    76  	return true
    77  }
    78  
    79  // MustHaveExec checks that the current system can start new processes
    80  // using os.StartProcess or (more commonly) exec.Command.
    81  // If not, MustHaveExec calls t.Skip with an explanation.
    82  func MustHaveExec(t *testing.T) {
    83  	if !HasExec() {
    84  		t.Skipf("skipping test: cannot exec subprocess on %s/%s", runtime.GOOS, runtime.GOARCH)
    85  	}
    86  }
    87  
    88  // HasExternalNetwork reports whether the current system can use
    89  // external (non-localhost) networks.
    90  func HasExternalNetwork() bool {
    91  	return !testing.Short()
    92  }
    93  
    94  // MustHaveExternalNetwork checks that the current system can use
    95  // external (non-localhost) networks.
    96  // If not, MustHaveExternalNetwork calls t.Skip with an explanation.
    97  func MustHaveExternalNetwork(t *testing.T) {
    98  	if testing.Short() {
    99  		t.Skipf("skipping test: no external network in -short mode")
   100  	}
   101  }