Files
gocryptotrader/config/versions/register_test.go
Gareth Kirwan 1bf3433d61 Config: Refactor version packages (#1887)
* 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
2025-04-22 12:13:01 +10:00

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")
}