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