bbgo_origin/pkg/datasource/csvsource/tick_downloader_test.go
2024-07-09 15:28:30 +08:00

104 lines
2.0 KiB
Go

package csvsource
import (
"fmt"
"os"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/c9s/bbgo/pkg/types"
)
type DownloadTester struct {
Exchange types.ExchangeName
Reader MakeCSVTickReader
Market MarketType
Granularity DataType
Symbol string
Path string
}
var (
expectedCandles = []int{1440, 48, 24}
intervals = []types.Interval{types.Interval1m, types.Interval30m, types.Interval1h}
until = time.Now().Round(0)
since = until.Add(-24 * time.Hour)
)
func Test_CSV_Download(t *testing.T) {
if _, ok := os.LookupEnv("TEST_CSV_DOWNLOADER"); !ok {
t.Skip()
}
var tests = []DownloadTester{
{
Exchange: types.ExchangeBinance,
Reader: NewBinanceCSVTickReader,
Market: SPOT,
Granularity: AGGTRADES,
Symbol: "FXSUSDT",
Path: "testdata/binance/FXSUSDT",
},
{
Exchange: types.ExchangeBybit,
Reader: NewBybitCSVTickReader,
Market: FUTURES,
Granularity: AGGTRADES,
Symbol: "FXSUSDT",
Path: "testdata/bybit/FXSUSDT",
},
{
Exchange: types.ExchangeOKEx,
Reader: NewOKExCSVTickReader,
Market: SPOT,
Granularity: AGGTRADES,
Symbol: "BTCUSDT",
Path: "testdata/okex/BTCUSDT",
},
}
for _, tt := range tests {
err := Download(
tt.Path,
tt.Symbol,
tt.Exchange,
tt.Market,
tt.Granularity,
since,
until,
)
assert.NoError(t, err)
klineMap, err := ReadTicksFromCSVWithDecoder(
tt.Path,
tt.Symbol,
intervals,
MakeCSVTickReader(tt.Reader),
)
assert.NoError(t, err)
for i, interval := range intervals {
klines := klineMap[interval]
assert.Equal(
t,
expectedCandles[i],
len(klines),
fmt.Sprintf("%s: %s/%s should have %d kLines",
tt.Exchange.String(),
tt.Symbol,
interval.String(),
expectedCandles[i],
),
)
err = WriteKLines(tt.Path, tt.Symbol, klines)
assert.NoError(t, err)
}
err = os.RemoveAll(tt.Path)
assert.NoError(t, err)
}
}