11 "github.com/stretchr/testify/require"
12 "golang.org/x/crypto/sha3"
14 "github.com/vapor/database/leveldb"
15 "github.com/vapor/dex"
16 "github.com/vapor/protocol/bc"
17 "github.com/vapor/testutil"
20 func TestOrderKey(t *testing.T) {
21 dirname, err := ioutil.TempDir("", "db_common_test")
24 db, err := leveldb.NewGoLevelDB("testdb", dirname)
34 type expectedData struct {
46 ToAssetID: bc.AssetID{V0: 0},
49 SourceID: bc.Hash{V0: 21},
50 AssetID: bc.AssetID{V0: 1},
53 ControlProgram: []byte("aa"),
57 ToAssetID: bc.AssetID{V0: 0},
60 SourceID: bc.Hash{V0: 22},
61 AssetID: bc.AssetID{V0: 1},
64 ControlProgram: []byte("aa"),
68 ToAssetID: bc.AssetID{V0: 0},
71 SourceID: bc.Hash{V0: 23},
72 AssetID: bc.AssetID{V0: 1},
75 ControlProgram: []byte("aa"),
79 ToAssetID: bc.AssetID{V0: 0},
82 SourceID: bc.Hash{V0: 13},
83 AssetID: bc.AssetID{V0: 1},
86 ControlProgram: []byte("aa"),
90 ToAssetID: bc.AssetID{V0: 0},
93 SourceID: bc.Hash{V0: 24},
94 AssetID: bc.AssetID{V0: 1},
97 ControlProgram: []byte("aa"),
101 ToAssetID: bc.AssetID{V0: 0},
104 SourceID: bc.Hash{V0: 24},
105 AssetID: bc.AssetID{V0: 1},
108 ControlProgram: []byte("aa"),
112 ToAssetID: bc.AssetID{V0: 0},
115 SourceID: bc.Hash{V0: 25},
116 AssetID: bc.AssetID{V0: 1},
119 ControlProgram: []byte("aa"),
123 ToAssetID: bc.AssetID{V0: 0},
126 SourceID: bc.Hash{V0: 26},
127 AssetID: bc.AssetID{V0: 1},
130 ControlProgram: []byte("aa"),
134 ToAssetID: bc.AssetID{V0: 0},
137 SourceID: bc.Hash{V0: 26},
138 AssetID: bc.AssetID{V0: 1},
141 ControlProgram: []byte("aa"),
145 ToAssetID: bc.AssetID{V0: 0},
148 SourceID: bc.Hash{V0: 27},
149 AssetID: bc.AssetID{V0: 1},
152 ControlProgram: []byte("aa"),
156 ToAssetID: bc.AssetID{V0: 0},
159 SourceID: bc.Hash{V0: 28},
160 AssetID: bc.AssetID{V0: 1},
163 ControlProgram: []byte("aa"),
167 ToAssetID: bc.AssetID{V0: 0},
170 SourceID: bc.Hash{V0: 29},
171 AssetID: bc.AssetID{V0: 1},
174 ControlProgram: []byte("aa"),
178 ToAssetID: bc.AssetID{V0: 0},
181 SourceID: bc.Hash{V0: 30},
182 AssetID: bc.AssetID{V0: 1},
185 ControlProgram: []byte("aa"),
189 ToAssetID: bc.AssetID{V0: 0},
192 SourceID: bc.Hash{V0: 31},
193 AssetID: bc.AssetID{V0: 1},
196 ControlProgram: []byte("aa"),
200 want: []expectedData{
203 utxoHash: "1a347f38978f4116667880cd650f90f7117f9e5fa664bf35a762b7542521ecfd",
207 utxoHash: "390f96ae1f453bc9b8274b4e309853df9821f09e73e5d4294a21de94a3e82c9d",
211 utxoHash: "9b6906500e0468b46b05d1cc389e987503d8ff8f6521a9b3cb2e34812edd7e8b",
215 utxoHash: "6be9a8fe98dc3d9404a163d6c25d4c86c07725b2b5274792e3d3991a183b916d",
219 utxoHash: "a8c1cca596b76468f52a4559c468e865781e82a39b68fb337f4fe8cae84df38f",
223 utxoHash: "675344ad2a35fed61ef4028c89a9bd757b5c2d77a0151cf9e7077231d70a5768",
227 utxoHash: "98efa3949171cb01fef826d02fb995351ee833380e34dbe186a663bfe514aeec",
231 utxoHash: "6be9a8fe98dc3d9404a163d6c25d4c86c07725b2b5274792e3d3991a183b916d",
235 utxoHash: "617f55abaaca68f3f4967823448fd6351b84c8104890b1091db070670e456c21",
239 utxoHash: "c4ccb9843d0bb1dbf20d441b3f5c4374421dbfe505d1fb7f3fe551f63e2244d2",
243 utxoHash: "658ad7a433b689bd1b2d167c66eb065b5cc16015bfc0bbc122a8e3c370274ead",
247 utxoHash: "9dcde7ab0f2f88ed5203e4156160cedc21d68defee6f0e41413757b13da2535c",
251 utxoHash: "f2484ada2a12220b20f54552f7a329efdfa455fe062c6247dbe33453c9ff9f3e",
255 utxoHash: "f39ed5eaba9d9e4913a9ae32f6922c056c905d9d0bdc628ae6378fe6cb5196a2",
261 for i, c := range cases {
262 for _, order := range c.orders {
263 data, err := json.Marshal(order.Utxo)
267 utxoHash := bc.NewHash(sha3.Sum256(data))
268 key := calcOrdersPrefix(&order.Utxo.AssetID, &order.ToAssetID, &utxoHash, order.Rate)
269 db.SetSync(key, data)
272 got := []expectedData{}
274 itr := db.IteratorPrefixWithStart(nil, nil, false)
277 pos := len(OrdersPreFix) + 32*2
279 copy(b[:], key[pos+8:])
280 utxoHash := bc.NewHash(b)
281 got = append(got, expectedData{
282 rate: math.Float64frombits(binary.BigEndian.Uint64(key[pos : pos+8])),
283 utxoHash: utxoHash.String(),
288 if !testutil.DeepEqual(c.want, got) {
289 t.Errorf("case %v: got recovery status, got: %v, want: %v.", i, got, c.want)