github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/mergeCode/vndr/test/vndr_test.go (about)

     1  package vndrtest
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"os"
     7  	"os/exec"
     8  	"path/filepath"
     9  	"strings"
    10  	"testing"
    11  )
    12  
    13  const testRepo = "github.com/docker/swarmkit"
    14  
    15  func setGopath(cmd *exec.Cmd, gopath string) {
    16  	for _, env := range os.Environ() {
    17  		if strings.HasPrefix(env, "GOPATH=") {
    18  			continue
    19  		}
    20  		cmd.Env = append(cmd.Env, env)
    21  	}
    22  	cmd.Env = append(cmd.Env, "GOPATH="+gopath)
    23  }
    24  
    25  func TestVndr(t *testing.T) {
    26  	vndrBin, err := exec.LookPath("vndr")
    27  	if err != nil {
    28  		t.Fatal(err)
    29  	}
    30  	tmp, err := ioutil.TempDir("", "test-vndr-")
    31  	if err != nil {
    32  		t.Fatal(err)
    33  	}
    34  	defer os.RemoveAll(tmp)
    35  	repoDir := filepath.Join(tmp, "src", testRepo)
    36  	if err := os.MkdirAll(repoDir, 0700); err != nil {
    37  		t.Fatal(err)
    38  	}
    39  
    40  	gitCmd := exec.Command("git", "clone", "https://"+testRepo+".git", repoDir)
    41  	out, err := gitCmd.CombinedOutput()
    42  	if err != nil {
    43  		t.Fatalf("failed to clone %s to %s: %v, out: %s", testRepo, repoDir, err, out)
    44  	}
    45  	if err := os.RemoveAll(filepath.Join(repoDir, "vendor")); err != nil {
    46  		t.Fatal(err)
    47  	}
    48  
    49  	vndrCmd := exec.Command(vndrBin)
    50  	vndrCmd.Dir = repoDir
    51  	setGopath(vndrCmd, tmp)
    52  
    53  	out, err = vndrCmd.CombinedOutput()
    54  	if err != nil {
    55  		t.Fatalf("vndr failed: %v, out: %s", err, out)
    56  	}
    57  	if !bytes.Contains(out, []byte("Success")) {
    58  		t.Fatalf("Output did not report success: %s", out)
    59  	}
    60  
    61  	installCmd := exec.Command("go", "install", testRepo)
    62  	setGopath(installCmd, tmp)
    63  	out, err = installCmd.CombinedOutput()
    64  	if err != nil {
    65  		t.Fatalf("install %s failed: %v, out: %s", testRepo, err, out)
    66  	}
    67  
    68  	// revendor only etcd
    69  	vndrRevendorCmd := exec.Command(vndrBin, "github.com/coreos/etcd")
    70  	vndrRevendorCmd.Dir = repoDir
    71  	setGopath(vndrRevendorCmd, tmp)
    72  
    73  	out, err = vndrRevendorCmd.CombinedOutput()
    74  	if err != nil {
    75  		t.Fatalf("vndr failed: %v, out: %s", err, out)
    76  	}
    77  	if !bytes.Contains(out, []byte("Success")) {
    78  		t.Fatalf("Output did not report success: %s", out)
    79  	}
    80  }