+++ /dev/null
-// Copyright 2017 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.
-
-// +build !plan9
-
-package main
-
-import (
- "bytes"
- "fmt"
- "io/ioutil"
- "os"
- "os/exec"
- "runtime"
- "testing"
-)
-
-const (
- testbin = "testgetgo"
-)
-
-var (
- exeSuffix string // ".exe" on Windows
-)
-
-func init() {
- if runtime.GOOS == "windows" {
- exeSuffix = ".exe"
- }
-}
-
-// TestMain creates a getgo command for testing purposes and
-// deletes it after the tests have been run.
-func TestMain(m *testing.M) {
- if os.Getenv("GOGET_INTEGRATION") == "" {
- fmt.Fprintln(os.Stderr, "main_test: Skipping integration tests with GOGET_INTEGRATION unset")
- return
- }
-
- args := []string{"build", "-tags", testbin, "-o", testbin + exeSuffix}
- out, err := exec.Command("go", args...).CombinedOutput()
- if err != nil {
- fmt.Fprintf(os.Stderr, "building %s failed: %v\n%s", testbin, err, out)
- os.Exit(2)
- }
-
- // Don't let these environment variables confuse the test.
- os.Unsetenv("GOBIN")
- os.Unsetenv("GOPATH")
- os.Unsetenv("GIT_ALLOW_PROTOCOL")
- os.Unsetenv("PATH")
-
- r := m.Run()
-
- os.Remove(testbin + exeSuffix)
-
- os.Exit(r)
-}
-
-func createTmpHome(t *testing.T) string {
- tmpd, err := ioutil.TempDir("", "testgetgo")
- if err != nil {
- t.Fatalf("creating test tempdir failed: %v", err)
- }
-
- os.Setenv("HOME", tmpd)
- return tmpd
-}
-
-// doRun runs the test getgo command, recording stdout and stderr and
-// returning exit status.
-func doRun(t *testing.T, args ...string) error {
- var stdout, stderr bytes.Buffer
- t.Logf("running %s %v", testbin, args)
- cmd := exec.Command("./"+testbin+exeSuffix, args...)
- cmd.Stdout = &stdout
- cmd.Stderr = &stderr
- cmd.Env = os.Environ()
- status := cmd.Run()
- if stdout.Len() > 0 {
- t.Log("standard output:")
- t.Log(stdout.String())
- }
- if stderr.Len() > 0 {
- t.Log("standard error:")
- t.Log(stderr.String())
- }
- return status
-}
-
-func TestCommandVerbose(t *testing.T) {
- tmpd := createTmpHome(t)
- defer os.RemoveAll(tmpd)
-
- err := doRun(t, "-v")
- if err != nil {
- t.Fatal(err)
- }
- // make sure things are in path
- shellConfig, err := shellConfigFile()
- if err != nil {
- t.Fatal(err)
- }
- b, err := ioutil.ReadFile(shellConfig)
- if err != nil {
- t.Fatal(err)
- }
- home, err := getHomeDir()
- if err != nil {
- t.Fatal(err)
- }
-
- expected := fmt.Sprintf(`
-export PATH=$PATH:%s/.go/bin
-
-export GOPATH=%s/go
-
-export PATH=$PATH:%s/go/bin
-`, home, home, home)
-
- if string(b) != expected {
- t.Fatalf("%s expected %q, got %q", shellConfig, expected, string(b))
- }
-}
-
-func TestCommandPathExists(t *testing.T) {
- tmpd := createTmpHome(t)
- defer os.RemoveAll(tmpd)
-
- // run once
- err := doRun(t, "-skip-dl")
- if err != nil {
- t.Fatal(err)
- }
- // make sure things are in path
- shellConfig, err := shellConfigFile()
- if err != nil {
- t.Fatal(err)
- }
- b, err := ioutil.ReadFile(shellConfig)
- if err != nil {
- t.Fatal(err)
- }
- home, err := getHomeDir()
- if err != nil {
- t.Fatal(err)
- }
-
- expected := fmt.Sprintf(`
-export GOPATH=%s/go
-
-export PATH=$PATH:%s/go/bin
-`, home, home)
-
- if string(b) != expected {
- t.Fatalf("%s expected %q, got %q", shellConfig, expected, string(b))
- }
-
- // run twice
- if err := doRun(t, "-skip-dl"); err != nil {
- t.Fatal(err)
- }
-
- b, err = ioutil.ReadFile(shellConfig)
- if err != nil {
- t.Fatal(err)
- }
-
- if string(b) != expected {
- t.Fatalf("%s expected %q, got %q", shellConfig, expected, string(b))
- }
-}