12 dbm "github.com/tendermint/tmlibs/db"
14 "github.com/vapor/common"
15 "github.com/vapor/config"
16 "github.com/vapor/consensus"
17 engine "github.com/vapor/consensus/consensus"
18 "github.com/vapor/consensus/consensus/dpos"
19 "github.com/vapor/crypto/ed25519/chainkd"
20 "github.com/vapor/database/leveldb"
21 "github.com/vapor/protocol"
22 "github.com/vapor/testutil"
25 func TestDefineAssetWithLowercase(t *testing.T) {
26 reg := mockNewRegistry(t)
28 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, alias, nil)
32 if *asset.Alias != strings.ToUpper(alias) {
33 t.Fatal("created asset alias should be uppercase")
37 func TestDefineAssetWithSpaceTrimed(t *testing.T) {
38 reg := mockNewRegistry(t)
39 alias := " WITH SPACE "
40 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, alias, nil)
44 if *asset.Alias != strings.TrimSpace(alias) {
45 t.Fatal("created asset alias should be uppercase")
49 func TestDefineAsset(t *testing.T) {
50 ctx := context.Background()
51 reg := mockNewRegistry(t)
52 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, "asset-alias", nil)
54 testutil.FatalErr(t, err)
57 found, err := reg.FindByID(ctx, &asset.AssetID)
59 t.Errorf("unexpected error %v", err)
62 if !testutil.DeepEqual(asset, found) {
63 t.Errorf("expected asset %v to be recorded as %v", asset, found)
67 func TestDefineBtmAsset(t *testing.T) {
68 reg := mockNewRegistry(t)
69 _, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, consensus.BTMAlias, nil)
71 testutil.FatalErr(t, err)
75 func TestFindAssetByID(t *testing.T) {
76 ctx := context.Background()
77 reg := mockNewRegistry(t)
78 keys := []chainkd.XPub{testutil.TestXPub}
79 asset, err := reg.Define(keys, 1, nil, "TESTASSET", nil)
81 testutil.FatalErr(t, err)
84 found, err := reg.FindByID(ctx, &asset.AssetID)
86 testutil.FatalErr(t, err)
89 if !testutil.DeepEqual(asset, found) {
90 t.Errorf("expected %v and %v to match", asset, found)
94 func TestUpdateAssetAlias(t *testing.T) {
95 reg := mockNewRegistry(t)
97 oldAlias := "OLD_ALIAS"
98 newAlias := "NEW_ALIAS"
100 asset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, oldAlias, nil)
102 testutil.FatalErr(t, err)
105 if reg.UpdateAssetAlias(asset.AssetID.String(), newAlias) != nil {
106 testutil.FatalErr(t, err)
109 asset1, err := reg.FindByAlias(newAlias)
111 testutil.FatalErr(t, err)
114 gotAlias := *asset1.Alias
115 if !reflect.DeepEqual(gotAlias, newAlias) {
116 t.Fatalf("alias:\ngot: %v\nwant: %v", gotAlias, newAlias)
120 type SortByAssetsAlias []*Asset
122 func (a SortByAssetsAlias) Len() int { return len(a) }
123 func (a SortByAssetsAlias) Less(i, j int) bool {
124 return strings.Compare(*a[i].Alias, *a[j].Alias) <= 0
126 func (a SortByAssetsAlias) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
128 func TestListAssets(t *testing.T) {
129 reg := mockNewRegistry(t)
131 firstAlias := "FIRST_ALIAS"
132 secondAlias := "SECOND_ALIAS"
134 firstAsset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, firstAlias, nil)
136 testutil.FatalErr(t, err)
139 secondAsset, err := reg.Define([]chainkd.XPub{testutil.TestXPub}, 1, nil, secondAlias, nil)
141 testutil.FatalErr(t, err)
144 wantAssets := []*Asset{DefaultNativeAsset, firstAsset, secondAsset}
146 gotAssets, err := reg.ListAssets("")
148 testutil.FatalErr(t, err)
150 sort.Sort(SortByAssetsAlias(wantAssets))
151 sort.Sort(SortByAssetsAlias(gotAssets))
152 if !testutil.DeepEqual(gotAssets, wantAssets) {
153 t.Fatalf("got:\ngot: %v\nwant: %v", gotAssets, wantAssets)
157 func mockChain(testDB dbm.DB) (*protocol.Chain, error) {
158 var engine engine.Engine
159 switch config.CommonConfig.Consensus.Type {
163 store := leveldb.NewStore(testDB)
164 txPool := protocol.NewTxPool(store)
165 chain, err := protocol.NewChain(store, txPool, engine)
172 func mockNewRegistry(t *testing.T) *Registry {
173 config.CommonConfig = config.DefaultConfig()
174 consensus.SoloNetParams.Signer = "78673764e0ba91a4c5ba9ec0c8c23c69e3d73bf27970e05e0a977e81e13bde475264d3b177a96646bc0ce517ae7fd63504c183ab6d330dea184331a4cf5912d5"
175 config.CommonConfig.Consensus.SelfVoteSigners = append(config.CommonConfig.Consensus.SelfVoteSigners, "vsm1qkm743xmgnvh84pmjchq2s4tnfpgu9ae2f9slep")
176 config.CommonConfig.Consensus.XPrv = "a8e281b615809046698fb0b0f2804a36d824d48fa443350f10f1b80649d39e5f1e85cf9855548915e36137345910606cbc8e7dd8497c831dce899ee6ac112445"
177 for _, v := range config.CommonConfig.Consensus.SelfVoteSigners {
178 address, err := common.DecodeAddress(v, &consensus.SoloNetParams)
182 config.CommonConfig.Consensus.Signers = append(config.CommonConfig.Consensus.Signers, address)
184 dirPath, err := ioutil.TempDir(".", "")
188 defer os.RemoveAll(dirPath)
190 testDB := dbm.NewDB("testdb", "leveldb", "temp")
191 defer os.RemoveAll("temp")
193 chain, err := mockChain(testDB)
198 return NewRegistry(testDB, chain)