...
1 package main
2
3 import (
4 "bytes"
5 "fmt"
6 "io/fs"
7 "log"
8 "os"
9 "os/exec"
10 "path/filepath"
11 "strings"
12 "time"
13
14 "github.com/bazelbuild/rules_go/go/runfiles"
15
16 "edge-infra.dev/pkg/lib/build/bazel"
17 )
18
19 const rootdir = "."
20
21 func main() {
22 startTime := time.Now()
23 defer func() {
24 duration := time.Since(startTime)
25 log.Println("CouchCTL Integration Test Duration: ", duration, "Config", os.Args[1:])
26 }()
27
28 var paths []string
29 walkdir := os.DirFS(".")
30 if err := fs.WalkDir(walkdir, rootdir, func(path string, d fs.DirEntry, err error) error {
31 if err != nil {
32 return err
33 }
34
35 if d.IsDir() {
36 return nil
37 }
38 info, err := d.Info()
39 if err != nil {
40 return err
41 }
42
43 fmt.Println(path, info.Mode())
44 paths = append(paths, path)
45
46 return nil
47 }); err != nil {
48 log.Fatal(err)
49 }
50
51
52 if !bazel.IsBazelRun() && !bazel.IsBazelTest() {
53 os.Setenv("TEST_WORKSPACE", "edge_infra")
54 }
55
56 _, exists := os.LookupEnv("RUNFILES_DIR")
57 if !exists {
58 os.Setenv("RUNFILES_DIR", os.Args[0]+".runfiles")
59 }
60
61
62 for _, path := range paths {
63 if strings.Contains(path, "couchctl_test") {
64 if executeBinary(path) {
65 fmt.Println("it passed")
66 } else {
67 fmt.Println("it did not pass")
68 }
69 break
70 }
71 }
72 }
73
74
75 func executeBinary(path string) bool {
76 r, _ := runfiles.New()
77 rfilesPath := filepath.Join("edge_infra", path)
78
79 p, err := r.Rlocation(rfilesPath)
80 if err != nil {
81 fmt.Printf("rlocation: %v", err)
82 return false
83 }
84 fmt.Println("path: ", p)
85
86 cmd := exec.Command(p)
87 cmd.Env = os.Environ()
88 args := os.Args[1:]
89 cmd.Args = append(cmd.Args, args...)
90 fmt.Println("cmd.Args: ", cmd.Args)
91 var out bytes.Buffer
92 var stderr bytes.Buffer
93 cmd.Stdout = &out
94 cmd.Stderr = &stderr
95 err = cmd.Run()
96 if err != nil {
97 fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
98 return false
99 }
100 fmt.Println("Result: " + out.String())
101
102 return true
103 }
104
View as plain text