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/testutil"
20 func TestDefineAssetWithLowercase(t *testing.T) {
21 reg := mockNewRegistry(t)
23 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, alias, nil)
27 if *asset.Alias != strings.ToUpper(alias) {
28 t.Fatal("created asset alias should be uppercase")
32 func TestDefineAssetWithSpaceTrimed(t *testing.T) {
33 reg := mockNewRegistry(t)
34 alias := " WITH SPACE "
35 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, alias, nil)
39 if *asset.Alias != strings.TrimSpace(alias) {
40 t.Fatal("created asset alias should be uppercase")
44 func TestDefineAsset(t *testing.T) {
45 ctx := context.Background()
46 reg := mockNewRegistry(t)
47 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, "asset-alias", nil)
49 testutil.FatalErr(t, err)
52 found, err := reg.FindByID(ctx, &asset.AssetID)
54 t.Errorf("unexpected error %v", err)
57 if !testutil.DeepEqual(asset, found) {
58 t.Errorf("expected asset %v to be recorded as %v", asset, found)
62 func TestDefineBtmAsset(t *testing.T) {
63 reg := mockNewRegistry(t)
64 _, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, consensus.BTMAlias, nil)
66 testutil.FatalErr(t, err)
70 func TestFindAssetByID(t *testing.T) {
71 ctx := context.Background()
72 reg := mockNewRegistry(t)
73 keys := []chainkd.XPub{testutil.TestXPub}
74 asset, err := reg.Define(keys, 1, nil, "", nil)
76 testutil.FatalErr(t, err)
79 found, err := reg.FindByID(ctx, &asset.AssetID)
81 testutil.FatalErr(t, err)
84 if !testutil.DeepEqual(asset, found) {
85 t.Errorf("expected %v and %v to match", asset, found)
89 func TestUpdateAssetTags(t *testing.T) {
90 dirPath, err := ioutil.TempDir(".", "")
94 defer os.RemoveAll(dirPath)
96 testDB := dbm.NewDB("testdb", "leveldb", "temp")
97 defer os.RemoveAll("temp")
99 store := leveldb.NewStore(testDB)
100 txPool := protocol.NewTxPool()
101 chain, err := protocol.NewChain(store, txPool)
106 reg := NewRegistry(testDB, chain)
107 ctx := context.Background()
109 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, "asset-alias",
110 map[string]interface{}{
114 testutil.FatalErr(t, err)
118 wantTags := map[string]interface{}{
122 if reg.UpdateTags(ctx, asset.AssetID.String(), wantTags) != nil {
123 testutil.FatalErr(t, err)
126 asset1, err := reg.FindByAlias(ctx, *asset.Alias)
128 testutil.FatalErr(t, err)
131 gotTags := asset1.Tags
132 if !reflect.DeepEqual(gotTags, wantTags) {
133 t.Fatalf("tags:\ngot: %v\nwant: %v", gotTags, wantTags)
137 wantTags = map[string]interface{}{
141 if reg.UpdateTags(ctx, *asset.Alias, wantTags) != nil {
142 testutil.FatalErr(t, err)
145 asset2, err := reg.FindByAlias(ctx, *asset.Alias)
147 testutil.FatalErr(t, err)
150 gotTags = asset2.Tags
151 if !reflect.DeepEqual(gotTags, wantTags) {
152 t.Fatalf("tags:\ngot: %v\nwant: %v", gotTags, wantTags)
156 func TestUpdateAssetAlias(t *testing.T) {
157 ctx := context.Background()
158 reg := mockNewRegistry(t)
160 oldAlias := "OLD_ALIAS"
161 newAlias := "NEW_ALIAS"
163 _, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, oldAlias, nil)
165 testutil.FatalErr(t, err)
168 if reg.UpdateAssetAlias(oldAlias, newAlias) != nil {
169 testutil.FatalErr(t, err)
172 asset1, err := reg.FindByAlias(ctx, newAlias)
174 testutil.FatalErr(t, err)
177 gotAlias := *asset1.Alias
178 if !reflect.DeepEqual(gotAlias, newAlias) {
179 t.Fatalf("alias:\ngot: %v\nwant: %v", gotAlias, newAlias)
183 func TestListAssets(t *testing.T) {
184 reg := mockNewRegistry(t)
186 firstAlias := "FIRST_ALIAS"
187 secondAlias := "SECOND_ALIAS"
189 firstAsset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, firstAlias, nil)
191 testutil.FatalErr(t, err)
194 secondAsset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, secondAlias, nil)
196 testutil.FatalErr(t, err)
199 wantAssets := []*Asset{DefaultNativeAsset, secondAsset, firstAsset}
201 gotAssets, err := reg.ListAssets("")
203 testutil.FatalErr(t, err)
206 if !testutil.DeepEqual(gotAssets, wantAssets) {
207 t.Fatalf("got:\ngot: %v\nwant: %v", gotAssets, wantAssets)
211 func mockChain(testDB dbm.DB) (*protocol.Chain, error) {
212 store := leveldb.NewStore(testDB)
213 txPool := protocol.NewTxPool()
214 chain, err := protocol.NewChain(store, txPool)
221 func mockNewRegistry(t *testing.T) *Registry {
222 dirPath, err := ioutil.TempDir(".", "")
226 defer os.RemoveAll(dirPath)
228 testDB := dbm.NewDB("testdb", "leveldb", "temp")
229 defer os.RemoveAll("temp")
231 chain, err := mockChain(testDB)
236 return NewRegistry(testDB, chain)