| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // Copyright 2015 The go-ethereum Authors | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // This file is part of the go-ethereum library. | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // | 
					
						
							| 
									
										
										
										
											2015-07-23 18:35:11 +02:00
										 |  |  | // The go-ethereum library is free software: you can redistribute it and/or modify | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // it under the terms of the GNU Lesser General Public License as published by | 
					
						
							|  |  |  | // the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  | // (at your option) any later version. | 
					
						
							|  |  |  | // | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // The go-ethereum library is distributed in the hope that it will be useful, | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // GNU Lesser General Public License for more details. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // You should have received a copy of the GNU Lesser General Public License | 
					
						
							| 
									
										
										
										
											2015-07-22 18:48:40 +02:00
										 |  |  | // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. | 
					
						
							| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-18 13:14:21 +01:00
										 |  |  | package core | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2015-06-08 12:12:13 +02:00
										 |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2015-02-18 13:14:21 +01:00
										 |  |  | 	"math/big" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-18 13:38:47 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/common" | 
					
						
							| 
									
										
										
										
											2015-05-22 22:44:51 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/core/state" | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/core/types" | 
					
						
							| 
									
										
										
										
											2015-08-30 10:19:10 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/core/vm" | 
					
						
							| 
									
										
										
										
											2015-02-18 13:14:21 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/ethdb" | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/event" | 
					
						
							| 
									
										
										
										
											2015-03-06 20:07:35 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/pow/ezp" | 
					
						
							| 
									
										
										
										
											2015-02-18 13:14:21 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-19 16:08:17 +02:00
										 |  |  | func proc() (Validator, *BlockChain) { | 
					
						
							| 
									
										
										
										
											2015-02-18 13:14:21 +01:00
										 |  |  | 	db, _ := ethdb.NewMemDatabase() | 
					
						
							|  |  |  | 	var mux event.TypeMux | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-17 18:33:25 +02:00
										 |  |  | 	WriteTestNetGenesisBlock(db) | 
					
						
							| 
									
										
										
										
											2015-08-31 17:09:50 +02:00
										 |  |  | 	blockchain, err := NewBlockChain(db, thePow(), &mux) | 
					
						
							| 
									
										
										
										
											2015-06-08 12:12:13 +02:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		fmt.Println(err) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-10-19 16:08:17 +02:00
										 |  |  | 	return blockchain.validator, blockchain | 
					
						
							| 
									
										
										
										
											2015-02-18 13:14:21 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestNumber(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2015-06-18 11:37:30 +02:00
										 |  |  | 	pow := ezp.New() | 
					
						
							| 
									
										
										
										
											2015-06-19 01:57:16 +02:00
										 |  |  | 	_, chain := proc() | 
					
						
							| 
									
										
										
										
											2015-06-18 11:37:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-06 16:35:55 +02:00
										 |  |  | 	statedb, _ := state.New(chain.Genesis().Root(), chain.chainDb) | 
					
						
							| 
									
										
										
										
											2015-06-19 01:57:16 +02:00
										 |  |  | 	header := makeHeader(chain.Genesis(), statedb) | 
					
						
							| 
									
										
										
										
											2015-06-16 12:41:50 +02:00
										 |  |  | 	header.Number = big.NewInt(3) | 
					
						
							| 
									
										
										
										
											2015-09-16 10:44:09 +03:00
										 |  |  | 	err := ValidateHeader(pow, header, chain.Genesis().Header(), false, false) | 
					
						
							| 
									
										
										
										
											2015-02-18 13:14:21 +01:00
										 |  |  | 	if err != BlockNumberErr { | 
					
						
							| 
									
										
										
										
											2015-06-16 12:41:50 +02:00
										 |  |  | 		t.Errorf("expected block number error, got %q", err) | 
					
						
							| 
									
										
										
										
											2015-02-18 13:14:21 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-19 01:57:16 +02:00
										 |  |  | 	header = makeHeader(chain.Genesis(), statedb) | 
					
						
							| 
									
										
										
										
											2015-09-16 10:44:09 +03:00
										 |  |  | 	err = ValidateHeader(pow, header, chain.Genesis().Header(), false, false) | 
					
						
							| 
									
										
										
										
											2015-02-18 13:14:21 +01:00
										 |  |  | 	if err == BlockNumberErr { | 
					
						
							|  |  |  | 		t.Errorf("didn't expect block number error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-05-22 22:44:51 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestPutReceipt(t *testing.T) { | 
					
						
							|  |  |  | 	db, _ := ethdb.NewMemDatabase() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var addr common.Address | 
					
						
							|  |  |  | 	addr[0] = 1 | 
					
						
							|  |  |  | 	var hash common.Hash | 
					
						
							|  |  |  | 	hash[0] = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	receipt := new(types.Receipt) | 
					
						
							| 
									
										
										
										
											2015-09-29 19:36:16 +03:00
										 |  |  | 	receipt.Logs = vm.Logs{&vm.Log{ | 
					
						
							| 
									
										
										
										
											2015-09-30 19:23:31 +03:00
										 |  |  | 		Address:     addr, | 
					
						
							|  |  |  | 		Topics:      []common.Hash{hash}, | 
					
						
							|  |  |  | 		Data:        []byte("hi"), | 
					
						
							|  |  |  | 		BlockNumber: 42, | 
					
						
							|  |  |  | 		TxHash:      hash, | 
					
						
							|  |  |  | 		TxIndex:     0, | 
					
						
							|  |  |  | 		BlockHash:   hash, | 
					
						
							|  |  |  | 		Index:       0, | 
					
						
							| 
									
										
										
										
											2015-09-29 19:36:16 +03:00
										 |  |  | 	}} | 
					
						
							| 
									
										
										
										
											2015-05-22 22:44:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-22 15:43:21 +03:00
										 |  |  | 	WriteReceipts(db, types.Receipts{receipt}) | 
					
						
							| 
									
										
										
										
											2015-07-04 02:25:04 +02:00
										 |  |  | 	receipt = GetReceipt(db, common.Hash{}) | 
					
						
							|  |  |  | 	if receipt == nil { | 
					
						
							|  |  |  | 		t.Error("expected to get 1 receipt, got none.") | 
					
						
							| 
									
										
										
										
											2015-05-22 22:44:51 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | } |