12 dbm "github.com/tendermint/tmlibs/db"
14 "github.com/vapor/consensus"
15 "github.com/vapor/crypto/ed25519/chainkd"
16 "github.com/vapor/database/leveldb"
17 "github.com/vapor/protocol"
18 "github.com/vapor/testutil"
21 func TestDefineAssetWithLowercase(t *testing.T) {
22 reg := mockNewRegistry(t)
24 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, alias, nil)
28 if *asset.Alias != strings.ToUpper(alias) {
29 t.Fatal("created asset alias should be uppercase")
33 func TestDefineAssetWithSpaceTrimed(t *testing.T) {
34 reg := mockNewRegistry(t)
35 alias := " WITH SPACE "
36 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, alias, nil)
40 if *asset.Alias != strings.TrimSpace(alias) {
41 t.Fatal("created asset alias should be uppercase")
45 func TestDefineAsset(t *testing.T) {
46 ctx := context.Background()
47 reg := mockNewRegistry(t)
48 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, "asset-alias", nil)
50 testutil.FatalErr(t, err)
53 found, err := reg.FindByID(ctx, &asset.AssetID)
55 t.Errorf("unexpected error %v", err)
58 if !testutil.DeepEqual(asset, found) {
59 t.Errorf("expected asset %v to be recorded as %v", asset, found)
63 func TestDefineBtmAsset(t *testing.T) {
64 reg := mockNewRegistry(t)
65 _, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, consensus.BTMAlias, nil)
67 testutil.FatalErr(t, err)
71 func TestFindAssetByID(t *testing.T) {
72 ctx := context.Background()
73 reg := mockNewRegistry(t)
74 keys := []chainkd.XPub{testutil.TestXPub}
75 asset, err := reg.Define(keys, 1, nil, "TESTASSET", nil)
77 testutil.FatalErr(t, err)
80 found, err := reg.FindByID(ctx, &asset.AssetID)
82 testutil.FatalErr(t, err)
85 if !testutil.DeepEqual(asset, found) {
86 t.Errorf("expected %v and %v to match", asset, found)
90 func TestUpdateAssetAlias(t *testing.T) {
91 reg := mockNewRegistry(t)
93 oldAlias := "OLD_ALIAS"
94 newAlias := "NEW_ALIAS"
96 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, oldAlias, nil)
98 testutil.FatalErr(t, err)
101 if reg.UpdateAssetAlias(asset.AssetID.String(), newAlias) != nil {
102 testutil.FatalErr(t, err)
105 asset1, err := reg.FindByAlias(newAlias)
107 testutil.FatalErr(t, err)
110 gotAlias := *asset1.Alias
111 if !reflect.DeepEqual(gotAlias, newAlias) {
112 t.Fatalf("alias:\ngot: %v\nwant: %v", gotAlias, newAlias)
116 type SortByAssetsAlias []*Asset
118 func (a SortByAssetsAlias) Len() int { return len(a) }
119 func (a SortByAssetsAlias) Less(i, j int) bool {
120 return strings.Compare(*a[i].Alias, *a[j].Alias) <= 0
122 func (a SortByAssetsAlias) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
124 func TestListAssets(t *testing.T) {
125 reg := mockNewRegistry(t)
127 firstAlias := "FIRST_ALIAS"
128 secondAlias := "SECOND_ALIAS"
130 firstAsset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, firstAlias, nil)
132 testutil.FatalErr(t, err)
135 secondAsset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, secondAlias, nil)
137 testutil.FatalErr(t, err)
140 wantAssets := []*Asset{DefaultNativeAsset, firstAsset, secondAsset}
142 gotAssets, err := reg.ListAssets("")
144 testutil.FatalErr(t, err)
146 sort.Sort(SortByAssetsAlias(wantAssets))
147 sort.Sort(SortByAssetsAlias(gotAssets))
148 if !testutil.DeepEqual(gotAssets, wantAssets) {
149 t.Fatalf("got:\ngot: %v\nwant: %v", gotAssets, wantAssets)
153 func mockChain(testDB dbm.DB) (*protocol.Chain, error) {
154 store := leveldb.NewStore(testDB)
155 txPool := protocol.NewTxPool(store)
156 chain, err := protocol.NewChain(store, txPool)
163 func mockNewRegistry(t *testing.T) *Registry {
164 consensus.ActiveNetParams.Signer = "78673764e0ba91a4c5ba9ec0c8c23c69e3d73bf27970e05e0a977e81e13bde475264d3b177a96646bc0ce517ae7fd63504c183ab6d330dea184331a4cf5912d5"
165 dirPath, err := ioutil.TempDir(".", "")
169 defer os.RemoveAll(dirPath)
171 testDB := dbm.NewDB("testdb", "leveldb", "temp")
172 defer os.RemoveAll("temp")
174 chain, err := mockChain(testDB)
179 return NewRegistry(testDB, chain)