mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-17 07:26:48 +00:00
- Modifications made to the request package. Planned improvements will be sending requests on intervals, rate limiter back off support, dynamic tuning and requests packaged into a request job group. - Can modify each exchanges individual HTTP client (e.g timeout and transport settings). - Bot now uses an exchange config HTTP timeout value. - Bot now uses a global HTTP timeout (configurable). - Batched ticker request support for exchanges. - Ticker and Orderbook fetching now are spanned accross multiple go routines and regulated by a sync wait group. - Fixes hack used to load exchanges, now uses a sync wait group. - Ticker and Orderbook storage and fetching now uses mutex locks. - New pair function for finding different pairs between two supplied pair arrays. This is used for currency pair updates for exchange which support dynamic updating. - Shows removal/additions of dynamic updates currencies.
361 lines
9.0 KiB
Go
361 lines
9.0 KiB
Go
package pair
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestLower(t *testing.T) {
|
|
t.Parallel()
|
|
pair := CurrencyItem("BTCUSD")
|
|
actual := pair.Lower()
|
|
expected := CurrencyItem("btcusd")
|
|
if actual != expected {
|
|
t.Errorf("Test failed. Lower(): %s was not equal to expected value: %s",
|
|
actual, expected)
|
|
}
|
|
}
|
|
|
|
func TestUpper(t *testing.T) {
|
|
t.Parallel()
|
|
pair := CurrencyItem("btcusd")
|
|
actual := pair.Upper()
|
|
expected := CurrencyItem("BTCUSD")
|
|
if actual != expected {
|
|
t.Errorf("Test failed. Upper(): %s was not equal to expected value: %s",
|
|
actual, expected)
|
|
}
|
|
}
|
|
|
|
func TestString(t *testing.T) {
|
|
t.Parallel()
|
|
pair := NewCurrencyPair("BTC", "USD")
|
|
actual := "BTCUSD"
|
|
expected := pair.Pair().String()
|
|
if actual != expected {
|
|
t.Errorf("Test failed. String(): %s was not equal to expected value: %s",
|
|
actual, expected)
|
|
}
|
|
}
|
|
|
|
func TestGetFirstCurrency(t *testing.T) {
|
|
t.Parallel()
|
|
pair := NewCurrencyPair("BTC", "USD")
|
|
actual := pair.GetFirstCurrency()
|
|
expected := CurrencyItem("BTC")
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. GetFirstCurrency(): %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestGetSecondCurrency(t *testing.T) {
|
|
t.Parallel()
|
|
pair := NewCurrencyPair("BTC", "USD")
|
|
actual := pair.GetSecondCurrency()
|
|
expected := CurrencyItem("USD")
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. GetSecondCurrency(): %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestPair(t *testing.T) {
|
|
t.Parallel()
|
|
pair := NewCurrencyPair("BTC", "USD")
|
|
actual := pair.Pair()
|
|
expected := CurrencyItem("BTCUSD")
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Pair(): %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestDisplay(t *testing.T) {
|
|
t.Parallel()
|
|
pair := NewCurrencyPairDelimiter("BTC-USD", "-")
|
|
actual := pair.Pair()
|
|
expected := CurrencyItem("BTC-USD")
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Pair(): %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
|
|
actual = pair.Display("", false)
|
|
expected = CurrencyItem("btcusd")
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Pair(): %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
|
|
actual = pair.Display("~", true)
|
|
expected = CurrencyItem("BTC~USD")
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Pair(): %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestEqual(t *testing.T) {
|
|
t.Parallel()
|
|
pair := NewCurrencyPair("BTC", "USD")
|
|
secondPair := NewCurrencyPair("btc", "uSd")
|
|
actual := pair.Equal(secondPair, false)
|
|
expected := true
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Equal(): %v was not equal to expected value: %v",
|
|
actual, expected,
|
|
)
|
|
}
|
|
|
|
secondPair.SecondCurrency = "ETH"
|
|
actual = pair.Equal(secondPair, false)
|
|
expected = false
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Equal(): %v was not equal to expected value: %v",
|
|
actual, expected,
|
|
)
|
|
}
|
|
|
|
secondPair = NewCurrencyPair("USD", "BTC")
|
|
actual = pair.Equal(secondPair, false)
|
|
expected = true
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Equal(): %v was not equal to expected value: %v",
|
|
actual, expected,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestSwap(t *testing.T) {
|
|
t.Parallel()
|
|
pair := NewCurrencyPair("BTC", "USD")
|
|
actual := pair.Swap().Pair()
|
|
expected := CurrencyItem("USDBTC")
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. TestSwap: %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestNewCurrencyPair(t *testing.T) {
|
|
t.Parallel()
|
|
pair := NewCurrencyPair("BTC", "USD")
|
|
actual := pair.Pair()
|
|
expected := CurrencyItem("BTCUSD")
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Pair(): %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestNewCurrencyPairDelimiter(t *testing.T) {
|
|
t.Parallel()
|
|
pair := NewCurrencyPairDelimiter("BTC-USD", "-")
|
|
actual := pair.Pair()
|
|
expected := CurrencyItem("BTC-USD")
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Pair(): %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
|
|
actual = CurrencyItem(pair.Delimiter)
|
|
expected = "-"
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Delmiter: %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
}
|
|
|
|
// NewCurrencyPairFromIndex returns a CurrencyPair via a currency string and
|
|
// specific index
|
|
func TestNewCurrencyPairFromIndex(t *testing.T) {
|
|
t.Parallel()
|
|
currency := "BTCUSD"
|
|
index := "BTC"
|
|
|
|
pair := NewCurrencyPairFromIndex(currency, index)
|
|
pair.Delimiter = "-"
|
|
actual := pair.Pair()
|
|
|
|
expected := CurrencyItem("BTC-USD")
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Pair(): %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
|
|
currency = "DOGEBTC"
|
|
|
|
pair = NewCurrencyPairFromIndex(currency, index)
|
|
pair.Delimiter = "-"
|
|
actual = pair.Pair()
|
|
|
|
expected = CurrencyItem("DOGE-BTC")
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Pair(): %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestNewCurrencyPairFromString(t *testing.T) {
|
|
t.Parallel()
|
|
pairStr := "BTC-USD"
|
|
pair := NewCurrencyPairFromString(pairStr)
|
|
actual := pair.Pair()
|
|
expected := CurrencyItem("BTC-USD")
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Pair(): %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
|
|
pairStr = "BTCUSD"
|
|
pair = NewCurrencyPairFromString(pairStr)
|
|
actual = pair.Pair()
|
|
expected = CurrencyItem("BTCUSD")
|
|
if actual != expected {
|
|
t.Errorf(
|
|
"Test failed. Pair(): %s was not equal to expected value: %s",
|
|
actual, expected,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestContains(t *testing.T) {
|
|
pairOne := NewCurrencyPair("BTC", "USD")
|
|
pairTwo := NewCurrencyPair("LTC", "USD")
|
|
|
|
var pairs []CurrencyPair
|
|
pairs = append(pairs, pairOne)
|
|
pairs = append(pairs, pairTwo)
|
|
|
|
if !Contains(pairs, pairOne, true) {
|
|
t.Errorf("Test failed. TestContains: Expected pair was not found")
|
|
}
|
|
|
|
if Contains(pairs, NewCurrencyPair("ETH", "USD"), false) {
|
|
t.Errorf("Test failed. TestContains: Non-existent pair was found")
|
|
}
|
|
}
|
|
|
|
func TestContainsCurrency(t *testing.T) {
|
|
p := NewCurrencyPair("BTC", "USD")
|
|
|
|
if !ContainsCurrency(p, "BTC") {
|
|
t.Error("Test failed. TestContainsCurrency: Expected currency was not found")
|
|
}
|
|
|
|
if ContainsCurrency(p, "ETH") {
|
|
t.Error("Test failed. TestContainsCurrency: Non-existent currency was found")
|
|
}
|
|
}
|
|
|
|
func TestRemovePairsByFilter(t *testing.T) {
|
|
var pairs []CurrencyPair
|
|
pairs = append(pairs, NewCurrencyPair("BTC", "USD"))
|
|
pairs = append(pairs, NewCurrencyPair("LTC", "USD"))
|
|
pairs = append(pairs, NewCurrencyPair("LTC", "USDT"))
|
|
|
|
pairs = RemovePairsByFilter(pairs, "USDT")
|
|
if Contains(pairs, NewCurrencyPair("LTC", "USDT"), true) {
|
|
t.Error("Test failed. TestRemovePairsByFilter unexpected result")
|
|
}
|
|
}
|
|
|
|
func TestFormatPairs(t *testing.T) {
|
|
if len(FormatPairs([]string{""}, "-", "")) > 0 {
|
|
t.Error("Test failed. TestFormatPairs: Empty string returned a valid pair")
|
|
}
|
|
|
|
if FormatPairs([]string{"BTC-USD"}, "-", "")[0].Pair().String() != "BTC-USD" {
|
|
t.Error("Test failed. TestFormatPairs: Expected pair was not found")
|
|
}
|
|
|
|
if FormatPairs([]string{"BTCUSD"}, "", "BTC")[0].Pair().String() != "BTCUSD" {
|
|
t.Error("Test failed. TestFormatPairs: Expected pair was not found")
|
|
}
|
|
|
|
if FormatPairs([]string{"ETHUSD"}, "", "")[0].Pair().String() != "ETHUSD" {
|
|
t.Error("Test failed. TestFormatPairs: Expected pair was not found")
|
|
}
|
|
}
|
|
|
|
func TestCopyPairFormat(t *testing.T) {
|
|
pairOne := NewCurrencyPair("BTC", "USD")
|
|
pairOne.Delimiter = "-"
|
|
pairTwo := NewCurrencyPair("LTC", "USD")
|
|
|
|
var pairs []CurrencyPair
|
|
pairs = append(pairs, pairOne)
|
|
pairs = append(pairs, pairTwo)
|
|
|
|
testPair := NewCurrencyPair("BTC", "USD")
|
|
testPair.Delimiter = "~"
|
|
|
|
result := CopyPairFormat(testPair, pairs, false)
|
|
if result.Pair().String() != "BTC-USD" {
|
|
t.Error("Test failed. TestCopyPairFormat: Expected pair was not found")
|
|
}
|
|
|
|
result = CopyPairFormat(NewCurrencyPair("ETH", "USD"), pairs, true)
|
|
if result.Pair().String() != "" {
|
|
t.Error("Test failed. TestCopyPairFormat: Unexpected non empty pair returned")
|
|
}
|
|
}
|
|
|
|
func TestFindPairDifferences(t *testing.T) {
|
|
pairList := []string{"BTC-USD", "ETH-USD", "LTC-USD"}
|
|
|
|
// Test new pair update
|
|
newPairs, removedPairs := FindPairDifferences(pairList, []string{"DASH-USD"})
|
|
if len(newPairs) != 1 && len(removedPairs) != 3 {
|
|
t.Error("Test failed. TestFindPairDifferences: Unexpected values")
|
|
}
|
|
|
|
// Test that we don't allow empty strings for new pairs
|
|
newPairs, removedPairs = FindPairDifferences(pairList, []string{""})
|
|
if len(newPairs) != 0 && len(removedPairs) != 3 {
|
|
t.Error("Test failed. TestFindPairDifferences: Unexpected values")
|
|
}
|
|
|
|
// Test that we don't allow empty strings for new pairs
|
|
newPairs, removedPairs = FindPairDifferences([]string{""}, pairList)
|
|
if len(newPairs) != 3 && len(removedPairs) != 0 {
|
|
t.Error("Test failed. TestFindPairDifferences: Unexpected values")
|
|
}
|
|
|
|
// Test that the supplied pair lists are the same, so
|
|
// no newPairs or removedPairs
|
|
newPairs, removedPairs = FindPairDifferences(pairList, pairList)
|
|
if len(newPairs) != 0 && len(removedPairs) != 0 {
|
|
t.Error("Test failed. TestFindPairDifferences: Unexpected values")
|
|
}
|
|
}
|