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 }