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 }