+++ /dev/null
-package asset
-
-import (
- "context"
- "io/ioutil"
- "os"
- "reflect"
- "sort"
- "strings"
- "testing"
-
- dbm "github.com/tendermint/tmlibs/db"
-
- "github.com/vapor/common"
- "github.com/vapor/config"
- "github.com/vapor/consensus"
- "github.com/vapor/crypto/ed25519/chainkd"
- "github.com/vapor/database/leveldb"
- "github.com/vapor/protocol"
- "github.com/vapor/testutil"
-)
-
-func TestDefineAssetWithLowercase(t *testing.T) {
- reg := mockNewRegistry(t)
- alias := "lower"
- asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, alias, nil)
- if err != nil {
- t.Fatal(err)
- }
- if *asset.Alias != strings.ToUpper(alias) {
- t.Fatal("created asset alias should be uppercase")
- }
-}
-
-func TestDefineAssetWithSpaceTrimed(t *testing.T) {
- reg := mockNewRegistry(t)
- alias := " WITH SPACE "
- asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, alias, nil)
- if err != nil {
- t.Fatal(err)
- }
- if *asset.Alias != strings.TrimSpace(alias) {
- t.Fatal("created asset alias should be uppercase")
- }
-}
-
-func TestDefineAsset(t *testing.T) {
- ctx := context.Background()
- reg := mockNewRegistry(t)
- asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, "asset-alias", nil)
- if err != nil {
- testutil.FatalErr(t, err)
- }
-
- found, err := reg.FindByID(ctx, &asset.AssetID)
- if err != nil {
- t.Errorf("unexpected error %v", err)
- }
-
- if !testutil.DeepEqual(asset, found) {
- t.Errorf("expected asset %v to be recorded as %v", asset, found)
- }
-}
-
-func TestDefineBtmAsset(t *testing.T) {
- reg := mockNewRegistry(t)
- _, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, consensus.BTMAlias, nil)
- if err == nil {
- testutil.FatalErr(t, err)
- }
-}
-
-func TestFindAssetByID(t *testing.T) {
- ctx := context.Background()
- reg := mockNewRegistry(t)
- keys := []chainkd.XPub{testutil.TestXPub}
- asset, err := reg.Define(keys, 1, nil, "TESTASSET", nil)
- if err != nil {
- testutil.FatalErr(t, err)
-
- }
- found, err := reg.FindByID(ctx, &asset.AssetID)
- if err != nil {
- testutil.FatalErr(t, err)
- }
-
- if !testutil.DeepEqual(asset, found) {
- t.Errorf("expected %v and %v to match", asset, found)
- }
-}
-
-func TestUpdateAssetAlias(t *testing.T) {
- reg := mockNewRegistry(t)
-
- oldAlias := "OLD_ALIAS"
- newAlias := "NEW_ALIAS"
-
- asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, oldAlias, nil)
- if err != nil {
- testutil.FatalErr(t, err)
- }
-
- if reg.UpdateAssetAlias(asset.AssetID.String(), newAlias) != nil {
- testutil.FatalErr(t, err)
- }
-
- asset1, err := reg.FindByAlias(newAlias)
- if err != nil {
- testutil.FatalErr(t, err)
- }
-
- gotAlias := *asset1.Alias
- if !reflect.DeepEqual(gotAlias, newAlias) {
- t.Fatalf("alias:\ngot: %v\nwant: %v", gotAlias, newAlias)
- }
-}
-
-type SortByAssetsAlias []*Asset
-
-func (a SortByAssetsAlias) Len() int { return len(a) }
-func (a SortByAssetsAlias) Less(i, j int) bool {
- return strings.Compare(*a[i].Alias, *a[j].Alias) <= 0
-}
-func (a SortByAssetsAlias) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
-
-func TestListAssets(t *testing.T) {
- reg := mockNewRegistry(t)
-
- firstAlias := "FIRST_ALIAS"
- secondAlias := "SECOND_ALIAS"
-
- firstAsset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, firstAlias, nil)
- if err != nil {
- testutil.FatalErr(t, err)
- }
-
- secondAsset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, secondAlias, nil)
- if err != nil {
- testutil.FatalErr(t, err)
- }
-
- wantAssets := []*Asset{DefaultNativeAsset, firstAsset, secondAsset}
-
- gotAssets, err := reg.ListAssets("")
- if err != nil {
- testutil.FatalErr(t, err)
- }
- sort.Sort(SortByAssetsAlias(wantAssets))
- sort.Sort(SortByAssetsAlias(gotAssets))
- if !testutil.DeepEqual(gotAssets, wantAssets) {
- t.Fatalf("got:\ngot: %v\nwant: %v", gotAssets, wantAssets)
- }
-}
-
-func mockChain(testDB dbm.DB) (*protocol.Chain, error) {
- store := leveldb.NewStore(testDB)
- txPool := protocol.NewTxPool(store)
- chain, err := protocol.NewChain(store, txPool)
- if err != nil {
- return nil, err
- }
- return chain, nil
-}
-
-func mockNewRegistry(t *testing.T) *Registry {
- config.CommonConfig = config.DefaultConfig()
- consensus.SoloNetParams.Signer = "78673764e0ba91a4c5ba9ec0c8c23c69e3d73bf27970e05e0a977e81e13bde475264d3b177a96646bc0ce517ae7fd63504c183ab6d330dea184331a4cf5912d5"
- config.CommonConfig.Consensus.SelfVoteSigners = append(config.CommonConfig.Consensus.SelfVoteSigners, "vsm1qkm743xmgnvh84pmjchq2s4tnfpgu9ae2f9slep")
- config.CommonConfig.Consensus.XPrv = "a8e281b615809046698fb0b0f2804a36d824d48fa443350f10f1b80649d39e5f1e85cf9855548915e36137345910606cbc8e7dd8497c831dce899ee6ac112445"
- for _, v := range config.CommonConfig.Consensus.SelfVoteSigners {
- address, err := common.DecodeAddress(v, &consensus.SoloNetParams)
- if err != nil {
- t.Fatal(err)
- }
- config.CommonConfig.Consensus.Signers = append(config.CommonConfig.Consensus.Signers, address)
- }
- dirPath, err := ioutil.TempDir(".", "")
- if err != nil {
- t.Fatal(err)
- }
- defer os.RemoveAll(dirPath)
-
- testDB := dbm.NewDB("testdb", "leveldb", "temp")
- defer os.RemoveAll("temp")
-
- chain, err := mockChain(testDB)
- if err != nil {
- t.Fatal(err)
- }
-
- return NewRegistry(testDB, chain)
-}