mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 23:16:45 +00:00
* Config: Move config versions to separate pacakges * Config: Move version tests to blackbox texts * Config: Protect registerVersion from overflow * Config: Protect against version already registered
50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package versions_test
|
|
|
|
import (
|
|
"io/fs"
|
|
"os"
|
|
"path/filepath"
|
|
"reflect"
|
|
"regexp"
|
|
"strconv"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/thrasher-corp/gocryptotrader/config/versions"
|
|
testutils "github.com/thrasher-corp/gocryptotrader/internal/testing/utils"
|
|
)
|
|
|
|
func TestVersionsRegistered(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
r, err := testutils.RootPathFromCWD()
|
|
require.NoError(t, err)
|
|
|
|
versionsDir := filepath.Join(r, "config", "versions")
|
|
_, err = os.Stat(versionsDir)
|
|
require.NoError(t, err, "config/versions must exist")
|
|
|
|
err = filepath.WalkDir(versionsDir, func(p string, d fs.DirEntry, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !d.IsDir() || p == versionsDir {
|
|
return nil
|
|
}
|
|
verStr := filepath.Base(p)
|
|
verMatch := regexp.MustCompile(`v(\d+)`).FindStringSubmatch(verStr)
|
|
if len(verMatch) != 2 {
|
|
return filepath.SkipDir
|
|
}
|
|
t.Run(verStr, func(t *testing.T) {
|
|
version, err := strconv.ParseUint(verMatch[1], 10, 16)
|
|
require.NoError(t, err, "verMatch must ParseUint without error")
|
|
v := versions.Manager.Version(uint16(version))
|
|
require.NotNil(t, v, "version.Manager init must register this version")
|
|
require.Contains(t, reflect.TypeOf(v).String(), "*"+verStr+".Version", "version registered must be the correct type")
|
|
})
|
|
return filepath.SkipDir
|
|
})
|
|
require.NoError(t, err, "WalkDir must not error")
|
|
}
|