~juju-qa/ubuntu/yakkety/juju/juju-1.25.8

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/worker/provisioner/export_test.go

  • Committer: Nicholas Skaggs
  • Date: 2016-12-02 17:28:37 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161202172837-jkrbdlyjcxtrii2n
Initial commit of 1.25.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
        MaxInstanceRetryDelay      = &maxInstanceRetryDelay
 
48
)
 
49
 
 
50
const (
 
51
        IPForwardSysctlKey = ipForwardSysctlKey
 
52
        ARPProxySysctlKey  = arpProxySysctlKey
 
53
)
 
54
 
 
55
// SetIPAndARPForwarding calls the internal setIPAndARPForwarding and
 
56
// then restores the mocked one.
 
57
var SetIPAndARPForwarding func(bool) error
 
58
 
 
59
// SetupRoutesAndIPTables calls the internal setupRoutesAndIPTables
 
60
// and the restores the mocked one.
 
61
var SetupRoutesAndIPTables func(string, network.Address, string, []network.InterfaceInfo, bool) error
 
62
 
 
63
func init() {
 
64
        // In order to isolate the host machine from the running tests,
 
65
        // but also allow calling the original setIPAndARPForwarding and
 
66
        // setupRoutesAndIPTables funcs to test them, we need a litte bit
 
67
        // of reflect magic, mostly borrowed from the juju/testing
 
68
        // pacakge.
 
69
        newSetIPAndARPForwardingValue := reflect.ValueOf(&setIPAndARPForwarding).Elem()
 
70
        newSetupRoutesAndIPTablesValue := reflect.ValueOf(&setupRoutesAndIPTables).Elem()
 
71
        oldSetIPAndARPForwardingValue := reflect.New(newSetIPAndARPForwardingValue.Type()).Elem()
 
72
        oldSetupRoutesAndIPTablesValue := reflect.New(newSetupRoutesAndIPTablesValue.Type()).Elem()
 
73
        oldSetIPAndARPForwardingValue.Set(newSetIPAndARPForwardingValue)
 
74
        oldSetupRoutesAndIPTablesValue.Set(newSetupRoutesAndIPTablesValue)
 
75
        mockSetIPAndARPForwardingValue := reflect.ValueOf(
 
76
                func(bool) error { return nil },
 
77
        )
 
78
        mockSetupRoutesAndIPTablesValue := reflect.ValueOf(
 
79
                func(string, network.Address, string, []network.InterfaceInfo, bool) error { return nil },
 
80
        )
 
81
        switchValues := func(newValue, oldValue reflect.Value) {
 
82
                newValue.Set(oldValue)
 
83
        }
 
84
        switchValues(newSetIPAndARPForwardingValue, mockSetIPAndARPForwardingValue)
 
85
        switchValues(newSetupRoutesAndIPTablesValue, mockSetupRoutesAndIPTablesValue)
 
86
 
 
87
        SetIPAndARPForwarding = func(v bool) error {
 
88
                switchValues(newSetIPAndARPForwardingValue, oldSetIPAndARPForwardingValue)
 
89
                defer switchValues(newSetIPAndARPForwardingValue, mockSetIPAndARPForwardingValue)
 
90
                return setIPAndARPForwarding(v)
 
91
        }
 
92
        SetupRoutesAndIPTables = func(nic string, addr network.Address, bridge string, ifinfo []network.InterfaceInfo, enableNAT bool) error {
 
93
                switchValues(newSetupRoutesAndIPTablesValue, oldSetupRoutesAndIPTablesValue)
 
94
                defer switchValues(newSetupRoutesAndIPTablesValue, mockSetupRoutesAndIPTablesValue)
 
95
                return setupRoutesAndIPTables(nic, addr, bridge, ifinfo, enableNAT)
 
96
        }
 
97
}
 
98
 
 
99
var ClassifyMachine = classifyMachine