Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(305)

Side by Side Diff: environs/sync/sync_test.go

Issue 11588043: sync: pull out sync tools logic (Closed)
Patch Set: sync: pull out sync tools logic Created 11 years, 8 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« environs/sync/sync.go ('K') | « environs/sync/sync.go ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 Canonical Ltd.
2 // Licensed under the AGPLv3, see LICENCE file for details.
3
4 package sync_test
5
6 import (
7 "io/ioutil"
8 "os"
9 "path/filepath"
10 "testing"
11
12 gc "launchpad.net/gocheck"
13
14 "launchpad.net/juju-core/agent/tools"
15 "launchpad.net/juju-core/environs"
16 "launchpad.net/juju-core/environs/dummy"
17 "launchpad.net/juju-core/environs/sync"
18 envtesting "launchpad.net/juju-core/environs/testing"
19 coretesting "launchpad.net/juju-core/testing"
20 "launchpad.net/juju-core/version"
21 )
22
23 func TestPackage(t *testing.T) {
24 gc.TestingT(t)
25 }
26
27 type syncSuite struct {
28 coretesting.LoggingSuite
29 home *coretesting.FakeHome
30 targetEnv environs.Environ
31 origVersion version.Binary
32 origLocation string
33 storage *envtesting.EC2HTTPTestStorage
34 localStorage string
35 }
36
37 var _ = gc.Suite(&syncSuite{})
38
39 func (s *syncSuite) SetUpTest(c *gc.C) {
40 s.LoggingSuite.SetUpTest(c)
41 s.origVersion = version.Current
42 // It's important that this be v1 to match the test data.
dimitern 2013/07/24 14:52:06 s/that this be v1/to use v1/ ?
43 version.Current.Number = version.MustParse("1.2.3")
44
45 // Create a target environments.yaml and make sure its environment is em pty.
46 s.home = coretesting.MakeFakeHome(c, `
47 environments:
48 test-target:
49 type: dummy
50 state-server: false
51 authorized-keys: "not-really-one"
52 `)
53 var err error
54 s.targetEnv, err = environs.NewFromName("test-target")
55 c.Assert(err, gc.IsNil)
56 envtesting.RemoveAllTools(c, s.targetEnv)
57
58 // Create a source storage.
59 s.storage, err = envtesting.NewEC2HTTPTestStorage("127.0.0.1")
60 c.Assert(err, gc.IsNil)
61
62 // Create a local tools directory.
63 s.localStorage = c.MkDir()
64
65 // Populate both with the public tools.
66 for _, vers := range vAll {
67 s.storage.PutBinary(vers)
68 putBinary(c, s.localStorage, vers)
69 }
70
71 // Switch tools location.
72 s.origLocation = sync.DefaultToolsLocation
73 sync.DefaultToolsLocation = s.storage.Location()
74 }
75
76 func (s *syncSuite) TearDownTest(c *gc.C) {
77 c.Assert(s.storage.Stop(), gc.IsNil)
dimitern 2013/07/24 14:52:06 if s.storage != nil { c.Check(s.storage.Stop(),
78 sync.DefaultToolsLocation = s.origLocation
79 dummy.Reset()
80 s.home.Restore()
81 version.Current = s.origVersion
82 s.LoggingSuite.TearDownTest(c)
83 }
84
85 func (s *syncSuite) TestCopyNewestFromFilesystem(c *gc.C) {
dimitern 2013/07/24 14:52:06 All these test cases are an excellent candidate fo
86 ctx := &sync.SyncContext{
87 EnvName: "test-target",
88 Source: s.localStorage,
89 }
90 err := sync.SyncTools(ctx)
91 c.Assert(err, gc.IsNil)
92
93 // Newest released v1 tools made available to target env.
94 targetTools, err := environs.FindAvailableTools(s.targetEnv, 1)
95 c.Assert(err, gc.IsNil)
96 assertToolsList(c, targetTools, v100all)
97
98 // Public bucket was not touched.
99 assertEmpty(c, s.targetEnv.PublicStorage())
100 }
101
102 func (s *syncSuite) TestCopyNewestFromDummy(c *gc.C) {
103 ctx := &sync.SyncContext{
104 EnvName: "test-target",
105 }
106 err := sync.SyncTools(ctx)
107 c.Assert(err, gc.IsNil)
108
109 // Newest released v1 tools made available to target env.
110 targetTools, err := environs.FindAvailableTools(s.targetEnv, 1)
111 c.Assert(err, gc.IsNil)
112 assertToolsList(c, targetTools, v100all)
113
114 // Public bucket was not touched.
115 assertEmpty(c, s.targetEnv.PublicStorage())
116 }
117
118 func (s *syncSuite) TestCopyNewestDevFromDummy(c *gc.C) {
119 ctx := &sync.SyncContext{
120 EnvName: "test-target",
121 Dev: true,
122 }
123 err := sync.SyncTools(ctx)
124 c.Assert(err, gc.IsNil)
125
126 // Newest v1 dev tools made available to target env.
127 targetTools, err := environs.FindAvailableTools(s.targetEnv, 1)
128 c.Assert(err, gc.IsNil)
129 assertToolsList(c, targetTools, v190all)
130
131 // Public bucket was not touched.
132 assertEmpty(c, s.targetEnv.PublicStorage())
133 }
134
135 func (s *syncSuite) TestCopyAllFromDummy(c *gc.C) {
136 ctx := &sync.SyncContext{
137 EnvName: "test-target",
138 AllVersions: true,
139 }
140 err := sync.SyncTools(ctx)
141 c.Assert(err, gc.IsNil)
142
143 // All released v1 tools made available to target env.
144 targetTools, err := environs.FindAvailableTools(s.targetEnv, 1)
145 c.Assert(err, gc.IsNil)
146 assertToolsList(c, targetTools, v100all)
147
148 // Public bucket was not touched.
149 assertEmpty(c, s.targetEnv.PublicStorage())
150 }
151
152 func (s *syncSuite) TestCopyAllDevFromDummy(c *gc.C) {
153 ctx := &sync.SyncContext{
154 EnvName: "test-target",
155 AllVersions: true,
156 Dev: true,
157 }
158 err := sync.SyncTools(ctx)
159 c.Assert(err, gc.IsNil)
160
161 // All v1 tools, dev and release, made available to target env.
162 targetTools, err := environs.FindAvailableTools(s.targetEnv, 1)
163 c.Assert(err, gc.IsNil)
164 assertToolsList(c, targetTools, v1all)
165
166 // Public bucket was not touched.
167 assertEmpty(c, s.targetEnv.PublicStorage())
168 }
169
170 func (s *syncSuite) TestCopyToDummyPublic(c *gc.C) {
171 ctx := &sync.SyncContext{
172 EnvName: "test-target",
173 PublicBucket: true,
174 }
175 err := sync.SyncTools(ctx)
176 c.Assert(err, gc.IsNil)
177
178 // Newest released tools made available to target env.
179 targetTools, err := environs.FindAvailableTools(s.targetEnv, 1)
180 c.Assert(err, gc.IsNil)
181 assertToolsList(c, targetTools, v100all)
182
183 // Private bucket was not touched.
184 assertEmpty(c, s.targetEnv.Storage())
185 }
186
187 func (s *syncSuite) TestCopyToDummyPublicBlockedByPrivate(c *gc.C) {
188 envtesting.UploadFakeToolsVersion(c, s.targetEnv.Storage(), v200p64)
189 ctx := &sync.SyncContext{
190 EnvName: "test-target",
191 PublicBucket: true,
192 }
193 err := sync.SyncTools(ctx)
194 c.Assert(err, gc.ErrorMatches, "private tools present: public tools woul d be ignored")
195 assertEmpty(c, s.targetEnv.PublicStorage())
196 }
197
198 var (
199 v100p64 = version.MustParseBinary("1.0.0-precise-amd64")
200 v100q64 = version.MustParseBinary("1.0.0-quantal-amd64")
201 v100q32 = version.MustParseBinary("1.0.0-quantal-i386")
202 v100all = []version.Binary{v100p64, v100q64, v100q32}
203 v190q64 = version.MustParseBinary("1.9.0-quantal-amd64")
204 v190p32 = version.MustParseBinary("1.9.0-precise-i386")
205 v190all = []version.Binary{v190q64, v190p32}
206 v1all = append(v100all, v190all...)
207 v200p64 = version.MustParseBinary("2.0.0-precise-amd64")
208 vAll = append(v1all, v200p64)
209 )
210
211 // putBinary stores a faked binary in the test directory.
212 func putBinary(c *gc.C, storagePath string, v version.Binary) {
213 data := v.String()
214 name := tools.StorageName(v)
215 filename := filepath.Join(storagePath, name)
216 dir := filepath.Dir(filename)
217 err := os.MkdirAll(dir, 0755)
218 c.Assert(err, gc.IsNil)
219 err = ioutil.WriteFile(filename, []byte(data), 0666)
220 c.Assert(err, gc.IsNil)
221 }
222
223 func assertEmpty(c *gc.C, storage environs.StorageReader) {
224 list, err := tools.ReadList(storage, 1)
225 if len(list) > 0 {
226 c.Logf("got unexpected tools: %s", list)
227 }
228 c.Assert(err, gc.Equals, tools.ErrNoTools)
229 }
230
231 func assertToolsList(c *gc.C, list tools.List, expected []version.Binary) {
232 urls := list.URLs()
233 c.Check(urls, gc.HasLen, len(expected))
234 for _, vers := range expected {
235 c.Assert(urls[vers], gc.Not(gc.Equals), "")
236 }
237 }
OLDNEW
« environs/sync/sync.go ('K') | « environs/sync/sync.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b