github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/worker/provisioner/export_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package provisioner
     5  
     6  import (
     7  	"reflect"
     8  
     9  	"github.com/juju/juju/api/watcher"
    10  	"github.com/juju/juju/environs/config"
    11  	"github.com/juju/juju/network"
    12  )
    13  
    14  func SetObserver(p Provisioner, observer chan<- *config.Config) {
    15  	var configObserver *configObserver
    16  	if ep, ok := p.(*environProvisioner); ok {
    17  		configObserver = &ep.configObserver
    18  	} else {
    19  		cp := p.(*containerProvisioner)
    20  		configObserver = &cp.configObserver
    21  	}
    22  	configObserver.Lock()
    23  	configObserver.observer = observer
    24  	configObserver.Unlock()
    25  }
    26  
    27  func GetRetryWatcher(p Provisioner) (watcher.NotifyWatcher, error) {
    28  	return p.getRetryWatcher()
    29  }
    30  
    31  var (
    32  	ContainerManagerConfig     = containerManagerConfig
    33  	GetToolsFinder             = &getToolsFinder
    34  	SysctlConfig               = &sysctlConfig
    35  	ResolvConf                 = &resolvConf
    36  	LocalDNSServers            = localDNSServers
    37  	MustParseTemplate          = mustParseTemplate
    38  	RunTemplateCommand         = runTemplateCommand
    39  	IptablesRules              = &iptablesRules
    40  	NetInterfaces              = &netInterfaces
    41  	InterfaceAddrs             = &interfaceAddrs
    42  	DiscoverPrimaryNIC         = discoverPrimaryNIC
    43  	ConfigureContainerNetwork  = configureContainerNetwork
    44  	MaybeOverrideDefaultLXCNet = maybeOverrideDefaultLXCNet
    45  	EtcDefaultLXCNetPath       = &etcDefaultLXCNetPath
    46  	EtcDefaultLXCNet           = etcDefaultLXCNet
    47  )
    48  
    49  const (
    50  	IPForwardSysctlKey = ipForwardSysctlKey
    51  	ARPProxySysctlKey  = arpProxySysctlKey
    52  )
    53  
    54  // SetIPAndARPForwarding calls the internal setIPAndARPForwarding and
    55  // then restores the mocked one.
    56  var SetIPAndARPForwarding func(bool) error
    57  
    58  // SetupRoutesAndIPTables calls the internal setupRoutesAndIPTables
    59  // and the restores the mocked one.
    60  var SetupRoutesAndIPTables func(string, network.Address, string, []network.InterfaceInfo, bool) error
    61  
    62  func init() {
    63  	// In order to isolate the host machine from the running tests,
    64  	// but also allow calling the original setIPAndARPForwarding and
    65  	// setupRoutesAndIPTables funcs to test them, we need a litte bit
    66  	// of reflect magic, mostly borrowed from the juju/testing
    67  	// pacakge.
    68  	newSetIPAndARPForwardingValue := reflect.ValueOf(&setIPAndARPForwarding).Elem()
    69  	newSetupRoutesAndIPTablesValue := reflect.ValueOf(&setupRoutesAndIPTables).Elem()
    70  	oldSetIPAndARPForwardingValue := reflect.New(newSetIPAndARPForwardingValue.Type()).Elem()
    71  	oldSetupRoutesAndIPTablesValue := reflect.New(newSetupRoutesAndIPTablesValue.Type()).Elem()
    72  	oldSetIPAndARPForwardingValue.Set(newSetIPAndARPForwardingValue)
    73  	oldSetupRoutesAndIPTablesValue.Set(newSetupRoutesAndIPTablesValue)
    74  	mockSetIPAndARPForwardingValue := reflect.ValueOf(
    75  		func(bool) error { return nil },
    76  	)
    77  	mockSetupRoutesAndIPTablesValue := reflect.ValueOf(
    78  		func(string, network.Address, string, []network.InterfaceInfo, bool) error { return nil },
    79  	)
    80  	switchValues := func(newValue, oldValue reflect.Value) {
    81  		newValue.Set(oldValue)
    82  	}
    83  	switchValues(newSetIPAndARPForwardingValue, mockSetIPAndARPForwardingValue)
    84  	switchValues(newSetupRoutesAndIPTablesValue, mockSetupRoutesAndIPTablesValue)
    85  
    86  	SetIPAndARPForwarding = func(v bool) error {
    87  		switchValues(newSetIPAndARPForwardingValue, oldSetIPAndARPForwardingValue)
    88  		defer switchValues(newSetIPAndARPForwardingValue, mockSetIPAndARPForwardingValue)
    89  		return setIPAndARPForwarding(v)
    90  	}
    91  	SetupRoutesAndIPTables = func(nic string, addr network.Address, bridge string, ifinfo []network.InterfaceInfo, enableNAT bool) error {
    92  		switchValues(newSetupRoutesAndIPTablesValue, oldSetupRoutesAndIPTablesValue)
    93  		defer switchValues(newSetupRoutesAndIPTablesValue, mockSetupRoutesAndIPTablesValue)
    94  		return setupRoutesAndIPTables(nic, addr, bridge, ifinfo, enableNAT)
    95  	}
    96  }
    97  
    98  var ClassifyMachine = classifyMachine