...

Source file src/edge-infra.dev/pkg/edge/datasync/controllers/couchctl/test_runner/main.go

Documentation: edge-infra.dev/pkg/edge/datasync/controllers/couchctl/test_runner

     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  	// gather and print all the paths
    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  	// if its not a bazel run fake a test run
    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  	// go through the paths and execute test binaries
    62  	for _, path := range paths {
    63  		if strings.Contains(path, "couchctl_test") { // not fantastic
    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  // execute a binary and return a bool for pass / fail
    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