12 dbm "github.com/tendermint/tmlibs/db"
14 "github.com/bytom/consensus"
15 "github.com/bytom/crypto/ed25519/chainkd"
16 "github.com/bytom/database/leveldb"
17 "github.com/bytom/event"
18 "github.com/bytom/protocol"
19 "github.com/bytom/testutil"
22 func TestDefineAssetWithLowercase(t *testing.T) {
23 reg := mockNewRegistry(t)
25 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, alias, nil)
29 if *asset.Alias != strings.ToUpper(alias) {
30 t.Fatal("created asset alias should be uppercase")
34 func TestDefineAssetWithSpaceTrimed(t *testing.T) {
35 reg := mockNewRegistry(t)
36 alias := " WITH SPACE "
37 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, alias, nil)
41 if *asset.Alias != strings.TrimSpace(alias) {
42 t.Fatal("created asset alias should be uppercase")
46 func TestDefineAsset(t *testing.T) {
47 ctx := context.Background()
48 reg := mockNewRegistry(t)
49 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, "asset-alias", nil)
51 testutil.FatalErr(t, err)
54 found, err := reg.FindByID(ctx, &asset.AssetID)
56 t.Errorf("unexpected error %v", err)
59 if !testutil.DeepEqual(asset, found) {
60 t.Errorf("expected asset %v to be recorded as %v", asset, found)
64 func TestDefineBtmAsset(t *testing.T) {
65 reg := mockNewRegistry(t)
66 _, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, consensus.BTMAlias, nil)
68 testutil.FatalErr(t, err)
72 func TestFindAssetByID(t *testing.T) {
73 ctx := context.Background()
74 reg := mockNewRegistry(t)
75 keys := []chainkd.XPub{testutil.TestXPub}
76 asset, err := reg.Define(keys, 1, nil, "TESTASSET", nil)
78 testutil.FatalErr(t, err)
81 found, err := reg.FindByID(ctx, &asset.AssetID)
83 testutil.FatalErr(t, err)
86 if !testutil.DeepEqual(asset, found) {
87 t.Errorf("expected %v and %v to match", asset, found)
91 func TestUpdateAssetAlias(t *testing.T) {
92 reg := mockNewRegistry(t)
94 oldAlias := "OLD_ALIAS"
95 newAlias := "NEW_ALIAS"
97 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, oldAlias, nil)
99 testutil.FatalErr(t, err)
102 if reg.UpdateAssetAlias(asset.AssetID.String(), newAlias) != nil {
103 testutil.FatalErr(t, err)
106 asset1, err := reg.FindByAlias(newAlias)
108 testutil.FatalErr(t, err)
111 gotAlias := *asset1.Alias
112 if !reflect.DeepEqual(gotAlias, newAlias) {
113 t.Fatalf("alias:\ngot: %v\nwant: %v", gotAlias, newAlias)
117 type SortByAssetsAlias []*Asset
119 func (a SortByAssetsAlias) Len() int { return len(a) }
120 func (a SortByAssetsAlias) Less(i, j int) bool {
121 return strings.Compare(*a[i].Alias, *a[j].Alias) <= 0
123 func (a SortByAssetsAlias) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
125 func TestListAssets(t *testing.T) {
126 reg := mockNewRegistry(t)
128 firstAlias := "FIRST_ALIAS"
129 secondAlias := "SECOND_ALIAS"
131 firstAsset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, firstAlias, nil)
133 testutil.FatalErr(t, err)
136 secondAsset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, secondAlias, nil)
138 testutil.FatalErr(t, err)
141 wantAssets := []*Asset{DefaultNativeAsset, firstAsset, secondAsset}
143 gotAssets, err := reg.ListAssets("")
145 testutil.FatalErr(t, err)
147 sort.Sort(SortByAssetsAlias(wantAssets))
148 sort.Sort(SortByAssetsAlias(gotAssets))
149 if !testutil.DeepEqual(gotAssets, wantAssets) {
150 t.Fatalf("got:\ngot: %v\nwant: %v", gotAssets, wantAssets)
154 func mockChain(testDB dbm.DB) (*protocol.Chain, error) {
155 store := leveldb.NewStore(testDB)
156 dispatcher := event.NewDispatcher()
157 txPool := protocol.NewTxPool(store, dispatcher)
158 chain, err := protocol.NewChain(store, txPool)
165 func mockNewRegistry(t *testing.T) *Registry {
166 dirPath, err := ioutil.TempDir(".", "")
170 defer os.RemoveAll(dirPath)
172 testDB := dbm.NewDB("testdb", "leveldb", "temp")
173 defer os.RemoveAll("temp")
175 chain, err := mockChain(testDB)
180 return NewRegistry(testDB, chain)