github.com/saucelabs/saucectl@v0.175.1/internal/cmd/run/apitest.go (about)

     1  package run
     2  
     3  import (
     4  	"os"
     5  
     6  	cmds "github.com/saucelabs/saucectl/internal/cmd"
     7  	"github.com/saucelabs/saucectl/internal/http"
     8  	"github.com/saucelabs/saucectl/internal/usage"
     9  
    10  	"github.com/saucelabs/saucectl/internal/apitest"
    11  	"github.com/saucelabs/saucectl/internal/config"
    12  	"github.com/saucelabs/saucectl/internal/region"
    13  	"github.com/saucelabs/saucectl/internal/report"
    14  	"github.com/saucelabs/saucectl/internal/report/table"
    15  	"github.com/saucelabs/saucectl/internal/segment"
    16  	"github.com/spf13/cobra"
    17  	"golang.org/x/text/cases"
    18  	"golang.org/x/text/language"
    19  )
    20  
    21  func runApitest(cmd *cobra.Command, isCLIDriven bool) (int, error) {
    22  	if !isCLIDriven {
    23  		config.ValidateSchema(gFlags.cfgFilePath)
    24  	}
    25  
    26  	p, err := apitest.FromFile(gFlags.cfgFilePath)
    27  	if err != nil {
    28  		return 1, err
    29  	}
    30  
    31  	if err := applyApitestFlags(&p); err != nil {
    32  		return 1, err
    33  	}
    34  	apitest.SetDefaults(&p)
    35  	if err := apitest.Validate(p); err != nil {
    36  		return 1, err
    37  	}
    38  
    39  	regio := region.FromString(p.Sauce.Region)
    40  	creds := regio.Credentials()
    41  
    42  	apitestingClient := http.NewAPITester(regio.APIBaseURL(), creds.Username, creds.AccessKey, apitestingTimeout)
    43  	restoClient := http.NewResto(regio.APIBaseURL(), creds.Username, creds.AccessKey, 0)
    44  
    45  	r := apitest.Runner{
    46  		Project: p,
    47  		Client:  &apitestingClient,
    48  		Region:  regio,
    49  		Reporters: []report.Reporter{
    50  			&table.Reporter{
    51  				Dst: os.Stdout,
    52  			},
    53  		},
    54  		Async:         gFlags.async,
    55  		TunnelService: &restoClient,
    56  	}
    57  
    58  	if err := r.ResolveHookIDs(); err != nil {
    59  		return 1, err
    60  	}
    61  
    62  	tracker := segment.DefaultTracker
    63  	if regio == region.Staging {
    64  		tracker.Enabled = false
    65  	}
    66  
    67  	go func() {
    68  		props := usage.Properties{}
    69  		props.SetFramework("apit")
    70  		tracker.Collect(cases.Title(language.English).String(cmds.FullName(cmd)), props)
    71  		_ = tracker.Close()
    72  	}()
    73  
    74  	return r.RunProject()
    75  }
    76  
    77  func applyApitestFlags(p *apitest.Project) error {
    78  	if gFlags.selectedSuite != "" {
    79  		if err := apitest.FilterSuites(p, gFlags.selectedSuite); err != nil {
    80  			return err
    81  		}
    82  	}
    83  	return nil
    84  }