@@ -32,63 +32,49 @@ import (
3232 "github.com/ethereum/go-ethereum/statediff/testhelpers"
3333)
3434
35- var block0 , block1 * types.Block
36- var burnLeafKey = testhelpers .AddressToLeafKey (common .HexToAddress ("0x0" ))
37- var emptyAccountDiffEventualMap = make ([]statediff.AccountDiff , 0 )
38- var account1 , _ = rlp .EncodeToBytes (state.Account {
39- Nonce : uint64 (0 ),
40- Balance : big .NewInt (10000 ),
41- CodeHash : common .HexToHash ("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" ).Bytes (),
42- Root : common .HexToHash ("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" ),
43- })
44- var burnAccount1 , _ = rlp .EncodeToBytes (state.Account {
45- Nonce : uint64 (0 ),
46- Balance : big .NewInt (2000000000000000000 ),
47- CodeHash : common .HexToHash ("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" ).Bytes (),
48- Root : common .HexToHash ("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" ),
49- })
50- var bankAccount1 , _ = rlp .EncodeToBytes (state.Account {
51- Nonce : uint64 (1 ),
52- Balance : big .NewInt (testhelpers .TestBankFunds .Int64 () - 10000 ),
53- CodeHash : common .HexToHash ("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" ).Bytes (),
54- Root : common .HexToHash ("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" ),
55- })
35+ var (
36+ block0 , block1 * types.Block
37+ burnLeafKey = testhelpers .AddressToLeafKey (common .HexToAddress ("0x0" ))
38+ emptyAccountDiffEventualMap = make ([]statediff.AccountDiff , 0 )
39+ account1 , _ = rlp .EncodeToBytes (state.Account {
40+ Nonce : uint64 (0 ),
41+ Balance : big .NewInt (10000 ),
42+ CodeHash : common .HexToHash ("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" ).Bytes (),
43+ Root : common .HexToHash ("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" ),
44+ })
45+ burnAccount1 , _ = rlp .EncodeToBytes (state.Account {
46+ Nonce : uint64 (0 ),
47+ Balance : big .NewInt (2000000000000000000 ),
48+ CodeHash : common .HexToHash ("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" ).Bytes (),
49+ Root : common .HexToHash ("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" ),
50+ })
51+ bankAccount1 , _ = rlp .EncodeToBytes (state.Account {
52+ Nonce : uint64 (1 ),
53+ Balance : big .NewInt (testhelpers .TestBankFunds .Int64 () - 10000 ),
54+ CodeHash : common .HexToHash ("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" ).Bytes (),
55+ Root : common .HexToHash ("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" ),
56+ })
57+ mockTotalDifficulty = big .NewInt (1337 )
58+ )
5659
5760func TestAPI (t * testing.T ) {
5861 testSubscriptionAPI (t )
5962 testHTTPAPI (t )
6063}
64+
6165func testSubscriptionAPI (t * testing.T ) {
6266 _ , blockMap , chain := testhelpers .MakeChain (3 , testhelpers .Genesis )
6367 defer chain .Stop ()
6468 block0Hash := common .HexToHash ("0xd1721cfd0b29c36fd7a68f25c128e86413fb666a6e1d68e89b875bd299262661" )
6569 block1Hash := common .HexToHash ("0xbbe88de60ba33a3f18c0caa37d827bfb70252e19e40a07cd34041696c35ecb1a" )
6670 block0 = blockMap [block0Hash ]
6771 block1 = blockMap [block1Hash ]
68- blockChan := make (chan * types.Block )
69- parentBlockChain := make (chan * types.Block )
70- serviceQuitChan := make (chan bool )
71- config := statediff.Config {
72- PathsAndProofs : true ,
73- IntermediateNodes : false ,
74- }
75- mockService := MockStateDiffService {
76- Mutex : sync.Mutex {},
77- Builder : statediff .NewBuilder (testhelpers .Testdb , chain , config ),
78- BlockChan : blockChan ,
79- ParentBlockChan : parentBlockChain ,
80- QuitChan : serviceQuitChan ,
81- Subscriptions : make (map [rpc.ID ]statediff.Subscription ),
82- streamBlock : true ,
83- }
84- mockService .Start (nil )
85- id := rpc .NewID ()
86- payloadChan := make (chan statediff.Payload )
87- quitChan := make (chan bool )
88- mockService .Subscribe (id , payloadChan , quitChan )
89- blockChan <- block1
90- parentBlockChain <- block0
9172 expectedBlockRlp , _ := rlp .EncodeToBytes (block1 )
73+ mockReceipt := & types.Receipt {
74+ BlockNumber : block1 .Number (),
75+ BlockHash : block1 .Hash (),
76+ }
77+ expectedReceiptBytes , _ := rlp .EncodeToBytes (types.Receipts {mockReceipt })
9278 expectedStateDiff := statediff.StateDiff {
9379 BlockNumber : block1 .Number (),
9480 BlockHash : block1 .Hash (),
@@ -125,20 +111,50 @@ func testSubscriptionAPI(t *testing.T) {
125111 },
126112 },
127113 }
128- expectedStateDiffBytes , err := rlp .EncodeToBytes (expectedStateDiff )
129- if err != nil {
130- t .Error (err )
114+ expectedStateDiffBytes , _ := rlp .EncodeToBytes (expectedStateDiff )
115+ blockChan := make (chan * types.Block )
116+ parentBlockChain := make (chan * types.Block )
117+ serviceQuitChan := make (chan bool )
118+ config := statediff.Config {
119+ PathsAndProofs : true ,
120+ IntermediateNodes : false ,
131121 }
132- sort .Slice (expectedStateDiffBytes , func (i , j int ) bool { return expectedStateDiffBytes [i ] < expectedStateDiffBytes [j ] })
122+ mockBlockChain := & BlockChain {}
123+ mockBlockChain .SetReceiptsForHash (block1Hash , types.Receipts {mockReceipt })
124+ mockBlockChain .SetTdByHash (block1Hash , mockTotalDifficulty )
125+ mockService := MockStateDiffService {
126+ Mutex : sync.Mutex {},
127+ Builder : statediff .NewBuilder (testhelpers .Testdb , chain , config ),
128+ BlockChan : blockChan ,
129+ BlockChain : mockBlockChain ,
130+ ParentBlockChan : parentBlockChain ,
131+ QuitChan : serviceQuitChan ,
132+ Subscriptions : make (map [rpc.ID ]statediff.Subscription ),
133+ streamBlock : true ,
134+ }
135+ mockService .Start (nil )
136+ id := rpc .NewID ()
137+ payloadChan := make (chan statediff.Payload )
138+ quitChan := make (chan bool )
139+ mockService .Subscribe (id , payloadChan , quitChan )
140+ blockChan <- block1
141+ parentBlockChain <- block0
133142
143+ sort .Slice (expectedStateDiffBytes , func (i , j int ) bool { return expectedStateDiffBytes [i ] < expectedStateDiffBytes [j ] })
134144 select {
135145 case payload := <- payloadChan :
136146 if ! bytes .Equal (payload .BlockRlp , expectedBlockRlp ) {
137- t .Errorf ("payload does not have expected block\r \a ctual block rlp: %v\r \n expected block rlp: %v" , payload .BlockRlp , expectedBlockRlp )
147+ t .Errorf ("payload does not have expected block\r \n actual block rlp: %v\r \n expected block rlp: %v" , payload .BlockRlp , expectedBlockRlp )
138148 }
139149 sort .Slice (payload .StateDiffRlp , func (i , j int ) bool { return payload .StateDiffRlp [i ] < payload .StateDiffRlp [j ] })
140150 if ! bytes .Equal (payload .StateDiffRlp , expectedStateDiffBytes ) {
141- t .Errorf ("payload does not have expected state diff\r \a ctual state diff rlp: %v\r \n expected state diff rlp: %v" , payload .StateDiffRlp , expectedStateDiffBytes )
151+ t .Errorf ("payload does not have expected state diff\r \n actual state diff rlp: %v\r \n expected state diff rlp: %v" , payload .StateDiffRlp , expectedStateDiffBytes )
152+ }
153+ if ! bytes .Equal (expectedReceiptBytes , payload .ReceiptsRlp ) {
154+ t .Errorf ("payload does not have expected receipts\r \n actual receipt rlp: %v\r \n expected receipt rlp: %v" , payload .ReceiptsRlp , expectedReceiptBytes )
155+ }
156+ if ! bytes .Equal (payload .TotalDifficulty .Bytes (), mockTotalDifficulty .Bytes ()) {
157+ t .Errorf ("payload does not have expected total difficulty\r \n actual td: %d\r \n expected td: %d" , payload .TotalDifficulty .Int64 (), mockTotalDifficulty .Int64 ())
142158 }
143159 case <- quitChan :
144160 t .Errorf ("channel quit before delivering payload" )
@@ -152,27 +168,12 @@ func testHTTPAPI(t *testing.T) {
152168 block1Hash := common .HexToHash ("0xbbe88de60ba33a3f18c0caa37d827bfb70252e19e40a07cd34041696c35ecb1a" )
153169 block0 = blockMap [block0Hash ]
154170 block1 = blockMap [block1Hash ]
155- config := statediff.Config {
156- PathsAndProofs : true ,
157- IntermediateNodes : false ,
158- }
159- mockBlockChain := & BlockChain {}
160- mockBlockChain .SetBlocksForHashes (blockMap )
161- mockBlockChain .SetBlockForNumber (block1 , block1 .Number ().Uint64 ())
162- mockService := MockStateDiffService {
163- Mutex : sync.Mutex {},
164- Builder : statediff .NewBuilder (testhelpers .Testdb , chain , config ),
165- BlockChain : mockBlockChain ,
166- streamBlock : true ,
167- }
168- payload , err := mockService .StateDiffAt (block1 .Number ().Uint64 ())
169- if err != nil {
170- t .Error (err )
171- }
172171 expectedBlockRlp , _ := rlp .EncodeToBytes (block1 )
173- if ! bytes .Equal (payload .BlockRlp , expectedBlockRlp ) {
174- t .Errorf ("payload does not have expected block\r \a ctual block rlp: %v\r \n expected block rlp: %v" , payload .BlockRlp , expectedBlockRlp )
172+ mockReceipt := & types.Receipt {
173+ BlockNumber : block1 .Number (),
174+ BlockHash : block1 .Hash (),
175175 }
176+ expectedReceiptBytes , _ := rlp .EncodeToBytes (types.Receipts {mockReceipt })
176177 expectedStateDiff := statediff.StateDiff {
177178 BlockNumber : block1 .Number (),
178179 BlockHash : block1 .Hash (),
@@ -209,13 +210,38 @@ func testHTTPAPI(t *testing.T) {
209210 },
210211 },
211212 }
212- expectedStateDiffBytes , err := rlp .EncodeToBytes (expectedStateDiff )
213+ expectedStateDiffBytes , _ := rlp .EncodeToBytes (expectedStateDiff )
214+ config := statediff.Config {
215+ PathsAndProofs : true ,
216+ IntermediateNodes : false ,
217+ }
218+ mockBlockChain := & BlockChain {}
219+ mockBlockChain .SetBlocksForHashes (blockMap )
220+ mockBlockChain .SetBlockForNumber (block1 , block1 .Number ().Uint64 ())
221+ mockBlockChain .SetReceiptsForHash (block1Hash , types.Receipts {mockReceipt })
222+ mockBlockChain .SetTdByHash (block1Hash , big .NewInt (1337 ))
223+ mockService := MockStateDiffService {
224+ Mutex : sync.Mutex {},
225+ Builder : statediff .NewBuilder (testhelpers .Testdb , chain , config ),
226+ BlockChain : mockBlockChain ,
227+ streamBlock : true ,
228+ }
229+ payload , err := mockService .StateDiffAt (block1 .Number ().Uint64 ())
213230 if err != nil {
214231 t .Error (err )
215232 }
216233 sort .Slice (payload .StateDiffRlp , func (i , j int ) bool { return payload .StateDiffRlp [i ] < payload .StateDiffRlp [j ] })
217234 sort .Slice (expectedStateDiffBytes , func (i , j int ) bool { return expectedStateDiffBytes [i ] < expectedStateDiffBytes [j ] })
235+ if ! bytes .Equal (payload .BlockRlp , expectedBlockRlp ) {
236+ t .Errorf ("payload does not have expected block\r \n actual block rlp: %v\r \n expected block rlp: %v" , payload .BlockRlp , expectedBlockRlp )
237+ }
218238 if ! bytes .Equal (payload .StateDiffRlp , expectedStateDiffBytes ) {
219- t .Errorf ("payload does not have expected state diff\r \a ctual state diff rlp: %v\r \n expected state diff rlp: %v" , payload .StateDiffRlp , expectedStateDiffBytes )
239+ t .Errorf ("payload does not have expected state diff\r \n actual state diff rlp: %v\r \n expected state diff rlp: %v" , payload .StateDiffRlp , expectedStateDiffBytes )
240+ }
241+ if ! bytes .Equal (expectedReceiptBytes , payload .ReceiptsRlp ) {
242+ t .Errorf ("payload does not have expected receipts\r \n actual receipt rlp: %v\r \n expected receipt rlp: %v" , payload .ReceiptsRlp , expectedReceiptBytes )
243+ }
244+ if ! bytes .Equal (payload .TotalDifficulty .Bytes (), mockTotalDifficulty .Bytes ()) {
245+ t .Errorf ("paylaod does not have the expected total difficulty\r \n actual td: %d\r \n expected td: %d" , payload .TotalDifficulty .Int64 (), mockTotalDifficulty .Int64 ())
220246 }
221247}
0 commit comments