mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-10 17:13:51 +00:00
110 lines
2.5 KiB
Go
110 lines
2.5 KiB
Go
package ftxapi
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"regexp"
|
|
"strconv"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/c9s/bbgo/pkg/fixedpoint"
|
|
)
|
|
|
|
func maskSecret(s string) string {
|
|
re := regexp.MustCompile(`\b(\w{4})\w+\b`)
|
|
s = re.ReplaceAllString(s, "$1******")
|
|
return s
|
|
}
|
|
|
|
func integrationTestConfigured(t *testing.T) (key, secret string, ok bool) {
|
|
var hasKey, hasSecret bool
|
|
key, hasKey = os.LookupEnv("FTX_API_KEY")
|
|
secret, hasSecret = os.LookupEnv("FTX_API_SECRET")
|
|
ok = hasKey && hasSecret && os.Getenv("TEST_FTX") == "1"
|
|
if ok {
|
|
t.Logf("ftx api integration test enabled, key = %s, secret = %s", maskSecret(key), maskSecret(secret))
|
|
}
|
|
return key, secret, ok
|
|
}
|
|
|
|
func TestClient_Requests(t *testing.T) {
|
|
key, secret, ok := integrationTestConfigured(t)
|
|
if !ok {
|
|
t.SkipNow()
|
|
return
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(context.TODO(), 15 * time.Second)
|
|
defer cancel()
|
|
|
|
client := NewClient()
|
|
client.Auth(key, secret, "")
|
|
|
|
testCases := []struct {
|
|
name string
|
|
tt func(t *testing.T)
|
|
} {
|
|
{
|
|
name: "GetMarketsRequest",
|
|
tt: func(t *testing.T) {
|
|
req := client.NewGetMarketsRequest()
|
|
markets ,err := req.Do(ctx)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, markets)
|
|
t.Logf("markets: %+v", markets)
|
|
},
|
|
},
|
|
{
|
|
name: "GetAccountRequest",
|
|
tt: func(t *testing.T) {
|
|
req := client.NewGetAccountRequest()
|
|
account ,err := req.Do(ctx)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, account)
|
|
t.Logf("account: %+v", account)
|
|
},
|
|
},
|
|
{
|
|
name: "PlaceOrderRequest",
|
|
tt: func(t *testing.T) {
|
|
req := client.NewPlaceOrderRequest()
|
|
req.PostOnly(true).
|
|
Size(fixedpoint.MustNewFromString("1.0")).
|
|
Price(fixedpoint.MustNewFromString("10.0")).
|
|
OrderType(OrderTypeLimit).
|
|
Side(SideBuy).
|
|
Market("LTC/USDT")
|
|
|
|
createdOrder,err := req.Do(ctx)
|
|
if assert.NoError(t, err) {
|
|
assert.NotNil(t, createdOrder)
|
|
t.Logf("createdOrder: %+v", createdOrder)
|
|
|
|
req2 := client.NewCancelOrderRequest(strconv.FormatInt(createdOrder.Id, 10))
|
|
ret, err := req2.Do(ctx)
|
|
assert.NoError(t, err)
|
|
t.Logf("cancelOrder: %+v", ret)
|
|
assert.True(t, ret.Success)
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "GetFillsRequest",
|
|
tt: func(t *testing.T) {
|
|
req := client.NewGetFillsRequest()
|
|
req.Market("CRO/USD")
|
|
fills, err := req.Do(ctx)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, fills)
|
|
t.Logf("fills: %+v", fills)
|
|
},
|
|
},
|
|
}
|
|
for _, testCase := range testCases {
|
|
t.Run(testCase.name, testCase.tt)
|
|
}
|
|
}
|