github.com/crptec/blockbook@v0.3.2/tests/sync/fakechain.go (about)

     1  // +build integration
     2  
     3  package sync
     4  
     5  import "blockbook/bchain"
     6  
     7  type fakeBlockChain struct {
     8  	bchain.BlockChain
     9  	returnFakes bool
    10  	fakeBlocks  map[uint32]BlockID
    11  	bestHeight  uint32
    12  }
    13  
    14  func (c *fakeBlockChain) GetBestBlockHash() (v string, err error) {
    15  	return c.GetBlockHash(c.bestHeight)
    16  }
    17  
    18  func (c *fakeBlockChain) GetBestBlockHeight() (v uint32, err error) {
    19  	return c.bestHeight, nil
    20  }
    21  
    22  func (c *fakeBlockChain) GetBlockHash(height uint32) (v string, err error) {
    23  	if height > c.bestHeight {
    24  		return "", bchain.ErrBlockNotFound
    25  	}
    26  	if c.returnFakes {
    27  		if b, found := c.fakeBlocks[height]; found {
    28  			return b.Hash, nil
    29  		}
    30  	}
    31  	return c.BlockChain.GetBlockHash(height)
    32  }
    33  
    34  func (c *fakeBlockChain) GetBlock(hash string, height uint32) (*bchain.Block, error) {
    35  	if height > 0 && height > c.bestHeight {
    36  		return nil, bchain.ErrBlockNotFound
    37  	}
    38  	if c.returnFakes {
    39  		if hash == "" && height > 0 {
    40  			var err error
    41  			hash, err = c.GetBlockHash(height)
    42  			if err != nil {
    43  				return nil, err
    44  			}
    45  		}
    46  	}
    47  	b, err := c.BlockChain.GetBlock(hash, height)
    48  	if err != nil {
    49  		return nil, err
    50  	}
    51  	b.Height = height
    52  	return b, nil
    53  }