github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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/environs/config"
    10  	"github.com/juju/juju/network"
    11  	"github.com/juju/juju/watcher"
    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  	NetInterfaceByName         = &netInterfaceByName
    41  	NetInterfaces              = &netInterfaces
    42  	InterfaceAddrs             = &interfaceAddrs
    43  	DiscoverPrimaryNIC         = discoverPrimaryNIC
    44  	ConfigureContainerNetwork  = configureContainerNetwork
    45  	MaybeOverrideDefaultLXCNet = maybeOverrideDefaultLXCNet
    46  	EtcDefaultLXCNetPath       = &etcDefaultLXCNetPath
    47  	EtcDefaultLXCNet           = etcDefaultLXCNet
    48  	RetryStrategyDelay         = &retryStrategyDelay
    49  	RetryStrategyCount         = &retryStrategyCount
    50  )
    51  
    52  const (
    53  	IPForwardSysctlKey = ipForwardSysctlKey
    54  	ARPProxySysctlKey  = arpProxySysctlKey
    55  )
    56  
    57  // SetIPAndARPForwarding calls the internal setIPAndARPForwarding and
    58  // then restores the mocked one.
    59  var SetIPAndARPForwarding func(bool) error
    60  
    61  // SetupRoutesAndIPTables calls the internal setupRoutesAndIPTables
    62  // and the restores the mocked one.
    63  var SetupRoutesAndIPTables func(string, network.Address, string, []network.InterfaceInfo, bool) error
    64  
    65  func init() {
    66  	// In order to isolate the host machine from the running tests,
    67  	// but also allow calling the original setIPAndARPForwarding and
    68  	// setupRoutesAndIPTables funcs to test them, we need a litte bit
    69  	// of reflect magic, mostly borrowed from the juju/testing
    70  	// pacakge.
    71  	newSetIPAndARPForwardingValue := reflect.ValueOf(&setIPAndARPForwarding).Elem()
    72  	newSetupRoutesAndIPTablesValue := reflect.ValueOf(&setupRoutesAndIPTables).Elem()
    73  	oldSetIPAndARPForwardingValue := reflect.New(newSetIPAndARPForwardingValue.Type()).Elem()
    74  	oldSetupRoutesAndIPTablesValue := reflect.New(newSetupRoutesAndIPTablesValue.Type()).Elem()
    75  	oldSetIPAndARPForwardingValue.Set(newSetIPAndARPForwardingValue)
    76  	oldSetupRoutesAndIPTablesValue.Set(newSetupRoutesAndIPTablesValue)
    77  	mockSetIPAndARPForwardingValue := reflect.ValueOf(
    78  		func(bool) error { return nil },
    79  	)
    80  	mockSetupRoutesAndIPTablesValue := reflect.ValueOf(
    81  		func(string, network.Address, string, []network.InterfaceInfo, bool) error { return nil },
    82  	)
    83  	switchValues := func(newValue, oldValue reflect.Value) {
    84  		newValue.Set(oldValue)
    85  	}
    86  	switchValues(newSetIPAndARPForwardingValue, mockSetIPAndARPForwardingValue)
    87  	switchValues(newSetupRoutesAndIPTablesValue, mockSetupRoutesAndIPTablesValue)
    88  
    89  	SetIPAndARPForwarding = func(v bool) error {
    90  		switchValues(newSetIPAndARPForwardingValue, oldSetIPAndARPForwardingValue)
    91  		defer switchValues(newSetIPAndARPForwardingValue, mockSetIPAndARPForwardingValue)
    92  		return setIPAndARPForwarding(v)
    93  	}
    94  	SetupRoutesAndIPTables = func(nic string, addr network.Address, bridge string, ifinfo []network.InterfaceInfo, enableNAT bool) error {
    95  		switchValues(newSetupRoutesAndIPTablesValue, oldSetupRoutesAndIPTablesValue)
    96  		defer switchValues(newSetupRoutesAndIPTablesValue, mockSetupRoutesAndIPTablesValue)
    97  		return setupRoutesAndIPTables(nic, addr, bridge, ifinfo, enableNAT)
    98  	}
    99  }
   100  
   101  var ClassifyMachine = classifyMachine