github.com/devwanda/aphelion-staking@v0.33.9/lite2/provider/mock/mock.go (about) 1 package mock 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/devwanda/aphelion-staking/lite2/provider" 8 "github.com/devwanda/aphelion-staking/types" 9 ) 10 11 type mock struct { 12 chainID string 13 headers map[int64]*types.SignedHeader 14 vals map[int64]*types.ValidatorSet 15 } 16 17 // New creates a mock provider with the given set of headers and validator 18 // sets. 19 func New(chainID string, headers map[int64]*types.SignedHeader, vals map[int64]*types.ValidatorSet) provider.Provider { 20 return &mock{ 21 chainID: chainID, 22 headers: headers, 23 vals: vals, 24 } 25 } 26 27 // ChainID returns the blockchain ID. 28 func (p *mock) ChainID() string { 29 return p.chainID 30 } 31 32 func (p *mock) String() string { 33 var headers strings.Builder 34 for _, h := range p.headers { 35 fmt.Fprintf(&headers, " %d:%X", h.Height, h.Hash()) 36 } 37 38 var vals strings.Builder 39 for _, v := range p.vals { 40 fmt.Fprintf(&vals, " %X", v.Hash()) 41 } 42 43 return fmt.Sprintf("mock{headers: %s, vals: %v}", headers.String(), vals.String()) 44 } 45 46 func (p *mock) SignedHeader(height int64) (*types.SignedHeader, error) { 47 if height == 0 && len(p.headers) > 0 { 48 return p.headers[int64(len(p.headers))], nil 49 } 50 if _, ok := p.headers[height]; ok { 51 return p.headers[height], nil 52 } 53 return nil, provider.ErrSignedHeaderNotFound 54 } 55 56 func (p *mock) ValidatorSet(height int64) (*types.ValidatorSet, error) { 57 if height == 0 && len(p.vals) > 0 { 58 return p.vals[int64(len(p.vals))], nil 59 } 60 if _, ok := p.vals[height]; ok { 61 return p.vals[height], nil 62 } 63 return nil, provider.ErrValidatorSetNotFound 64 }