Introduced an interface to detect network devices so that we can mock it for tests

This commit is contained in:
Diptanu Choudhury
2015-10-28 15:58:40 -07:00
parent e61c4ad130
commit 764a6bdf1d

View File

@@ -19,13 +19,30 @@ import (
// NetworkFingerprint is used to fingerprint the Network capabilities of a node
type NetworkFingerprint struct {
logger *log.Logger
logger *log.Logger
interfaceDetector NetworkInterfaceDetector
}
type NetworkInterfaceDetector interface {
Interfaces() ([]net.Interface, error)
InterfaceByName(name string) (*net.Interface, error)
}
type BasicNetworkInterfaceDetector struct {
}
func (b *BasicNetworkInterfaceDetector) Interfaces() ([]net.Interface, error) {
return net.Interfaces()
}
func (b *BasicNetworkInterfaceDetector) InterfaceByName(name string) (*net.Interface, error) {
return net.InterfaceByName(name)
}
// NewNetworkFingerprinter returns a new NetworkFingerprinter with the given
// logger
func NewNetworkFingerprinter(logger *log.Logger) Fingerprint {
f := &NetworkFingerprint{logger: logger}
f := &NetworkFingerprint{logger: logger, interfaceDetector: &BasicNetworkInterfaceDetector{}}
return f
}
@@ -195,12 +212,12 @@ func (f *NetworkFingerprint) findInterface(deviceName string) (*net.Interface, e
var err error
if deviceName != "" {
return net.InterfaceByName(deviceName)
return f.interfaceDetector.InterfaceByName(deviceName)
}
var intfs []net.Interface
if intfs, err = net.Interfaces(); err != nil {
if intfs, err = f.interfaceDetector.Interfaces(); err != nil {
return nil, err
}