Files
gocryptotrader/currency/storage_test.go
Adrian Gallagher 68588560e3 CI: Bump go version, linters and fix minor issues (#1010)
* Bump golang, golangci-lint versions and fix issues

* Add -fno-stack-protector

* Fix AppVeyor golangci-lint ver

* Nitters

* Nitters round 2
2022-08-17 11:37:22 +10:00

249 lines
7.2 KiB
Go

package currency
import (
"errors"
"fmt"
"os"
"testing"
"github.com/thrasher-corp/gocryptotrader/database/testhelpers"
)
func TestMain(m *testing.M) {
var err error
testhelpers.TempDir, err = os.MkdirTemp("", "gct-temp")
if err != nil {
fmt.Printf("failed to create temp file: %v", err)
os.Exit(1)
}
t := m.Run()
err = os.RemoveAll(testhelpers.TempDir)
if err != nil {
fmt.Printf("Failed to remove temp db file: %v", err)
}
os.Exit(t)
}
func TestRunUpdater(t *testing.T) {
var newStorage Storage
emptyMainConfig := Config{}
err := newStorage.RunUpdater(BotOverrides{}, &emptyMainConfig, "")
if err == nil {
t.Fatal("storage RunUpdater() error cannot be nil")
}
mainConfig := Config{}
err = newStorage.RunUpdater(BotOverrides{}, &mainConfig, "")
if !errors.Is(err, errFiatDisplayCurrencyUnset) {
t.Fatalf("received: '%v' but expected: '%v'", err, errFiatDisplayCurrencyUnset)
}
mainConfig.FiatDisplayCurrency = BTC
err = newStorage.RunUpdater(BotOverrides{}, &mainConfig, "")
if !errors.Is(err, ErrFiatDisplayCurrencyIsNotFiat) {
t.Fatalf("received: '%v' but expected: '%v'", err, ErrFiatDisplayCurrencyIsNotFiat)
}
mainConfig.FiatDisplayCurrency = AUD
err = newStorage.RunUpdater(BotOverrides{}, &mainConfig, "")
if !errors.Is(err, errNoFilePathSet) {
t.Fatalf("received: '%v' but expected: '%v'", err, errNoFilePathSet)
}
tempDir := testhelpers.TempDir
err = newStorage.RunUpdater(BotOverrides{}, &mainConfig, tempDir)
if !errors.Is(err, errInvalidCurrencyFileUpdateDuration) {
t.Fatalf("received: '%v' but expected: '%v'", err, errInvalidCurrencyFileUpdateDuration)
}
mainConfig.CurrencyFileUpdateDuration = DefaultCurrencyFileDelay
err = newStorage.RunUpdater(BotOverrides{}, &mainConfig, tempDir)
if !errors.Is(err, errInvalidForeignExchangeUpdateDuration) {
t.Fatalf("received: '%v' but expected: '%v'", err, errInvalidForeignExchangeUpdateDuration)
}
mainConfig.ForeignExchangeUpdateDuration = DefaultForeignExchangeDelay
err = newStorage.RunUpdater(BotOverrides{}, &mainConfig, tempDir)
if !errors.Is(err, errNoForeignExchangeProvidersEnabled) {
t.Fatalf("received: '%v' but expected: '%v'", err, errNoForeignExchangeProvidersEnabled)
}
settings := FXSettings{
Name: "Fixer",
Enabled: true,
APIKey: "wo",
}
mainConfig.ForexProviders = AllFXSettings{settings}
err = newStorage.RunUpdater(BotOverrides{Fixer: true}, &mainConfig, tempDir)
if errors.Is(err, nil) {
t.Fatalf("received: '%v' but expected: '%v'", err, "an error")
}
err = newStorage.Shutdown()
if err != nil {
t.Fatal(err)
}
settings.Name = "CurrencyConverter"
mainConfig.ForexProviders = AllFXSettings{settings}
err = newStorage.RunUpdater(BotOverrides{CurrencyConverter: true}, &mainConfig, tempDir)
if errors.Is(err, nil) {
t.Fatalf("received: '%v' but expected: '%v'", err, "an error")
}
err = newStorage.Shutdown()
if err != nil {
t.Fatal(err)
}
settings.Name = "CurrencyLayer"
mainConfig.ForexProviders = AllFXSettings{settings}
err = newStorage.RunUpdater(BotOverrides{CurrencyLayer: true}, &mainConfig, tempDir)
if errors.Is(err, nil) {
t.Fatalf("received: '%v' but expected: '%v'", err, "an error")
}
err = newStorage.Shutdown()
if err != nil {
t.Fatal(err)
}
settings.Name = "OpenExchangeRates"
mainConfig.ForexProviders = AllFXSettings{settings}
err = newStorage.RunUpdater(BotOverrides{OpenExchangeRates: true}, &mainConfig, tempDir)
if !errors.Is(err, nil) {
t.Fatalf("received: '%v' but expected: '%v'", err, nil)
}
err = newStorage.Shutdown()
if err != nil {
t.Fatal(err)
}
settings.Name = "ExchangeRates"
mainConfig.ForexProviders = AllFXSettings{settings}
err = newStorage.RunUpdater(BotOverrides{ExchangeRates: true}, &mainConfig, tempDir)
if errors.Is(err, nil) {
t.Fatalf("received: '%v' but expected: '%v'", err, "an error")
}
err = newStorage.Shutdown()
if err != nil {
t.Fatal(err)
}
settings.Name = "ExchangeRateHost"
mainConfig.ForexProviders = AllFXSettings{settings}
err = newStorage.RunUpdater(BotOverrides{ExchangeRateHost: true}, &mainConfig, tempDir)
if !errors.Is(err, nil) {
t.Fatalf("received: '%v' but expected: '%v'", err, nil)
}
err = newStorage.Shutdown()
if err != nil {
t.Fatal(err)
}
// old config where two providers enabled
oldDefault := FXSettings{
Name: "ExchangeRates",
Enabled: true,
APIKey: "", // old default provider which did not need api keys.
PrimaryProvider: true,
}
other := FXSettings{
Name: "OpenExchangeRates",
Enabled: true,
APIKey: "enabled-keys", // Has keys enabled and will fall over to primary
}
defaultProvider := FXSettings{
// From config this will be included but not necessarily enabled.
Name: "ExchangeRateHost",
Enabled: false,
}
mainConfig.ForexProviders = AllFXSettings{oldDefault, other, defaultProvider}
err = newStorage.RunUpdater(BotOverrides{ExchangeRates: true, OpenExchangeRates: true}, &mainConfig, tempDir)
if !errors.Is(err, nil) {
t.Fatalf("received: '%v' but expected: '%v'", err, nil)
}
if mainConfig.ForexProviders[0].Enabled {
t.Fatal("old default provider should not be enabled due to unset keys")
}
if mainConfig.ForexProviders[0].PrimaryProvider {
t.Fatal("old default provider should not be a primary provider anymore")
}
if !mainConfig.ForexProviders[1].Enabled {
t.Fatal("open exchange rates provider with keys set should be enabled")
}
if !mainConfig.ForexProviders[1].PrimaryProvider {
t.Fatal("open exchange rates provider with keys set should be set as primary provider")
}
if mainConfig.ForexProviders[2].Enabled {
t.Fatal("actual default provider should not be enabled")
}
if mainConfig.ForexProviders[2].PrimaryProvider {
t.Fatal("actual default provider should not be designated as primary provider")
}
err = newStorage.Shutdown()
if err != nil {
t.Fatal(err)
}
// old config where two providers enabled
oldDefault = FXSettings{
Name: "ExchangeRates",
Enabled: true,
APIKey: "", // old default provider which did not need api keys.
PrimaryProvider: true,
}
other = FXSettings{
Name: "OpenExchangeRates",
Enabled: true,
APIKey: "", // Has no keys enabled will fall over to new default provider.
}
mainConfig.ForexProviders = AllFXSettings{oldDefault, other, defaultProvider}
err = newStorage.RunUpdater(BotOverrides{ExchangeRates: true, OpenExchangeRates: true}, &mainConfig, tempDir)
if !errors.Is(err, nil) {
t.Fatalf("received: '%v' but expected: '%v'", err, nil)
}
if mainConfig.ForexProviders[0].Enabled {
t.Fatal("old default provider should not be enabled due to unset keys")
}
if mainConfig.ForexProviders[0].PrimaryProvider {
t.Fatal("old default provider should not be a primary provider anymore")
}
if mainConfig.ForexProviders[1].Enabled {
t.Fatal("open exchange rates provider with keys unset should not be enabled")
}
if mainConfig.ForexProviders[1].PrimaryProvider {
t.Fatal("open exchange rates provider with keys unset should not be set as primary provider")
}
if !mainConfig.ForexProviders[2].Enabled {
t.Fatal("actual default provider should not be disabled")
}
if !mainConfig.ForexProviders[2].PrimaryProvider {
t.Fatal("actual default provider should be designated as primary provider")
}
}