11 dbm "github.com/tendermint/tmlibs/db"
13 "github.com/bytom/consensus"
14 "github.com/bytom/crypto/ed25519/chainkd"
15 "github.com/bytom/database/leveldb"
16 "github.com/bytom/protocol"
17 "github.com/bytom/protocol/bc"
18 "github.com/bytom/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, "", 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 TestUpdateAssetTags(t *testing.T) {
91 dirPath, err := ioutil.TempDir(".", "")
95 defer os.RemoveAll(dirPath)
97 testDB := dbm.NewDB("testdb", "leveldb", "temp")
98 defer os.RemoveAll("temp")
100 store := leveldb.NewStore(testDB)
101 txPool := protocol.NewTxPool()
102 chain, err := protocol.NewChain(bc.Hash{}, store, txPool)
107 reg := NewRegistry(testDB, chain)
108 ctx := context.Background()
110 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, "asset-alias",
111 map[string]interface{}{
115 testutil.FatalErr(t, err)
119 wantTags := map[string]interface{}{
123 if reg.UpdateTags(ctx, asset.AssetID.String(), wantTags) != nil {
124 testutil.FatalErr(t, err)
127 asset1, err := reg.FindByAlias(ctx, *asset.Alias)
129 testutil.FatalErr(t, err)
132 gotTags := asset1.Tags
133 if !reflect.DeepEqual(gotTags, wantTags) {
134 t.Fatalf("tags:\ngot: %v\nwant: %v", gotTags, wantTags)
138 wantTags = map[string]interface{}{
142 if reg.UpdateTags(ctx, *asset.Alias, wantTags) != nil {
143 testutil.FatalErr(t, err)
146 asset2, err := reg.FindByAlias(ctx, *asset.Alias)
148 testutil.FatalErr(t, err)
151 gotTags = asset2.Tags
152 if !reflect.DeepEqual(gotTags, wantTags) {
153 t.Fatalf("tags:\ngot: %v\nwant: %v", gotTags, wantTags)
157 func TestUpdateAssetAlias(t *testing.T) {
158 ctx := context.Background()
159 reg := mockNewRegistry(t)
161 oldAlias := "OLD_ALIAS"
162 newAlias := "NEW_ALIAS"
164 _, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, oldAlias, nil)
166 testutil.FatalErr(t, err)
169 if reg.UpdateAssetAlias(oldAlias, newAlias) != nil {
170 testutil.FatalErr(t, err)
173 asset1, err := reg.FindByAlias(ctx, newAlias)
175 testutil.FatalErr(t, err)
178 gotAlias := *asset1.Alias
179 if !reflect.DeepEqual(gotAlias, newAlias) {
180 t.Fatalf("alias:\ngot: %v\nwant: %v", gotAlias, newAlias)
184 func TestListAssets(t *testing.T) {
185 reg := mockNewRegistry(t)
187 firstAlias := "FIRST_ALIAS"
188 secondAlias := "SECOND_ALIAS"
190 firstAsset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, firstAlias, nil)
192 testutil.FatalErr(t, err)
195 secondAsset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, secondAlias, nil)
197 testutil.FatalErr(t, err)
200 wantAssets := []*Asset{DefaultNativeAsset, secondAsset, firstAsset}
202 gotAssets, err := reg.ListAssets("")
204 testutil.FatalErr(t, err)
207 if !testutil.DeepEqual(gotAssets, wantAssets) {
208 t.Fatalf("got:\ngot: %v\nwant: %v", gotAssets, wantAssets)
212 func mockChain(testDB dbm.DB) (*protocol.Chain, error) {
213 store := leveldb.NewStore(testDB)
214 txPool := protocol.NewTxPool()
215 chain, err := protocol.NewChain(bc.Hash{}, store, txPool)
222 func mockNewRegistry(t *testing.T) *Registry {
223 dirPath, err := ioutil.TempDir(".", "")
227 defer os.RemoveAll(dirPath)
229 testDB := dbm.NewDB("testdb", "leveldb", "temp")
230 defer os.RemoveAll("temp")
232 chain, err := mockChain(testDB)
237 return NewRegistry(testDB, chain)