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