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 }