Merge lp:~wallyworld/juju-core/utopic-support into lp:~go-bot/juju-core/trunk

Proposed by Ian Booth
Status: Merged
Approved by: Ian Booth
Approved revision: no longer in the source branch.
Merged at revision: 2713
Proposed branch: lp:~wallyworld/juju-core/utopic-support
Merge into: lp:~go-bot/juju-core/trunk
Diff against target: 589 lines (+201/-145)
15 files modified
environs/bootstrap/synctools.go (+2/-2)
environs/imagemetadata/generate.go (+2/-1)
environs/imagemetadata/simplestreams.go (+3/-2)
environs/simplestreams/export_test.go (+0/-11)
environs/simplestreams/simplestreams.go (+0/-102)
environs/simplestreams/simplestreams_test.go (+0/-21)
environs/simplestreams/testing/testing.go (+2/-1)
environs/sync/sync.go (+2/-1)
environs/tools/simplestreams.go (+3/-2)
environs/tools/testing/testing.go (+2/-1)
environs/tools/tools.go (+2/-1)
version/ubuntu/export_test.go (+15/-0)
version/ubuntu/package_test.go (+14/-0)
version/ubuntu/supportedseries.go (+116/-0)
version/ubuntu/supportedseries_test.go (+38/-0)
To merge this branch: bzr merge lp:~wallyworld/juju-core/utopic-support
Reviewer Review Type Date Requested Status
Juju Engineering Pending
Review via email: mp+218910@code.launchpad.net

Commit message

Split out Ubuntu series lookup

Support for querying Ubuntu series info was
in the simplestreams package. We needed to add
support for "utopic" but it wasn't obvious
where to do it. A previous attempt was made
but only a test constant was changed. This
branch extracts the series stuff into a new
juju/ubuntu package and adds proper "utopic"
support.

We may well need to look at this again when we
want to add supported series support for other
OS's but for now this should be good enough.

https://codereview.appspot.com/92160043/

Description of the change

Split out Ubuntu series lookup

Support for querying Ubuntu series info was
in the simplestreams package. We needed to add
support for "utopic" but it wasn't obvious
where to do it. A previous attempt was made
but only a test constant was changed. This
branch extracts the series stuff into a new
juju/ubuntu package and adds proper "utopic"
support.

We may well need to look at this again when we
want to add supported series support for other
OS's but for now this should be good enough.

https://codereview.appspot.com/92160043/

To post a comment you must log in.
Revision history for this message
Ian Booth (wallyworld) wrote :

Reviewers: mp+218910_code.launchpad.net,

Message:
Please take a look.

Description:
Split out Ubuntu series lookup

Support for querying Ubuntu series info was
in the simplestreams package. We needed to add
support for "utopic" but it wasn't obvious
where to do it. A previous attempt was made
but only a test constant was changed. This
branch extracts the series stuff into a new
juju/ubuntu package and adds proper "utopic"
support.

We may well need to look at this again when we
want to add supported series support for other
OS's but for now this should be good enough.

https://code.launchpad.net/~wallyworld/juju-core/utopic-support/+merge/218910

(do not edit description out of merge proposal)

Please review this at https://codereview.appspot.com/92160043/

Affected files (+203, -145 lines):
   A [revision details]
   M environs/bootstrap/synctools.go
   M environs/imagemetadata/generate.go
   M environs/imagemetadata/simplestreams.go
   M environs/simplestreams/export_test.go
   M environs/simplestreams/simplestreams.go
   M environs/simplestreams/simplestreams_test.go
   M environs/simplestreams/testing/testing.go
   M environs/sync/sync.go
   M environs/tools/simplestreams.go
   M environs/tools/testing/testing.go
   M environs/tools/tools.go
   A juju/ubuntu/export_test.go
   A juju/ubuntu/package_test.go
   A juju/ubuntu/supportedseries.go
   A juju/ubuntu/supportedseries_test.go

Revision history for this message
Andrew Wilkins (axwalk) wrote :

On 2014/05/09 04:46:47, wallyworld wrote:
> Please take a look.

I think version/ubuntu would be even more obvious. Otherwise, LGTM.

https://codereview.appspot.com/92160043/

Revision history for this message
Ian Booth (wallyworld) wrote :

On 2014/05/09 04:56:51, axw wrote:
> On 2014/05/09 04:46:47, wallyworld wrote:
> > Please take a look.

> I think version/ubuntu would be even more obvious. Otherwise, LGTM.

Yeah, good idea. Done

https://codereview.appspot.com/92160043/

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'environs/bootstrap/synctools.go'
2--- environs/bootstrap/synctools.go 2014-04-24 04:01:26 +0000
3+++ environs/bootstrap/synctools.go 2014-05-09 05:03:50 +0000
4@@ -9,7 +9,6 @@
5
6 "launchpad.net/juju-core/environs"
7 "launchpad.net/juju-core/environs/config"
8- "launchpad.net/juju-core/environs/simplestreams"
9 "launchpad.net/juju-core/environs/sync"
10 envtools "launchpad.net/juju-core/environs/tools"
11 "launchpad.net/juju-core/errors"
12@@ -17,6 +16,7 @@
13 coretools "launchpad.net/juju-core/tools"
14 "launchpad.net/juju-core/utils/set"
15 "launchpad.net/juju-core/version"
16+ "launchpad.net/juju-core/version/ubuntu"
17 )
18
19 const noToolsMessage = `Juju cannot bootstrap because no tools are available for your environment.
20@@ -34,7 +34,7 @@
21 logger.Infof("checking that upload is possible")
22 // Check the series are valid.
23 for _, series := range bootstrapSeries {
24- if _, err := simplestreams.SeriesVersion(series); err != nil {
25+ if _, err := ubuntu.SeriesVersion(series); err != nil {
26 return err
27 }
28 }
29
30=== modified file 'environs/imagemetadata/generate.go'
31--- environs/imagemetadata/generate.go 2014-04-14 12:36:13 +0000
32+++ environs/imagemetadata/generate.go 2014-05-09 05:03:50 +0000
33@@ -12,6 +12,7 @@
34 "launchpad.net/juju-core/environs/simplestreams"
35 "launchpad.net/juju-core/environs/storage"
36 "launchpad.net/juju-core/errors"
37+ "launchpad.net/juju-core/version/ubuntu"
38 )
39
40 // MergeAndWriteMetadata reads the existing metadata from storage (if any),
41@@ -23,7 +24,7 @@
42 if err != nil {
43 return err
44 }
45- seriesVersion, err := simplestreams.SeriesVersion(series)
46+ seriesVersion, err := ubuntu.SeriesVersion(series)
47 if err != nil {
48 return err
49 }
50
51=== modified file 'environs/imagemetadata/simplestreams.go'
52--- environs/imagemetadata/simplestreams.go 2014-03-20 05:03:57 +0000
53+++ environs/imagemetadata/simplestreams.go 2014-05-09 05:03:50 +0000
54@@ -12,6 +12,7 @@
55
56 "launchpad.net/juju-core/environs/simplestreams"
57 "launchpad.net/juju-core/juju/arch"
58+ "launchpad.net/juju-core/version/ubuntu"
59 )
60
61 func init() {
62@@ -99,7 +100,7 @@
63
64 func NewImageConstraint(params simplestreams.LookupParams) *ImageConstraint {
65 if len(params.Series) == 0 {
66- params.Series = simplestreams.SupportedSeries()
67+ params.Series = ubuntu.SupportedSeries()
68 }
69 if len(params.Arches) == 0 {
70 params.Arches = arch.AllSupportedArches
71@@ -130,7 +131,7 @@
72 ids := make([]string, nrArches*nrSeries)
73 for i, arch := range ic.Arches {
74 for j, series := range ic.Series {
75- version, err := simplestreams.SeriesVersion(series)
76+ version, err := ubuntu.SeriesVersion(series)
77 if err != nil {
78 return nil, err
79 }
80
81=== modified file 'environs/simplestreams/export_test.go'
82--- environs/simplestreams/export_test.go 2013-10-10 11:40:54 +0000
83+++ environs/simplestreams/export_test.go 2014-05-09 05:03:50 +0000
84@@ -22,14 +22,3 @@
85 func Filter(entries IndexMetadataSlice, match func(*IndexMetadata) bool) IndexMetadataSlice {
86 return entries.filter(match)
87 }
88-
89-func SetSeriesVersions(value map[string]string) func() {
90- origVersions := seriesVersions
91- origUpdated := updatedseriesVersions
92- seriesVersions = value
93- updatedseriesVersions = false
94- return func() {
95- seriesVersions = origVersions
96- updatedseriesVersions = origUpdated
97- }
98-}
99
100=== modified file 'environs/simplestreams/simplestreams.go'
101--- environs/simplestreams/simplestreams.go 2014-04-30 23:18:40 +0000
102+++ environs/simplestreams/simplestreams.go 2014-05-09 05:03:50 +0000
103@@ -10,17 +10,13 @@
104 package simplestreams
105
106 import (
107- "bufio"
108 "encoding/json"
109 "fmt"
110- "io"
111 "io/ioutil"
112- "os"
113 "path"
114 "reflect"
115 "sort"
116 "strings"
117- "sync"
118
119 "github.com/juju/loggo"
120
121@@ -94,104 +90,6 @@
122 return p
123 }
124
125-// seriesVersions provides a mapping between Ubuntu series names and version numbers.
126-// The values here are current as of the time of writing. On Ubuntu systems, we update
127-// these values from /usr/share/distro-info/ubuntu.csv to ensure we have the latest values.
128-// On non-Ubuntu systems, these values provide a nice fallback option.
129-// Exported so tests can change the values to ensure the distro-info lookup works.
130-var seriesVersions = map[string]string{
131- "precise": "12.04",
132- "quantal": "12.10",
133- "raring": "13.04",
134- "saucy": "13.10",
135- "trusty": "14.04",
136-}
137-
138-var (
139- seriesVersionsMutex sync.Mutex
140- updatedseriesVersions bool
141-)
142-
143-// SeriesVersion returns the version number for the specified Ubuntu series.
144-func SeriesVersion(series string) (string, error) {
145- if series == "" {
146- panic("cannot pass empty series to SeriesVersion()")
147- }
148- seriesVersionsMutex.Lock()
149- defer seriesVersionsMutex.Unlock()
150- if vers, ok := seriesVersions[series]; ok {
151- return vers, nil
152- }
153- updateSeriesVersions()
154- if vers, ok := seriesVersions[series]; ok {
155- return vers, nil
156- }
157- return "", fmt.Errorf("invalid series %q", series)
158-}
159-
160-// SupportedSeries returns the Ubuntu series for which we expect to find metadata.
161-func SupportedSeries() []string {
162- seriesVersionsMutex.Lock()
163- defer seriesVersionsMutex.Unlock()
164- updateSeriesVersions()
165- var series []string
166- for s := range seriesVersions {
167- series = append(series, s)
168- }
169- return series
170-}
171-
172-func updateSeriesVersions() {
173- if !updatedseriesVersions {
174- err := updateDistroInfo()
175- if err != nil {
176- logger.Warningf("failed to update distro info: %v", err)
177- }
178- updatedseriesVersions = true
179- }
180-}
181-
182-// updateDistroInfo updates seriesVersions from /usr/share/distro-info/ubuntu.csv if possible..
183-func updateDistroInfo() error {
184- // We need to find the series version eg 12.04 from the series eg precise. Use the information found in
185- // /usr/share/distro-info/ubuntu.csv provided by distro-info-data package.
186- f, err := os.Open("/usr/share/distro-info/ubuntu.csv")
187- if err != nil {
188- // On non-Ubuntu systems this file won't exist but that's expected.
189- return nil
190- }
191- defer f.Close()
192- bufRdr := bufio.NewReader(f)
193- // Only find info for precise or later.
194- preciseOrLaterFound := false
195- for {
196- line, err := bufRdr.ReadString('\n')
197- if err == io.EOF {
198- break
199- }
200- if err != nil {
201- return fmt.Errorf("reading distro info file file: %v", err)
202- }
203- // lines are of the form: "12.04 LTS,Precise Pangolin,precise,2011-10-13,2012-04-26,2017-04-26"
204- parts := strings.Split(line, ",")
205- // Ignore any malformed lines.
206- if len(parts) < 3 {
207- continue
208- }
209- series := parts[2]
210- if series == "precise" {
211- preciseOrLaterFound = true
212- }
213- if series != "precise" && !preciseOrLaterFound {
214- continue
215- }
216- // the numeric version may contain a LTS moniker so strip that out.
217- seriesInfo := strings.Split(parts[0], " ")
218- seriesVersions[series] = seriesInfo[0]
219- }
220- return nil
221-}
222-
223 // The following structs define the data model used in the JSON metadata files.
224 // Not every model attribute is defined here, only the ones we care about.
225 // See the doc/README file in lp:simplestreams for more information.
226
227=== modified file 'environs/simplestreams/simplestreams_test.go'
228--- environs/simplestreams/simplestreams_test.go 2014-03-21 03:27:16 +0000
229+++ environs/simplestreams/simplestreams_test.go 2014-05-09 05:03:50 +0000
230@@ -5,7 +5,6 @@
231
232 import (
233 "bytes"
234- "sort"
235 "strings"
236 "testing"
237
238@@ -14,7 +13,6 @@
239
240 "launchpad.net/juju-core/environs/simplestreams"
241 sstesting "launchpad.net/juju-core/environs/simplestreams/testing"
242- coretesting "launchpad.net/juju-core/testing"
243 "launchpad.net/juju-core/utils"
244 )
245
246@@ -403,25 +401,6 @@
247 c.Check(ti.Endpoint, gc.Equals, "https://ec2.us-west-3.amazonaws.com")
248 }
249
250-func (s *simplestreamsSuite) TestSeriesVersion(c *gc.C) {
251- cleanup := simplestreams.SetSeriesVersions(make(map[string]string))
252- defer cleanup()
253- vers, err := simplestreams.SeriesVersion("precise")
254- if err != nil && err.Error() == `invalid series "precise"` {
255- c.Fatalf(`Unable to lookup series "precise", you may need to: apt-get install distro-info`)
256- }
257- c.Assert(err, gc.IsNil)
258- c.Assert(vers, gc.Equals, "12.04")
259-}
260-
261-func (s *simplestreamsSuite) TestSupportedSeries(c *gc.C) {
262- cleanup := simplestreams.SetSeriesVersions(make(map[string]string))
263- defer cleanup()
264- series := simplestreams.SupportedSeries()
265- sort.Strings(series)
266- c.Assert(series, gc.DeepEquals, coretesting.SupportedSeries)
267-}
268-
269 var getMirrorTests = []struct {
270 region string
271 endpoint string
272
273=== modified file 'environs/simplestreams/testing/testing.go'
274--- environs/simplestreams/testing/testing.go 2014-03-21 03:27:16 +0000
275+++ environs/simplestreams/testing/testing.go 2014-05-09 05:03:50 +0000
276@@ -14,6 +14,7 @@
277 "launchpad.net/juju-core/environs/jujutest"
278 "launchpad.net/juju-core/environs/simplestreams"
279 "launchpad.net/juju-core/testing/testbase"
280+ "launchpad.net/juju-core/version/ubuntu"
281 )
282
283 var PrivateKeyPassphrase = "12345"
284@@ -535,7 +536,7 @@
285 }
286
287 func (tc *testConstraint) Ids() ([]string, error) {
288- version, err := simplestreams.SeriesVersion(tc.Series[0])
289+ version, err := ubuntu.SeriesVersion(tc.Series[0])
290 if err != nil {
291 return nil, err
292 }
293
294=== modified file 'environs/sync/sync.go'
295--- environs/sync/sync.go 2014-04-30 23:18:40 +0000
296+++ environs/sync/sync.go 2014-05-09 05:03:50 +0000
297@@ -20,6 +20,7 @@
298 coretools "launchpad.net/juju-core/tools"
299 "launchpad.net/juju-core/utils"
300 "launchpad.net/juju-core/version"
301+ "launchpad.net/juju-core/version/ubuntu"
302 )
303
304 var logger = loggo.GetLogger("juju.environs.sync")
305@@ -229,7 +230,7 @@
306 }
307 logger.Debugf("generating tarballs for %v", series)
308 for _, series := range series {
309- _, err := simplestreams.SeriesVersion(series)
310+ _, err := ubuntu.SeriesVersion(series)
311 if err != nil {
312 return err
313 }
314
315=== modified file 'environs/tools/simplestreams.go'
316--- environs/tools/simplestreams.go 2014-04-14 12:36:13 +0000
317+++ environs/tools/simplestreams.go 2014-05-09 05:03:50 +0000
318@@ -23,6 +23,7 @@
319 coretools "launchpad.net/juju-core/tools"
320 "launchpad.net/juju-core/utils/set"
321 "launchpad.net/juju-core/version"
322+ "launchpad.net/juju-core/version/ubuntu"
323 )
324
325 func init() {
326@@ -117,7 +118,7 @@
327 func (tc *ToolsConstraint) Ids() ([]string, error) {
328 var allIds []string
329 for _, series := range tc.Series {
330- version, err := simplestreams.SeriesVersion(series)
331+ version, err := ubuntu.SeriesVersion(series)
332 if err != nil {
333 return nil, err
334 }
335@@ -157,7 +158,7 @@
336 }
337
338 func (t *ToolsMetadata) productId() (string, error) {
339- seriesVersion, err := simplestreams.SeriesVersion(t.Release)
340+ seriesVersion, err := ubuntu.SeriesVersion(t.Release)
341 if err != nil {
342 return "", err
343 }
344
345=== modified file 'environs/tools/testing/testing.go'
346--- environs/tools/testing/testing.go 2014-04-30 23:18:40 +0000
347+++ environs/tools/testing/testing.go 2014-05-09 05:03:50 +0000
348@@ -25,6 +25,7 @@
349 "launchpad.net/juju-core/utils"
350 "launchpad.net/juju-core/utils/set"
351 "launchpad.net/juju-core/version"
352+ "launchpad.net/juju-core/version/ubuntu"
353 )
354
355 // MakeTools creates some fake tools with the given version strings.
356@@ -123,7 +124,7 @@
357 toolsMetadata := item.(*tools.ToolsMetadata)
358 toolsMetadataMap[key] = toolsMetadata
359 toolsVersions.Add(key)
360- seriesVersion, err := simplestreams.SeriesVersion(toolsMetadata.Release)
361+ seriesVersion, err := ubuntu.SeriesVersion(toolsMetadata.Release)
362 c.Assert(err, gc.IsNil)
363 productId := fmt.Sprintf("com.ubuntu.juju:%s:%s", seriesVersion, toolsMetadata.Arch)
364 expectedProductIds.Add(productId)
365
366=== modified file 'environs/tools/tools.go'
367--- environs/tools/tools.go 2014-04-30 23:18:40 +0000
368+++ environs/tools/tools.go 2014-05-09 05:03:50 +0000
369@@ -14,6 +14,7 @@
370 "launchpad.net/juju-core/juju/arch"
371 coretools "launchpad.net/juju-core/tools"
372 "launchpad.net/juju-core/version"
373+ "launchpad.net/juju-core/version/ubuntu"
374 )
375
376 var logger = loggo.GetLogger("juju.environs.tools")
377@@ -54,7 +55,7 @@
378 seriesToSearch = []string{filter.Series}
379 } else {
380 logger.Debugf("no series specified when finding tools, looking for any")
381- seriesToSearch = simplestreams.SupportedSeries()
382+ seriesToSearch = ubuntu.SupportedSeries()
383 }
384 toolsConstraint.Series = seriesToSearch
385 return toolsConstraint, nil
386
387=== added directory 'version/ubuntu'
388=== added file 'version/ubuntu/export_test.go'
389--- version/ubuntu/export_test.go 1970-01-01 00:00:00 +0000
390+++ version/ubuntu/export_test.go 2014-05-09 05:03:50 +0000
391@@ -0,0 +1,15 @@
392+// Copyright 2014 Canonical Ltd.
393+// Licensed under the AGPLv3, see LICENCE file for details.
394+
395+package ubuntu
396+
397+func SetSeriesVersions(value map[string]string) func() {
398+ origVersions := seriesVersions
399+ origUpdated := updatedseriesVersions
400+ seriesVersions = value
401+ updatedseriesVersions = false
402+ return func() {
403+ seriesVersions = origVersions
404+ updatedseriesVersions = origUpdated
405+ }
406+}
407
408=== added file 'version/ubuntu/package_test.go'
409--- version/ubuntu/package_test.go 1970-01-01 00:00:00 +0000
410+++ version/ubuntu/package_test.go 2014-05-09 05:03:50 +0000
411@@ -0,0 +1,14 @@
412+// Copyright 2013 Canonical Ltd.
413+// Licensed under the LGPLv3, see COPYING and COPYING.LESSER file for details.
414+
415+package ubuntu_test
416+
417+import (
418+ "testing"
419+
420+ gc "launchpad.net/gocheck"
421+)
422+
423+func Test(t *testing.T) {
424+ gc.TestingT(t)
425+}
426
427=== added file 'version/ubuntu/supportedseries.go'
428--- version/ubuntu/supportedseries.go 1970-01-01 00:00:00 +0000
429+++ version/ubuntu/supportedseries.go 2014-05-09 05:03:50 +0000
430@@ -0,0 +1,116 @@
431+// Copyright 2014 Canonical Ltd.
432+// Licensed under the AGPLv3, see LICENCE file for details.
433+
434+package ubuntu
435+
436+import (
437+ "bufio"
438+ "fmt"
439+ "io"
440+ "os"
441+ "strings"
442+ "sync"
443+
444+ "github.com/juju/loggo"
445+)
446+
447+var logger = loggo.GetLogger("juju.ubuntu")
448+
449+// seriesVersions provides a mapping between Ubuntu series names and version numbers.
450+// The values here are current as of the time of writing. On Ubuntu systems, we update
451+// these values from /usr/share/distro-info/ubuntu.csv to ensure we have the latest values.
452+// On non-Ubuntu systems, these values provide a nice fallback option.
453+// Exported so tests can change the values to ensure the distro-info lookup works.
454+var seriesVersions = map[string]string{
455+ "precise": "12.04",
456+ "quantal": "12.10",
457+ "raring": "13.04",
458+ "saucy": "13.10",
459+ "trusty": "14.04",
460+ "utopic": "14.10",
461+}
462+
463+var (
464+ seriesVersionsMutex sync.Mutex
465+ updatedseriesVersions bool
466+)
467+
468+// SeriesVersion returns the version number for the specified Ubuntu series.
469+func SeriesVersion(series string) (string, error) {
470+ if series == "" {
471+ panic("cannot pass empty series to SeriesVersion()")
472+ }
473+ seriesVersionsMutex.Lock()
474+ defer seriesVersionsMutex.Unlock()
475+ if vers, ok := seriesVersions[series]; ok {
476+ return vers, nil
477+ }
478+ updateSeriesVersions()
479+ if vers, ok := seriesVersions[series]; ok {
480+ return vers, nil
481+ }
482+ return "", fmt.Errorf("invalid series %q", series)
483+}
484+
485+// SupportedSeries returns the Ubuntu series on which we can run Juju workloads.
486+func SupportedSeries() []string {
487+ seriesVersionsMutex.Lock()
488+ defer seriesVersionsMutex.Unlock()
489+ updateSeriesVersions()
490+ var series []string
491+ for s := range seriesVersions {
492+ series = append(series, s)
493+ }
494+ return series
495+}
496+
497+func updateSeriesVersions() {
498+ if !updatedseriesVersions {
499+ err := updateDistroInfo()
500+ if err != nil {
501+ logger.Warningf("failed to update distro info: %v", err)
502+ }
503+ updatedseriesVersions = true
504+ }
505+}
506+
507+// updateDistroInfo updates seriesVersions from /usr/share/distro-info/ubuntu.csv if possible..
508+func updateDistroInfo() error {
509+ // We need to find the series version eg 12.04 from the series eg precise. Use the information found in
510+ // /usr/share/distro-info/ubuntu.csv provided by distro-info-data package.
511+ f, err := os.Open("/usr/share/distro-info/ubuntu.csv")
512+ if err != nil {
513+ // On non-Ubuntu systems this file won't exist but that's expected.
514+ return nil
515+ }
516+ defer f.Close()
517+ bufRdr := bufio.NewReader(f)
518+ // Only find info for precise or later.
519+ preciseOrLaterFound := false
520+ for {
521+ line, err := bufRdr.ReadString('\n')
522+ if err == io.EOF {
523+ break
524+ }
525+ if err != nil {
526+ return fmt.Errorf("reading distro info file file: %v", err)
527+ }
528+ // lines are of the form: "12.04 LTS,Precise Pangolin,precise,2011-10-13,2012-04-26,2017-04-26"
529+ parts := strings.Split(line, ",")
530+ // Ignore any malformed lines.
531+ if len(parts) < 3 {
532+ continue
533+ }
534+ series := parts[2]
535+ if series == "precise" {
536+ preciseOrLaterFound = true
537+ }
538+ if series != "precise" && !preciseOrLaterFound {
539+ continue
540+ }
541+ // the numeric version may contain a LTS moniker so strip that out.
542+ seriesInfo := strings.Split(parts[0], " ")
543+ seriesVersions[series] = seriesInfo[0]
544+ }
545+ return nil
546+}
547
548=== added file 'version/ubuntu/supportedseries_test.go'
549--- version/ubuntu/supportedseries_test.go 1970-01-01 00:00:00 +0000
550+++ version/ubuntu/supportedseries_test.go 2014-05-09 05:03:50 +0000
551@@ -0,0 +1,38 @@
552+// Copyright 2013 Canonical Ltd.
553+// Licensed under the AGPLv3, see LICENCE file for details.
554+
555+package ubuntu_test
556+
557+import (
558+ "sort"
559+
560+ gc "launchpad.net/gocheck"
561+
562+ "launchpad.net/juju-core/testing/testbase"
563+ "launchpad.net/juju-core/version/ubuntu"
564+)
565+
566+type simplestreamsSuite struct {
567+ testbase.LoggingSuite
568+}
569+
570+var _ = gc.Suite(&simplestreamsSuite{})
571+
572+func (s *simplestreamsSuite) TestSeriesVersion(c *gc.C) {
573+ cleanup := ubuntu.SetSeriesVersions(make(map[string]string))
574+ defer cleanup()
575+ vers, err := ubuntu.SeriesVersion("precise")
576+ if err != nil && err.Error() == `invalid series "precise"` {
577+ c.Fatalf(`Unable to lookup series "precise", you may need to: apt-get install distro-info`)
578+ }
579+ c.Assert(err, gc.IsNil)
580+ c.Assert(vers, gc.Equals, "12.04")
581+}
582+
583+func (s *simplestreamsSuite) TestSupportedSeries(c *gc.C) {
584+ cleanup := ubuntu.SetSeriesVersions(make(map[string]string))
585+ defer cleanup()
586+ series := ubuntu.SupportedSeries()
587+ sort.Strings(series)
588+ c.Assert(series, gc.DeepEquals, []string{"precise", "quantal", "raring", "saucy", "trusty", "utopic"})
589+}

Subscribers

People subscribed via source and target branches

to status/vote changes: