| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // Copyright 2015 The go-ethereum Authors | 
					
						
							|  |  |  | // This file is part of go-ethereum. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // go-ethereum is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  | // 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. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // go-ethereum is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | // GNU Lesser General Public License for more details. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // You should have received a copy of the GNU Lesser General Public License | 
					
						
							|  |  |  | // along with go-ethereum.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-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
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func proc() (*BlockProcessor, *ChainManager) { | 
					
						
							|  |  |  | 	db, _ := ethdb.NewMemDatabase() | 
					
						
							|  |  |  | 	var mux event.TypeMux | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-10 14:29:40 +02:00
										 |  |  | 	WriteTestNetGenesisBlock(db, db, 0) | 
					
						
							|  |  |  | 	chainMan, err := NewChainManager(db, db, db, thePow(), &mux) | 
					
						
							| 
									
										
										
										
											2015-06-08 12:12:13 +02:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		fmt.Println(err) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-06-03 15:52:25 +02:00
										 |  |  | 	return NewBlockProcessor(db, db, ezp.New(), chainMan, &mux), chainMan | 
					
						
							| 
									
										
										
										
											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-06-19 01:57:16 +02:00
										 |  |  | 	statedb := state.New(chain.Genesis().Root(), chain.stateDb) | 
					
						
							|  |  |  | 	header := makeHeader(chain.Genesis(), statedb) | 
					
						
							| 
									
										
										
										
											2015-06-16 12:41:50 +02:00
										 |  |  | 	header.Number = big.NewInt(3) | 
					
						
							| 
									
										
										
										
											2015-06-27 03:08:50 +02:00
										 |  |  | 	err := ValidateHeader(pow, header, chain.Genesis(), 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-06-27 03:08:50 +02:00
										 |  |  | 	err = ValidateHeader(pow, header, chain.Genesis(), 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) | 
					
						
							|  |  |  | 	receipt.SetLogs(state.Logs{&state.Log{ | 
					
						
							|  |  |  | 		Address:   addr, | 
					
						
							|  |  |  | 		Topics:    []common.Hash{hash}, | 
					
						
							|  |  |  | 		Data:      []byte("hi"), | 
					
						
							|  |  |  | 		Number:    42, | 
					
						
							|  |  |  | 		TxHash:    hash, | 
					
						
							|  |  |  | 		TxIndex:   0, | 
					
						
							|  |  |  | 		BlockHash: hash, | 
					
						
							|  |  |  | 		Index:     0, | 
					
						
							|  |  |  | 	}}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-04 02:25:04 +02:00
										 |  |  | 	PutReceipts(db, types.Receipts{receipt}) | 
					
						
							|  |  |  | 	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
										 |  |  | 	} | 
					
						
							|  |  |  | } |