cmd/wrapper_coverage: prevent non-needed REST requests via context timeout (#1154)

* wrapper_coverage/exchanges: cancel context to not send rest requests/ populate context through functions that do rest requests

* linter: fix

* exchange_template: fix test

---------

Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io>
This commit is contained in:
Ryan O'Hara-Reid
2023-04-02 11:20:25 +10:00
committed by GitHub
parent c69f48f8d7
commit 7cadc5cffb
62 changed files with 233 additions and 228 deletions

View File

@@ -1,6 +1,7 @@
package main
import (
"context"
"encoding/json"
"log"
"sync"
@@ -34,7 +35,7 @@ func main() {
cfgs := make([]config.Exchange, 0, len(exchanges))
for x := range exchanges {
var cfg *config.Exchange
cfg, err = exchanges[x].GetDefaultConfig()
cfg, err = exchanges[x].GetDefaultConfig(context.Background())
if err != nil {
log.Printf("Failed to get exchanges default config. Err: %s", err)
continue

View File

@@ -27,7 +27,7 @@ import (
)
// GetDefaultConfig returns a default exchange config
func ({{.Variable}} *{{.CapitalName}}) GetDefaultConfig() (*config.Exchange, error) {
func ({{.Variable}} *{{.CapitalName}}) GetDefaultConfig(ctx context.Context) (*config.Exchange, error) {
{{.Variable}}.SetDefaults()
exchCfg := new(config.Exchange)
exchCfg.Name = {{.Variable}}.Name
@@ -37,7 +37,7 @@ func ({{.Variable}} *{{.CapitalName}}) GetDefaultConfig() (*config.Exchange, err
{{.Variable}}.SetupDefaults(exchCfg)
if {{.Variable}}.Features.Supports.RESTCapabilities.AutoPairUpdates {
err := {{.Variable}}.UpdateTradablePairs(context.TODO(), true)
err := {{.Variable}}.UpdateTradablePairs(ctx, true)
if err != nil {
return nil, err
}
@@ -181,20 +181,20 @@ func ({{.Variable}} *{{.CapitalName}}) Setup(exch *config.Exchange) error {
}
// Start starts the {{.CapitalName}} go routine
func ({{.Variable}} *{{.CapitalName}}) Start(wg *sync.WaitGroup) error {
func ({{.Variable}} *{{.CapitalName}}) Start(ctx context.Context, wg *sync.WaitGroup) error {
if wg == nil {
return fmt.Errorf("%T %w", wg, common.ErrNilPointer)
}
wg.Add(1)
go func() {
{{.Variable}}.Run()
{{.Variable}}.Run(ctx)
wg.Done()
}()
return nil
}
// Run implements the {{.CapitalName}} wrapper
func ({{.Variable}} *{{.CapitalName}}) Run() {
func ({{.Variable}} *{{.CapitalName}}) Run(ctx context.Context) {
if {{.Variable}}.Verbose {
{{ if .WS }} log.Debugf(log.ExchangeSys,
"%s Websocket: %s.",
@@ -207,7 +207,7 @@ func ({{.Variable}} *{{.CapitalName}}) Run() {
return
}
err := {{.Variable}}.UpdateTradablePairs(context.TODO(), false)
err := {{.Variable}}.UpdateTradablePairs(ctx, false)
if err != nil {
log.Errorf(log.ExchangeSys,
"%s failed to update tradable pairs. Err: %s",

View File

@@ -109,8 +109,11 @@ func testWrappers(e exchange.IBotExchange) ([]string, error) {
if input.Implements(contextParam) {
// Need to deploy a context.Context value as nil value is not
// checked throughout codebase.
inputs[y] = reflect.ValueOf(context.Background())
// checked throughout codebase. Cancelled to minimise external
// calls and speed up operation.
cancelled, cancelfn := context.WithTimeout(context.Background(), 0)
cancelfn()
inputs[y] = reflect.ValueOf(cancelled)
continue
}
inputs[y] = reflect.Zero(input)