11 "github.com/stretchr/testify/require"
12 "golang.org/x/crypto/sha3"
14 "github.com/vapor/application/dex/common"
15 "github.com/vapor/database/leveldb"
16 "github.com/vapor/protocol/bc"
17 "github.com/vapor/testutil"
20 func TestSortOrderKey(t *testing.T) {
21 dirname, err := ioutil.TempDir("", "db_common_test")
24 db, err := leveldb.NewGoLevelDB("testdb", dirname)
34 type expectedData struct {
44 orders: []common.Order{
46 FromAssetID: &bc.AssetID{V0: 1},
47 ToAssetID: &bc.AssetID{V0: 0},
49 Utxo: &common.DexUtxo{
50 SourceID: &bc.Hash{V0: 21},
53 ControlProgram: []byte("aa"),
57 FromAssetID: &bc.AssetID{V0: 1},
58 ToAssetID: &bc.AssetID{V0: 0},
60 Utxo: &common.DexUtxo{
61 SourceID: &bc.Hash{V0: 22},
64 ControlProgram: []byte("aa"),
68 FromAssetID: &bc.AssetID{V0: 1},
69 ToAssetID: &bc.AssetID{V0: 0},
71 Utxo: &common.DexUtxo{
72 SourceID: &bc.Hash{V0: 23},
75 ControlProgram: []byte("aa"),
79 FromAssetID: &bc.AssetID{V0: 1},
80 ToAssetID: &bc.AssetID{V0: 0},
82 Utxo: &common.DexUtxo{
83 SourceID: &bc.Hash{V0: 13},
86 ControlProgram: []byte("aa"),
90 FromAssetID: &bc.AssetID{V0: 1},
91 ToAssetID: &bc.AssetID{V0: 0},
93 Utxo: &common.DexUtxo{
94 SourceID: &bc.Hash{V0: 24},
97 ControlProgram: []byte("aa"),
101 FromAssetID: &bc.AssetID{V0: 1},
102 ToAssetID: &bc.AssetID{V0: 0},
104 Utxo: &common.DexUtxo{
105 SourceID: &bc.Hash{V0: 24},
108 ControlProgram: []byte("aa"),
112 FromAssetID: &bc.AssetID{V0: 1},
113 ToAssetID: &bc.AssetID{V0: 0},
115 Utxo: &common.DexUtxo{
116 SourceID: &bc.Hash{V0: 25},
119 ControlProgram: []byte("aa"),
123 FromAssetID: &bc.AssetID{V0: 1},
124 ToAssetID: &bc.AssetID{V0: 0},
126 Utxo: &common.DexUtxo{
127 SourceID: &bc.Hash{V0: 26},
130 ControlProgram: []byte("aa"),
134 FromAssetID: &bc.AssetID{V0: 1},
135 ToAssetID: &bc.AssetID{V0: 0},
137 Utxo: &common.DexUtxo{
138 SourceID: &bc.Hash{V0: 26},
141 ControlProgram: []byte("aa"),
145 FromAssetID: &bc.AssetID{V0: 1},
146 ToAssetID: &bc.AssetID{V0: 0},
148 Utxo: &common.DexUtxo{
149 SourceID: &bc.Hash{V0: 27},
152 ControlProgram: []byte("aa"),
156 FromAssetID: &bc.AssetID{V0: 1},
157 ToAssetID: &bc.AssetID{V0: 0},
159 Utxo: &common.DexUtxo{
160 SourceID: &bc.Hash{V0: 28},
163 ControlProgram: []byte("aa"),
167 FromAssetID: &bc.AssetID{V0: 1},
168 ToAssetID: &bc.AssetID{V0: 0},
170 Utxo: &common.DexUtxo{
171 SourceID: &bc.Hash{V0: 29},
174 ControlProgram: []byte("aa"),
178 FromAssetID: &bc.AssetID{V0: 1},
179 ToAssetID: &bc.AssetID{V0: 0},
181 Utxo: &common.DexUtxo{
182 SourceID: &bc.Hash{V0: 30},
185 ControlProgram: []byte("aa"),
189 FromAssetID: &bc.AssetID{V0: 1},
190 ToAssetID: &bc.AssetID{V0: 0},
192 Utxo: &common.DexUtxo{
193 SourceID: &bc.Hash{V0: 31},
196 ControlProgram: []byte("aa"),
200 FromAssetID: &bc.AssetID{V0: 1},
201 ToAssetID: &bc.AssetID{V0: 0},
203 Utxo: &common.DexUtxo{
204 SourceID: &bc.Hash{V0: 32},
207 ControlProgram: []byte("aa"),
211 FromAssetID: &bc.AssetID{V0: 1},
212 ToAssetID: &bc.AssetID{V0: 0},
214 Utxo: &common.DexUtxo{
215 SourceID: &bc.Hash{V0: 33},
218 ControlProgram: []byte("aa"),
222 want: []expectedData{
225 utxoHash: "7967bb8c4cca951749553e9c7787255d35a032d9e1acecefe4011c8095dc8e6f",
229 utxoHash: "215a6e7e3a5006151bd0b81c54fcccda0381f3a22e7b6646ed201c35f9fa6c5a",
233 utxoHash: "cb373d3a383d30eb2863317ea2cfb5b4b269772fbc0fb8413a2be7d7b69ec2b9",
237 utxoHash: "298c39d327cb4b0dcefcf701aa8d1b559f1de0148e9bcbe14da48cfa268c01ea",
241 utxoHash: "b2c59190fb0d948c9545c146a69b1f17503b2d280b2f3f45ecc0a7b7e2cd1784",
245 utxoHash: "80b44aae2b2cf57bd2cf77cb88f0d8363066f5f16a17a3e85224ecbbc6387d8b",
249 utxoHash: "4843adc8c4a50672a022e5f377dfd2ac11119364dc0a547be45b4a5edacef33b",
253 utxoHash: "298c39d327cb4b0dcefcf701aa8d1b559f1de0148e9bcbe14da48cfa268c01ea",
257 utxoHash: "d8d1a85303e9ac738e675b874b866e5ffbfa10e05201113404dde544055a18b9",
261 utxoHash: "2305be66ab9648b713a58e3807fa1cba1f84e5d11359b316e967d98e9a7667da",
265 utxoHash: "030dc8a868a3e534799d465ebc8209eb32d9465985dc8c35e731b124bf3ffbcf",
269 utxoHash: "8222a9a43b3951f247612ddce2fe36f96cd843bc0dfef86c7d0ef5335331f11f",
273 utxoHash: "a40bd183cd2ff2b52faac5ebc2cfc1e36104cbc92bcebac011b45792b39e380e",
277 utxoHash: "118b2c40848887614d99b0e7eb6c88a10b47196e6aca3ff2eeab452bfdb9cfcb",
281 utxoHash: "545a5c6f7ff9be19ed07a7246277c67d661f9cc7d8956bb81ce9a4045fba3720",
285 utxoHash: "d9f7725d908510268c7bdecd29cb2031baab93b9bfa69108eb0a926ba7ae18f9",
291 for i, c := range cases {
292 for _, order := range c.orders {
293 data, err := json.Marshal(order.Utxo)
297 utxoHash := bc.NewHash(sha3.Sum256(data))
298 key := calcOrdersPrefix(order.FromAssetID, order.ToAssetID, &utxoHash, order.Rate)
299 db.SetSync(key, data)
302 got := []expectedData{}
304 itr := db.IteratorPrefixWithStart(nil, nil, false)
307 pos := len(ordersPreFix) + 32*2
309 copy(b[:], key[pos+8:])
310 utxoHash := bc.NewHash(b)
311 got = append(got, expectedData{
312 rate: math.Float64frombits(binary.BigEndian.Uint64(key[pos : pos+8])),
313 utxoHash: utxoHash.String(),
318 if !testutil.DeepEqual(c.want, got) {
319 t.Errorf("case %v: got recovery status, got: %v, want: %v.", i, got, c.want)