mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-20 23:16:49 +00:00
codebase: Cleanup various things (#1935)
* codebase: Rid base64/hex to string common funcs * codebase: Rid local scope variable usage and other improvements * codebase: Refactor currency pair usage across multiple exchanges - Updated HitBTC tests to use the new currency pair format. - Modified Kraken futures types to use currency.Pair instead of string for Symbol. - Adjusted Kraken wrapper methods to handle currency pairs correctly. - Refined OKX tests and types to utilize currency.Pair for instrument IDs. - Enhanced Poloniex tests to consistently use predefined currency pairs. - Streamlined order and orderbook tests to replace string pairs with currency.NewBTCUSD(). - Improved Yobit tests to utilize a standardized currency pair format. - Updated validator wrapper to use currency pairs directly instead of string conversions. * codebase: Use types.Number where possible * refactor: update PayoutFee type to types.Number for consistency * Refactor: Remove crypto functions to use standard library and other minor changes - Removed custom crypto functions for SHA256, SHA512, and MD5 from the common/crypto package. - Replaced usages of removed functions with standard library implementations in various files including: - cmd/websocket_client/main.go - engine/apiserver.go - exchanges/kraken/kraken.go - exchanges/lbank/lbank.go - exchanges/okx/okx_business_websocket.go - exchanges/kucoin/kucoin_websocket.go - gctscript/vm/vm.go - Updated tests to reflect changes in the crypto functions. - Renamed several functions for clarity, particularly in the context of order book updates across multiple exchanges. * refactor: replace assert with require for consistency in test assertions * refactor: Improve Binance futures candlestick test, standardise orderbook update function names and improve test parallelism * refactor: Replace require.Len with require.Equal for better output in TestGetFuturesKlineData
This commit is contained in:
@@ -7,6 +7,8 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/thrasher-corp/gocryptotrader/database"
|
||||
"github.com/thrasher-corp/gocryptotrader/database/drivers"
|
||||
"github.com/thrasher-corp/gocryptotrader/database/testhelpers"
|
||||
@@ -31,7 +33,7 @@ func TestMain(m *testing.M) {
|
||||
}
|
||||
|
||||
func TestAudit(t *testing.T) {
|
||||
testCases := []struct {
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
config *database.Config
|
||||
runner func(t *testing.T)
|
||||
@@ -44,7 +46,6 @@ func TestAudit(t *testing.T) {
|
||||
Driver: database.DBSQLite3,
|
||||
ConnectionDetails: drivers.ConnectionDetails{Database: "./testdb"},
|
||||
},
|
||||
|
||||
writeAudit,
|
||||
testhelpers.CloseDatabase,
|
||||
nil,
|
||||
@@ -55,7 +56,6 @@ func TestAudit(t *testing.T) {
|
||||
Driver: database.DBSQLite3,
|
||||
ConnectionDetails: drivers.ConnectionDetails{Database: "./testdb"},
|
||||
},
|
||||
|
||||
readHelper,
|
||||
testhelpers.CloseDatabase,
|
||||
nil,
|
||||
@@ -74,25 +74,18 @@ func TestAudit(t *testing.T) {
|
||||
nil,
|
||||
nil,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range testCases {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
|
||||
t.Skip("database not configured skipping test")
|
||||
}
|
||||
dbConn, err := testhelpers.ConnectToDatabase(test.config)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
|
||||
require.NoError(t, err)
|
||||
if tc.runner != nil {
|
||||
tc.runner(t)
|
||||
}
|
||||
if test.runner != nil {
|
||||
test.runner(t)
|
||||
}
|
||||
if test.closer != nil {
|
||||
err = test.closer(dbConn)
|
||||
if err != nil {
|
||||
t.Log(err)
|
||||
}
|
||||
if tc.closer != nil {
|
||||
assert.NoError(t, tc.closer(dbConn))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ func TestMain(m *testing.M) {
|
||||
}
|
||||
|
||||
func TestInsert(t *testing.T) {
|
||||
testCases := []struct {
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
config *database.Config
|
||||
seedDB func(includeOHLCVData bool) error
|
||||
@@ -76,60 +76,36 @@ func TestInsert(t *testing.T) {
|
||||
},
|
||||
seedDB: seedDB,
|
||||
},
|
||||
}
|
||||
|
||||
for x := range testCases {
|
||||
test := testCases[x]
|
||||
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
|
||||
t.Skip("database not configured skipping test")
|
||||
}
|
||||
|
||||
dbConn, err := testhelpers.ConnectToDatabase(test.config)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
|
||||
require.NoError(t, err)
|
||||
|
||||
if test.seedDB != nil {
|
||||
err = test.seedDB(false)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if tc.seedDB != nil {
|
||||
require.NoError(t, tc.seedDB(false))
|
||||
}
|
||||
|
||||
data, err := genOHCLVData()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
r, err := Insert(&data)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
||||
if r != 365 {
|
||||
t.Errorf("unexpected number inserted: %v", r)
|
||||
}
|
||||
assert.Equal(t, uint64(365), r)
|
||||
|
||||
d, err := DeleteCandles(&data)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if d != 365 {
|
||||
t.Errorf("unexpected number deleted: %v", d)
|
||||
}
|
||||
|
||||
err = testhelpers.CloseDatabase(dbConn)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, int64(365), d)
|
||||
assert.NoError(t, testhelpers.CloseDatabase(dbConn))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestInsertFromCSV(t *testing.T) {
|
||||
testCases := []struct {
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
config *database.Config
|
||||
seedDB func(includeOHLCVData bool) error
|
||||
@@ -149,48 +125,32 @@ func TestInsertFromCSV(t *testing.T) {
|
||||
},
|
||||
seedDB: seedDB,
|
||||
},
|
||||
}
|
||||
|
||||
for x := range testCases {
|
||||
test := testCases[x]
|
||||
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
|
||||
t.Skip("database not configured skipping test")
|
||||
}
|
||||
|
||||
dbConn, err := testhelpers.ConnectToDatabase(test.config)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
|
||||
require.NoError(t, err)
|
||||
|
||||
if test.seedDB != nil {
|
||||
err = test.seedDB(false)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if tc.seedDB != nil {
|
||||
require.NoError(t, tc.seedDB(false))
|
||||
}
|
||||
|
||||
exchange.ResetExchangeCache()
|
||||
testFile := filepath.Join("..", "..", "..", "testdata", "binance_BTCUSDT_24h_2019_01_01_2020_01_01.csv")
|
||||
count, err := InsertFromCSV(testExchanges[0].Name, "BTC", "USDT", 86400, "spot", testFile)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if count != 365 {
|
||||
t.Fatalf("expected 365 results to be inserted received: %v", count)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, uint64(365), count)
|
||||
|
||||
err = testhelpers.CloseDatabase(dbConn)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
assert.NoError(t, testhelpers.CloseDatabase(dbConn))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSeries(t *testing.T) {
|
||||
testCases := []struct {
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
config *database.Config
|
||||
seedDB func(includeOHLCVData bool) error
|
||||
@@ -210,46 +170,30 @@ func TestSeries(t *testing.T) {
|
||||
},
|
||||
seedDB: seedDB,
|
||||
},
|
||||
}
|
||||
|
||||
for x := range testCases {
|
||||
test := testCases[x]
|
||||
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
|
||||
t.Skip("database not configured skipping test")
|
||||
}
|
||||
|
||||
dbConn, err := testhelpers.ConnectToDatabase(test.config)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
|
||||
require.NoError(t, err)
|
||||
|
||||
if test.seedDB != nil {
|
||||
err = test.seedDB(true)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if tc.seedDB != nil {
|
||||
require.NoError(t, tc.seedDB(true))
|
||||
}
|
||||
|
||||
start := time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC)
|
||||
end := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
|
||||
ret, err := Series(testExchanges[0].Name,
|
||||
"BTC", "USDT",
|
||||
86400, "spot",
|
||||
start, end)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(ret.Candles) != 365 {
|
||||
t.Errorf("unexpected number of results received: %v", len(ret.Candles))
|
||||
}
|
||||
ret, err := Series(testExchanges[0].Name, "BTC", "USDT", 86400, "spot", start, end)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 365, len(ret.Candles))
|
||||
|
||||
_, err = Series("", "", "", 0, "", start, end)
|
||||
require.ErrorIs(t, err, errInvalidInput)
|
||||
|
||||
_, err = Series(testExchanges[0].Name, "BTC", "MOON", 864000, "spot", start, end)
|
||||
require.ErrorIs(t, err, ErrNoCandleDataFound)
|
||||
assert.ErrorIs(t, err, ErrNoCandleDataFound)
|
||||
assert.NoError(t, testhelpers.CloseDatabase(dbConn))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
|
||||
"github.com/gofrs/uuid"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/thrasher-corp/gocryptotrader/currency"
|
||||
"github.com/thrasher-corp/gocryptotrader/database"
|
||||
"github.com/thrasher-corp/gocryptotrader/database/drivers"
|
||||
@@ -71,7 +72,8 @@ func seedDB() error {
|
||||
}
|
||||
|
||||
func TestDataHistoryJob(t *testing.T) {
|
||||
testCases := []struct {
|
||||
t.Parallel()
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
config *database.Config
|
||||
seedDB func() error
|
||||
@@ -91,31 +93,22 @@ func TestDataHistoryJob(t *testing.T) {
|
||||
},
|
||||
seedDB: seedDB,
|
||||
},
|
||||
}
|
||||
|
||||
for x := range testCases {
|
||||
test := testCases[x]
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
|
||||
t.Skip("database not configured skipping test")
|
||||
}
|
||||
|
||||
dbConn, err := testhelpers.ConnectToDatabase(test.config)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
|
||||
require.NoError(t, err)
|
||||
|
||||
if test.seedDB != nil {
|
||||
err = test.seedDB()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if tc.seedDB != nil {
|
||||
require.NoError(t, tc.seedDB())
|
||||
}
|
||||
|
||||
db, err := Setup(dbConn)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
||||
var jerberinos, jerberoos []*DataHistoryJob
|
||||
for i := range 20 {
|
||||
@@ -134,9 +127,8 @@ func TestDataHistoryJob(t *testing.T) {
|
||||
})
|
||||
}
|
||||
err = db.Upsert(jerberinos...)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
||||
// insert the same jerbs to test conflict resolution
|
||||
for i := range 20 {
|
||||
uu, _ := uuid.NewV4()
|
||||
@@ -158,103 +150,66 @@ func TestDataHistoryJob(t *testing.T) {
|
||||
jerberoos = append(jerberoos, j)
|
||||
}
|
||||
err = db.Upsert(jerberoos...)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = db.GetJobsBetween(time.Now(), time.Now().Add(time.Hour))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
||||
resp, err := db.GetByNickName("TestDataHistoryJob19")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !strings.EqualFold(resp.Nickname, "TestDataHistoryJob19") {
|
||||
t.Fatal("the database no longer functions")
|
||||
}
|
||||
require.NoError(t, err)
|
||||
assert.True(t, strings.EqualFold("TestDataHistoryJob19", resp.Nickname))
|
||||
|
||||
results, err := db.GetAllIncompleteJobsAndResults()
|
||||
assert.NoError(t, err)
|
||||
|
||||
if len(results) != 19 {
|
||||
t.Errorf("expected 19, received %v", len(results))
|
||||
}
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, results, 19)
|
||||
|
||||
jerb, err := db.GetJobAndAllResults(jerberoos[0].Nickname)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !strings.EqualFold(jerb.Nickname, jerberoos[0].Nickname) {
|
||||
t.Errorf("expected %v, received %v", jerb.Nickname, jerberoos[0].Nickname)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
assert.True(t, strings.EqualFold(jerberoos[0].Nickname, jerb.Nickname))
|
||||
|
||||
results, err = db.GetJobsBetween(time.Now().Add(-time.Hour), time.Now())
|
||||
assert.NoError(t, err)
|
||||
|
||||
if len(results) != 20 {
|
||||
t.Errorf("expected 20, received %v", len(results))
|
||||
}
|
||||
require.NoError(t, err)
|
||||
require.Len(t, results, 20)
|
||||
|
||||
jerb, err = db.GetJobAndAllResults(results[0].Nickname)
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
if !strings.EqualFold(jerb.Nickname, results[0].Nickname) {
|
||||
t.Errorf("expected %v, received %v", jerb.Nickname, jerberoos[0].Nickname)
|
||||
}
|
||||
assert.Equal(t, jerb.Nickname, results[0].Nickname)
|
||||
|
||||
err = db.SetRelationshipByID(results[0].ID, results[1].ID, 1337)
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
jerb, err = db.GetByID(results[1].ID)
|
||||
assert.NoError(t, err)
|
||||
|
||||
if jerb.Status != 1337 {
|
||||
t.Error("expected 1337")
|
||||
}
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, int64(1337), jerb.Status)
|
||||
|
||||
rel, err := db.GetRelatedUpcomingJobs(results[0].Nickname)
|
||||
assert.NoError(t, err)
|
||||
|
||||
if len(rel) != 1 {
|
||||
t.Fatal("expected 1")
|
||||
}
|
||||
if rel[0].ID != results[1].ID {
|
||||
t.Errorf("received %v expected %v", rel[0].ID, results[1].ID)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
require.Len(t, rel, 1)
|
||||
assert.Equal(t, rel[0].ID, results[1].ID)
|
||||
|
||||
err = db.SetRelationshipByID(results[0].ID, results[2].ID, 1337)
|
||||
assert.NoError(t, err)
|
||||
|
||||
rel, err = db.GetRelatedUpcomingJobs(results[0].Nickname)
|
||||
assert.NoError(t, err)
|
||||
|
||||
if len(rel) != 2 {
|
||||
t.Fatal("expected 2")
|
||||
}
|
||||
for i := range rel {
|
||||
if rel[i].ID != results[1].ID && rel[i].ID != results[2].ID {
|
||||
t.Errorf("received %v expected %v or %v", rel[i].ID, results[1].ID, results[2].ID)
|
||||
}
|
||||
}
|
||||
require.NoError(t, err)
|
||||
require.Len(t, rel, 2)
|
||||
expectedIDs := []string{results[1].ID, results[2].ID}
|
||||
actualIDs := []string{rel[0].ID, rel[1].ID}
|
||||
assert.ElementsMatch(t, expectedIDs, actualIDs)
|
||||
|
||||
jerb, err = db.GetPrerequisiteJob(results[1].Nickname)
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
if jerb.ID != results[0].ID {
|
||||
t.Errorf("received %v expected %v", jerb.ID, results[0].ID)
|
||||
}
|
||||
assert.Equal(t, jerb.ID, results[0].ID)
|
||||
|
||||
jerb, err = db.GetPrerequisiteJob(results[2].Nickname)
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
if jerb.ID != results[0].ID {
|
||||
t.Errorf("received %v expected %v", jerb.ID, results[0].ID)
|
||||
}
|
||||
assert.Equal(t, jerb.ID, results[0].ID)
|
||||
|
||||
err = db.SetRelationshipByNickname(results[4].Nickname, results[2].Nickname, 0)
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = db.SetRelationshipByNickname(results[2].Nickname, results[2].Nickname, 0)
|
||||
assert.ErrorIs(t, err, errCannotSetSamePrerequisite)
|
||||
@@ -265,18 +220,12 @@ func TestDataHistoryJob(t *testing.T) {
|
||||
// ensure only one prerequisite can be associated at once
|
||||
// after setting the prerequisite twice
|
||||
rel, err = db.GetRelatedUpcomingJobs(results[4].Nickname)
|
||||
assert.NoError(t, err)
|
||||
|
||||
if len(rel) != 0 {
|
||||
t.Errorf("received %v expected %v", len(rel), 0)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
assert.Empty(t, rel)
|
||||
|
||||
rel, err = db.GetRelatedUpcomingJobs(results[3].Nickname)
|
||||
assert.NoError(t, err)
|
||||
|
||||
if len(rel) != 1 {
|
||||
t.Errorf("received %v expected %v", len(rel), 1)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, rel, 1)
|
||||
|
||||
err = testhelpers.CloseDatabase(dbConn)
|
||||
assert.NoError(t, err)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package datahistoryjobresult
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
@@ -9,6 +8,8 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gofrs/uuid"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/thrasher-corp/gocryptotrader/database"
|
||||
"github.com/thrasher-corp/gocryptotrader/database/drivers"
|
||||
"github.com/thrasher-corp/gocryptotrader/database/repository/exchange"
|
||||
@@ -68,6 +69,7 @@ func seedDB() error {
|
||||
}
|
||||
|
||||
func TestDataHistoryJob(t *testing.T) {
|
||||
t.Parallel()
|
||||
testCases := []struct {
|
||||
name string
|
||||
config *database.Config
|
||||
@@ -90,52 +92,35 @@ func TestDataHistoryJob(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
for x := range testCases {
|
||||
test := testCases[x]
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
|
||||
t.Skip("database not configured skipping test")
|
||||
}
|
||||
|
||||
dbConn, err := testhelpers.ConnectToDatabase(test.config)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
|
||||
require.NoError(t, err)
|
||||
|
||||
if test.seedDB != nil {
|
||||
err = test.seedDB()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if tc.seedDB != nil {
|
||||
require.NoError(t, tc.seedDB())
|
||||
}
|
||||
|
||||
db, err := Setup(dbConn)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
||||
// postgres requires job for tests to function
|
||||
var id string
|
||||
if test.name == "postgresql" {
|
||||
var selectID *sql.Rows
|
||||
selectID, err = db.sql.Query("select id from datahistoryjob where nickname = 'testdatahistoryjob1'")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if tc.name == "postgresql" {
|
||||
selectID, err := db.sql.Query("select id from datahistoryjob where nickname = 'testdatahistoryjob1'")
|
||||
require.NoError(t, err)
|
||||
defer func() {
|
||||
err = selectID.Close()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if selectID.Err() != nil {
|
||||
t.Fatal(selectID.Err())
|
||||
}
|
||||
require.NoError(t, selectID.Close())
|
||||
require.NoError(t, selectID.Err())
|
||||
}()
|
||||
selectID.Next()
|
||||
err = selectID.Scan(&id)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
var resulterinos, resultaroos []*DataHistoryJobResult
|
||||
@@ -152,9 +137,7 @@ func TestDataHistoryJob(t *testing.T) {
|
||||
})
|
||||
}
|
||||
err = db.Upsert(resulterinos...)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
// insert the same results to test conflict resolution
|
||||
for i := range 20 {
|
||||
uu, _ := uuid.NewV4()
|
||||
@@ -174,30 +157,18 @@ func TestDataHistoryJob(t *testing.T) {
|
||||
resultaroos = append(resultaroos, j)
|
||||
}
|
||||
err = db.Upsert(resultaroos...)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
||||
results, err := db.GetByJobID(id)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(results) == 0 {
|
||||
t.Error("expected job results")
|
||||
}
|
||||
require.NoError(t, err)
|
||||
assert.NotEmpty(t, results)
|
||||
|
||||
results, err = db.GetJobResultsBetween(id, time.Now().Add(time.Hour*23), time.Now().Add(time.Hour*25))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(results) == 0 {
|
||||
t.Errorf("expected job result, received %v", len(results))
|
||||
}
|
||||
require.NoError(t, err)
|
||||
assert.NotEmpty(t, results)
|
||||
|
||||
err = testhelpers.CloseDatabase(dbConn)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/thrasher-corp/gocryptotrader/database"
|
||||
"github.com/thrasher-corp/gocryptotrader/database/drivers"
|
||||
"github.com/thrasher-corp/gocryptotrader/database/testhelpers"
|
||||
@@ -55,7 +57,8 @@ func TestMain(m *testing.M) {
|
||||
}
|
||||
|
||||
func TestInsertMany(t *testing.T) {
|
||||
testCases := []struct {
|
||||
t.Parallel()
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
config *database.Config
|
||||
seedDB func() error
|
||||
@@ -75,43 +78,30 @@ func TestInsertMany(t *testing.T) {
|
||||
},
|
||||
seedDB: seed,
|
||||
},
|
||||
}
|
||||
|
||||
for x := range testCases {
|
||||
test := testCases[x]
|
||||
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
|
||||
t.Skip("database not configured skipping test")
|
||||
}
|
||||
|
||||
dbConn, err := testhelpers.ConnectToDatabase(test.config)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
|
||||
require.NoError(t, err)
|
||||
|
||||
if tc.seedDB != nil {
|
||||
require.NoError(t, tc.seedDB())
|
||||
}
|
||||
|
||||
if test.seedDB != nil {
|
||||
err = test.seedDB()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
err = InsertMany(testExchanges)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
require.NoError(t, InsertMany(testExchanges))
|
||||
|
||||
err = testhelpers.CloseDatabase(dbConn)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestOneAndOneByUUID(t *testing.T) {
|
||||
testCases := []struct {
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
config *database.Config
|
||||
seedDB func() error
|
||||
@@ -131,45 +121,27 @@ func TestOneAndOneByUUID(t *testing.T) {
|
||||
},
|
||||
seedDB: seed,
|
||||
},
|
||||
}
|
||||
|
||||
for x := range testCases {
|
||||
test := testCases[x]
|
||||
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
|
||||
t.Skip("database not configured skipping test")
|
||||
}
|
||||
|
||||
dbConn, err := testhelpers.ConnectToDatabase(test.config)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
|
||||
require.NoError(t, err)
|
||||
|
||||
if test.seedDB != nil {
|
||||
err = test.seedDB()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if tc.seedDB != nil {
|
||||
require.NoError(t, tc.seedDB())
|
||||
}
|
||||
|
||||
ret, err := One("one")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
||||
ret2, err := OneByUUID(ret.UUID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
||||
if ret.Name != ret2.Name {
|
||||
t.Fatalf("unexpected value received: %v", ret2.Name)
|
||||
}
|
||||
err = testhelpers.CloseDatabase(dbConn)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
assert.Equal(t, ret.Name, ret2.Name)
|
||||
assert.NoError(t, testhelpers.CloseDatabase(dbConn))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,11 +3,13 @@ package repository
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/thrasher-corp/gocryptotrader/database"
|
||||
)
|
||||
|
||||
func TestGetSQLDialect(t *testing.T) {
|
||||
testCases := []struct {
|
||||
for _, tc := range []struct {
|
||||
driver string
|
||||
expectedReturn string
|
||||
}{
|
||||
@@ -27,22 +29,13 @@ func TestGetSQLDialect(t *testing.T) {
|
||||
"invalid",
|
||||
database.DBInvalidDriver,
|
||||
},
|
||||
}
|
||||
for x := range testCases {
|
||||
test := testCases[x]
|
||||
|
||||
t.Run(test.driver, func(t *testing.T) {
|
||||
} {
|
||||
t.Run(tc.driver, func(t *testing.T) {
|
||||
cfg := &database.Config{
|
||||
Driver: test.driver,
|
||||
}
|
||||
err := database.DB.SetConfig(cfg)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
ret := GetSQLDialect()
|
||||
if ret != test.expectedReturn {
|
||||
t.Fatalf("unexpected return: %v", ret)
|
||||
Driver: tc.driver,
|
||||
}
|
||||
require.NoError(t, database.DB.SetConfig(cfg))
|
||||
assert.Equal(t, tc.expectedReturn, GetSQLDialect())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/thrasher-corp/gocryptotrader/database"
|
||||
"github.com/thrasher-corp/gocryptotrader/database/drivers"
|
||||
"github.com/thrasher-corp/gocryptotrader/database/testhelpers"
|
||||
@@ -43,7 +45,8 @@ func TestMain(m *testing.M) {
|
||||
}
|
||||
|
||||
func TestScript(t *testing.T) {
|
||||
testCases := []struct {
|
||||
t.Parallel()
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
config *database.Config
|
||||
runner func()
|
||||
@@ -67,29 +70,22 @@ func TestScript(t *testing.T) {
|
||||
nil,
|
||||
nil,
|
||||
},
|
||||
}
|
||||
|
||||
for x := range testCases {
|
||||
test := testCases[x]
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
|
||||
t.Skip("database not configured skipping test")
|
||||
}
|
||||
|
||||
dbConn, err := testhelpers.ConnectToDatabase(test.config)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
|
||||
require.NoError(t, err)
|
||||
|
||||
if tc.runner != nil {
|
||||
tc.runner()
|
||||
}
|
||||
|
||||
if test.runner != nil {
|
||||
test.runner()
|
||||
}
|
||||
|
||||
if test.closer != nil {
|
||||
err = test.closer(dbConn)
|
||||
if err != nil {
|
||||
t.Log(err)
|
||||
}
|
||||
if tc.closer != nil {
|
||||
assert.NoError(t, tc.closer(dbConn))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gofrs/uuid"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/thrasher-corp/gocryptotrader/currency"
|
||||
"github.com/thrasher-corp/gocryptotrader/database"
|
||||
"github.com/thrasher-corp/gocryptotrader/database/drivers"
|
||||
@@ -54,7 +56,8 @@ func TestMain(m *testing.M) {
|
||||
}
|
||||
|
||||
func TestTrades(t *testing.T) {
|
||||
testCases := []struct {
|
||||
t.Parallel()
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
config *database.Config
|
||||
seedDB func() error
|
||||
@@ -74,33 +77,22 @@ func TestTrades(t *testing.T) {
|
||||
},
|
||||
seedDB: seedDB,
|
||||
},
|
||||
}
|
||||
|
||||
for x := range testCases {
|
||||
test := testCases[x]
|
||||
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
|
||||
t.Skip("database not configured skipping test")
|
||||
}
|
||||
|
||||
dbConn, err := testhelpers.ConnectToDatabase(test.config)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
|
||||
require.NoError(t, err)
|
||||
|
||||
if test.seedDB != nil {
|
||||
err = test.seedDB()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if tc.seedDB != nil {
|
||||
require.NoError(t, tc.seedDB())
|
||||
}
|
||||
|
||||
tradeSQLTester(t)
|
||||
err = testhelpers.CloseDatabase(dbConn)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
assert.NoError(t, testhelpers.CloseDatabase(dbConn))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/thrasher-corp/gocryptotrader/database"
|
||||
"github.com/thrasher-corp/gocryptotrader/database/drivers"
|
||||
)
|
||||
@@ -31,11 +33,11 @@ func TestMain(m *testing.M) {
|
||||
}
|
||||
|
||||
func TestDatabaseConnect(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
config *database.Config
|
||||
closer func(dbConn *database.Instance) error
|
||||
output any
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
config *database.Config
|
||||
closer func(dbConn *database.Instance) error
|
||||
expError error
|
||||
}{
|
||||
{
|
||||
"SQLite",
|
||||
@@ -60,35 +62,18 @@ func TestDatabaseConnect(t *testing.T) {
|
||||
{
|
||||
name: "Postgres",
|
||||
config: PostgresTestDatabase,
|
||||
output: nil,
|
||||
},
|
||||
}
|
||||
|
||||
for x := range testCases {
|
||||
test := testCases[x]
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
if !CheckValidConfig(&test.config.ConnectionDetails) {
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
if !CheckValidConfig(&tc.config.ConnectionDetails) {
|
||||
t.Skip("database not configured skipping test")
|
||||
}
|
||||
|
||||
dbConn, err := ConnectToDatabase(test.config)
|
||||
if err != nil {
|
||||
switch v := test.output.(type) {
|
||||
case error:
|
||||
if v.Error() != err.Error() {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
dbConn, err := ConnectToDatabase(tc.config)
|
||||
require.ErrorIs(t, err, tc.expError)
|
||||
|
||||
if test.closer != nil {
|
||||
err = test.closer(dbConn)
|
||||
if err != nil {
|
||||
t.Log(err)
|
||||
}
|
||||
if tc.closer != nil {
|
||||
assert.NoError(t, tc.closer(dbConn))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user