github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/worker/networker/configfiles_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package networker_test 5 6 import ( 7 "io/ioutil" 8 "os" 9 "path/filepath" 10 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/network" 15 "github.com/juju/juju/testing" 16 "github.com/juju/juju/worker/networker" 17 ) 18 19 type configFilesSuite struct { 20 testing.BaseSuite 21 } 22 23 var _ = gc.Suite(&configFilesSuite{}) 24 25 func (s *configFilesSuite) TestSimpleGetters(c *gc.C) { 26 info := network.InterfaceInfo{ 27 InterfaceName: "blah", 28 } 29 data := []byte("some data") 30 cf := networker.NewConfigFile("ethX", "/some/path", info, data) 31 c.Assert(cf.InterfaceName(), gc.Equals, "ethX") 32 c.Assert(cf.FileName(), gc.Equals, "/some/path") 33 c.Assert(cf.InterfaceInfo(), jc.DeepEquals, info) 34 c.Assert(cf.Data(), jc.DeepEquals, data) 35 c.Assert(cf.NeedsUpdating(), jc.IsFalse) 36 c.Assert(cf.IsPendingRemoval(), jc.IsFalse) 37 c.Assert(cf.IsManaged(), jc.IsFalse) 38 } 39 40 func (s *configFilesSuite) TestRenderManaged(c *gc.C) { 41 info := network.InterfaceInfo{ 42 InterfaceName: "ethX", 43 VLANTag: 42, 44 } 45 cf := networker.NewConfigFile("ethX", "/some/path", info, nil) 46 data := cf.RenderManaged() 47 expectedVLAN := ` 48 # Managed by Juju, please don't change. 49 50 auto ethX.42 51 iface ethX.42 inet dhcp 52 vlan-raw-device ethX 53 54 `[1:] 55 c.Assert(string(data), jc.DeepEquals, expectedVLAN) 56 57 expectedNormal := ` 58 # Managed by Juju, please don't change. 59 60 auto ethX 61 iface ethX inet dhcp 62 63 `[1:] 64 info.VLANTag = 0 65 cf = networker.NewConfigFile("ethX", "/some/path", info, nil) 66 data = cf.RenderManaged() 67 c.Assert(string(data), jc.DeepEquals, expectedNormal) 68 } 69 70 func (s *configFilesSuite) TestUpdateData(c *gc.C) { 71 cf := networker.NewConfigFile("ethX", "", network.InterfaceInfo{}, nil) 72 assertData := func(expectData []byte, expectNeedsUpdating bool) { 73 c.Assert(string(cf.Data()), jc.DeepEquals, string(expectData)) 74 c.Assert(cf.NeedsUpdating(), gc.Equals, expectNeedsUpdating) 75 c.Assert(cf.IsPendingRemoval(), jc.IsFalse) 76 } 77 78 assertData(nil, false) 79 80 result := cf.UpdateData(nil) 81 c.Assert(result, jc.IsFalse) 82 assertData(nil, false) 83 84 newData := []byte("new data") 85 result = cf.UpdateData(newData) 86 c.Assert(result, jc.IsTrue) 87 assertData(newData, true) 88 89 newData = []byte("newer data") 90 result = cf.UpdateData(newData) 91 c.Assert(result, jc.IsTrue) 92 assertData(newData, true) 93 } 94 95 func (s *configFilesSuite) TestReadData(c *gc.C) { 96 data := []byte("some\ndata\nhere") 97 testFile := filepath.Join(c.MkDir(), "test") 98 defer os.Remove(testFile) 99 100 err := ioutil.WriteFile(testFile, data, 0644) 101 c.Assert(err, jc.ErrorIsNil) 102 cf := networker.NewConfigFile("ethX", testFile, network.InterfaceInfo{}, nil) 103 err = cf.ReadData() 104 c.Assert(err, jc.ErrorIsNil) 105 c.Assert(string(cf.Data()), jc.DeepEquals, string(data)) 106 c.Assert(cf.NeedsUpdating(), jc.IsTrue) 107 } 108 109 func (s *configFilesSuite) TestMarkForRemoval(c *gc.C) { 110 cf := networker.NewConfigFile("ethX", "", network.InterfaceInfo{}, nil) 111 c.Assert(cf.IsPendingRemoval(), jc.IsFalse) 112 c.Assert(cf.NeedsUpdating(), jc.IsFalse) 113 cf.MarkForRemoval() 114 c.Assert(cf.IsPendingRemoval(), jc.IsTrue) 115 c.Assert(cf.NeedsUpdating(), jc.IsFalse) 116 } 117 118 func (s *configFilesSuite) TestIsManaged(c *gc.C) { 119 info := network.InterfaceInfo{ 120 InterfaceName: "ethX", 121 } 122 cf := networker.NewConfigFile("ethX", "", info, nil) 123 c.Assert(cf.IsManaged(), jc.IsFalse) // always false when no data 124 c.Assert(cf.UpdateData([]byte("blah")), jc.IsTrue) 125 c.Assert(cf.IsManaged(), jc.IsFalse) // false if header is missing 126 c.Assert(cf.UpdateData(cf.RenderManaged()), jc.IsTrue) 127 c.Assert(cf.IsManaged(), jc.IsTrue) 128 } 129 130 func (s *configFilesSuite) TestApply(c *gc.C) { 131 data := []byte("some\ndata\nhere") 132 testFile := filepath.Join(c.MkDir(), "test") 133 defer os.Remove(testFile) 134 135 cf := networker.NewConfigFile("ethX", testFile, network.InterfaceInfo{}, data) 136 c.Assert(cf.NeedsUpdating(), jc.IsFalse) 137 c.Assert(cf.IsPendingRemoval(), jc.IsFalse) 138 c.Assert(string(cf.Data()), jc.DeepEquals, string(data)) 139 140 newData := []byte("new\ndata") 141 c.Assert(cf.UpdateData(newData), jc.IsTrue) 142 c.Assert(cf.NeedsUpdating(), jc.IsTrue) 143 c.Assert(cf.IsPendingRemoval(), jc.IsFalse) 144 145 err := cf.Apply() 146 c.Assert(err, jc.ErrorIsNil) 147 c.Assert(cf.NeedsUpdating(), jc.IsFalse) 148 c.Assert(cf.IsPendingRemoval(), jc.IsFalse) 149 150 readData, err := ioutil.ReadFile(testFile) 151 c.Assert(err, jc.ErrorIsNil) 152 c.Assert(string(readData), jc.DeepEquals, string(newData)) 153 154 cf.MarkForRemoval() 155 c.Assert(cf.NeedsUpdating(), jc.IsFalse) 156 c.Assert(cf.IsPendingRemoval(), jc.IsTrue) 157 err = cf.Apply() 158 c.Assert(err, jc.ErrorIsNil) 159 c.Assert(cf.NeedsUpdating(), jc.IsFalse) 160 c.Assert(cf.IsPendingRemoval(), jc.IsFalse) 161 162 _, err = os.Stat(testFile) 163 c.Assert(err, jc.Satisfies, os.IsNotExist) 164 } 165 166 func (s *configFilesSuite) TestRenderMainConfig(c *gc.C) { 167 expect := ` 168 # Managed by Juju, please don't change. 169 170 source /some/path/*.cfg 171 172 `[1:] 173 data := networker.RenderMainConfig("/some/path") 174 c.Assert(string(data), jc.DeepEquals, expect) 175 }