github.com/avahowell/sia@v0.5.1-beta.0.20160524050156-83dcc3d37c94/modules/renter/hostdb/dependencies.go (about)

     1  package hostdb
     2  
     3  import (
     4  	"net"
     5  	"path/filepath"
     6  	"time"
     7  
     8  	"github.com/NebulousLabs/Sia/modules"
     9  	"github.com/NebulousLabs/Sia/persist"
    10  )
    11  
    12  // These interfaces define the HostDB's dependencies. Using the smallest
    13  // interface possible makes it easier to mock these dependencies in testing.
    14  type (
    15  	consensusSet interface {
    16  		ConsensusSetSubscribe(modules.ConsensusSetSubscriber, modules.ConsensusChangeID) error
    17  	}
    18  
    19  	dialer interface {
    20  		DialTimeout(modules.NetAddress, time.Duration) (net.Conn, error)
    21  	}
    22  
    23  	sleeper interface {
    24  		Sleep(time.Duration)
    25  	}
    26  
    27  	persister interface {
    28  		save(hdbPersist) error
    29  		saveSync(hdbPersist) error
    30  		load(*hdbPersist) error
    31  	}
    32  )
    33  
    34  // stdDialer implements the dialer interface via net.DialTimeout.
    35  type stdDialer struct{}
    36  
    37  func (d stdDialer) DialTimeout(addr modules.NetAddress, timeout time.Duration) (net.Conn, error) {
    38  	return net.DialTimeout("tcp", string(addr), timeout)
    39  }
    40  
    41  // stdSleeper implements the sleeper interface via time.Sleep.
    42  type stdSleeper struct{}
    43  
    44  func (s stdSleeper) Sleep(d time.Duration) { time.Sleep(d) }
    45  
    46  // stdPersist implements the persister interface via persist.SaveFile and
    47  // persist.LoadFile. The metadata and filename required by these functions is
    48  // internal to stdPersist.
    49  type stdPersist struct {
    50  	meta     persist.Metadata
    51  	filename string
    52  }
    53  
    54  func (p *stdPersist) save(data hdbPersist) error {
    55  	return persist.SaveFile(p.meta, data, p.filename)
    56  }
    57  
    58  func (p *stdPersist) saveSync(data hdbPersist) error {
    59  	return persist.SaveFileSync(p.meta, data, p.filename)
    60  }
    61  
    62  func (p *stdPersist) load(data *hdbPersist) error {
    63  	return persist.LoadFile(p.meta, data, p.filename)
    64  }
    65  
    66  func newPersist(dir string) *stdPersist {
    67  	return &stdPersist{
    68  		meta: persist.Metadata{
    69  			Header:  "HostDB Persistence",
    70  			Version: "0.5",
    71  		},
    72  		filename: filepath.Join(dir, "hostdb.json"),
    73  	}
    74  }