Merge lp:~thumper/juju-core/fast-lxc into lp:~go-bot/juju-core/trunk

Proposed by Tim Penhey
Status: Merged
Approved by: Tim Penhey
Approved revision: no longer in the source branch.
Merged at revision: 2400
Proposed branch: lp:~thumper/juju-core/fast-lxc
Merge into: lp:~go-bot/juju-core/trunk
Prerequisite: lp:~thumper/juju-core/maybe-add-cloud-archive-func
Diff against target: 373 lines (+205/-20)
7 files modified
provider/local/environ.go (+5/-2)
provider/local/export_test.go (+8/-5)
provider/local/lxc.go (+38/-0)
provider/local/lxc_test.go (+59/-0)
version/export_test.go (+4/-1)
version/version.go (+25/-4)
version/version_test.go (+66/-8)
To merge this branch: bzr merge lp:~thumper/juju-core/fast-lxc
Reviewer Review Type Date Requested Status
Juju Engineering Pending
Review via email: mp+209801@code.launchpad.net

Commit message

Local provider flag for fast-lxc

The flag is determined by the distro release from the
/etc/lsb-release file.

There is an override environment variable that can be
set to keep existing behaviour. Although no actual
behaviour is introduced in this branch.

https://codereview.appspot.com/72210043/

Description of the change

Local provider flag for fast-lxc

The flag is determined by the distro release from the
/etc/lsb-release file.

There is an override environment variable that can be
set to keep existing behaviour. Although no actual
behaviour is introduced in this branch.

https://codereview.appspot.com/72210043/

To post a comment you must log in.
Revision history for this message
Tim Penhey (thumper) wrote :

Reviewers: mp+209801_code.launchpad.net,

Message:
Please take a look.

Description:
Local provider flag for fast-lxc

The flag is determined by the distro release from the
/etc/lsb-release file.

There is an override environment variable that can be
set to keep existing behaviour. Although no actual
behaviour is introduced in this branch.

https://code.launchpad.net/~thumper/juju-core/fast-lxc/+merge/209801

Requires:
https://code.launchpad.net/~thumper/juju-core/maybe-add-cloud-archive-func/+merge/209798

(do not edit description out of merge proposal)

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

Affected files (+154, -7 lines):
   A [revision details]
   M provider/local/environ.go
   M provider/local/export_test.go
   A provider/local/lxc.go
   A provider/local/lxc_test.go

Revision history for this message
Sidnei da Silva (sidnei) wrote :

https://codereview.appspot.com/72210043/diff/1/provider/local/lxc.go
File provider/local/lxc.go (right):

https://codereview.appspot.com/72210043/diff/1/provider/local/lxc.go#newcode38
provider/local/lxc.go:38: return value >= 14.04
Is it possible at all to do a feature check instead of a version check
here (even if it means parsing lxc-create --help)? It should technically
be possible to use fast lxc if you have a backport of lxc 1.0 for
anything between precise and trusty.

https://codereview.appspot.com/72210043/

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

https://codereview.appspot.com/72210043/diff/1/provider/local/lxc.go
File provider/local/lxc.go (right):

https://codereview.appspot.com/72210043/diff/1/provider/local/lxc.go#newcode44
provider/local/lxc.go:44: func getReleaseVersion() string {
There's a method in version.go which reads the series from lsb-release -
readSeries(). I think it would be best to enhance this function to
return version also or otherwise put this functionality there and export
it, so that the version related stuff is kept together.

https://codereview.appspot.com/72210043/

Revision history for this message
Tim Penhey (thumper) wrote :

On 2014/03/06 23:20:15, sidnei.da.silva wrote:
> https://codereview.appspot.com/72210043/diff/1/provider/local/lxc.go
> File provider/local/lxc.go (right):

https://codereview.appspot.com/72210043/diff/1/provider/local/lxc.go#newcode38
> provider/local/lxc.go:38: return value >= 14.04
> Is it possible at all to do a feature check instead of a version check
here
> (even if it means parsing lxc-create --help)? It should technically be
possible
> to use fast lxc if you have a backport of lxc 1.0 for anything between
precise
> and trusty.

While technically possible, it seemed reasonable to me and others to
keep it simple and say this is a trusty feature.

https://codereview.appspot.com/72210043/

Revision history for this message
Tim Penhey (thumper) wrote :

Please take a look.

https://codereview.appspot.com/72210043/diff/1/provider/local/lxc.go
File provider/local/lxc.go (right):

https://codereview.appspot.com/72210043/diff/1/provider/local/lxc.go#newcode44
provider/local/lxc.go:44: func getReleaseVersion() string {
On 2014/03/06 23:24:19, wallyworld wrote:
> There's a method in version.go which reads the series from lsb-release
-
> readSeries(). I think it would be best to enhance this function to
return
> version also or otherwise put this functionality there and export it,
so that
> the version related stuff is kept together.

Moved.

https://codereview.appspot.com/72210043/

Revision history for this message
William Reade (fwereade) wrote :

really messy diff, please repropose

https://codereview.appspot.com/72210043/

Revision history for this message
Tim Penhey (thumper) wrote :
Revision history for this message
Ian Booth (wallyworld) wrote :
Revision history for this message
Go Bot (go-bot) wrote :
Download full text (9.8 KiB)

The attempt to merge lp:~thumper/juju-core/fast-lxc into lp:juju-core failed. Below is the output from the failed tests.

ok launchpad.net/juju-core 0.014s
ok launchpad.net/juju-core/agent 1.012s
ok launchpad.net/juju-core/agent/mongo 0.520s
ok launchpad.net/juju-core/agent/tools 0.182s
ok launchpad.net/juju-core/bzr 5.142s
ok launchpad.net/juju-core/cert 2.601s
ok launchpad.net/juju-core/charm 0.404s
? launchpad.net/juju-core/charm/hooks [no test files]
? launchpad.net/juju-core/charm/testing [no test files]
ok launchpad.net/juju-core/cloudinit 0.029s
ok launchpad.net/juju-core/cloudinit/sshinit 0.917s
ok launchpad.net/juju-core/cmd 0.143s
ok launchpad.net/juju-core/cmd/charm-admin 0.270s
? launchpad.net/juju-core/cmd/charmd [no test files]
? launchpad.net/juju-core/cmd/charmload [no test files]
ok launchpad.net/juju-core/cmd/juju 200.161s
ok launchpad.net/juju-core/cmd/jujud 62.786s
ok launchpad.net/juju-core/cmd/plugins/juju-metadata 6.819s
? launchpad.net/juju-core/cmd/plugins/juju-restore [no test files]
ok launchpad.net/juju-core/cmd/plugins/local 0.167s
? launchpad.net/juju-core/cmd/plugins/local/juju-local [no test files]
ok launchpad.net/juju-core/constraints 0.020s
ok launchpad.net/juju-core/container 0.036s
ok launchpad.net/juju-core/container/factory 0.036s
ok launchpad.net/juju-core/container/kvm 0.182s
ok launchpad.net/juju-core/container/kvm/mock 0.042s
? launchpad.net/juju-core/container/kvm/testing [no test files]
ok launchpad.net/juju-core/container/lxc 0.213s
? launchpad.net/juju-core/container/lxc/mock [no test files]
? launchpad.net/juju-core/container/lxc/testing [no test files]
? launchpad.net/juju-core/container/testing [no test files]
ok launchpad.net/juju-core/downloader 5.238s
ok launchpad.net/juju-core/environs 1.997s
ok launchpad.net/juju-core/environs/bootstrap 3.449s
ok launchpad.net/juju-core/environs/cloudinit 0.481s
ok launchpad.net/juju-core/environs/config 3.433s
ok launchpad.net/juju-core/environs/configstore 0.029s
ok launchpad.net/juju-core/environs/filestorage 0.026s
ok launchpad.net/juju-core/environs/httpstorage 0.637s
ok launchpad.net/juju-core/environs/imagemetadata 0.464s
? launchpad.net/juju-core/environs/imagemetadata/testing [no test files]
ok launchpad.net/juju-core/environs/instances 0.048s
ok launchpad.net/juju-core/environs/jujutest 0.195s
ok launchpad.net/juju-core/environs/manual 11.397s
ok launchpad.net/juju-core/environs/simplestreams 0.270s
? launchpad.net/juju-core/environs/simplestreams/testing [no test files]
ok launchpad.net/juju-core/environs/sshstorage 0.963s
ok launchpad.net/juju-core/environs/storage 0.922s
ok launchpad.net/juju-core/environs/sync 24.800s
ok launchpad.net/juju-core/environs/testing 0.217s
ok launchpad.net/juju-core/environs/tools 4.661s
? launchpad.net/juju-core/environs/tools/testing [no test files]
ok launchpad.net/juju-core/errors 0.012s
ok launchpad.net/juju-core/instance 0.018s
? launchpad.net/juju-core/instance/testing [no test files]
ok launchpad.net/juju-core/juju 18.963s
ok launchpad.net/juju-core/juju/osenv 0.015s
? launchp...

Revision history for this message
Go Bot (go-bot) wrote :
Download full text (9.8 KiB)

The attempt to merge lp:~thumper/juju-core/fast-lxc into lp:juju-core failed. Below is the output from the failed tests.

ok launchpad.net/juju-core 0.014s
ok launchpad.net/juju-core/agent 1.084s
ok launchpad.net/juju-core/agent/mongo 0.508s
ok launchpad.net/juju-core/agent/tools 0.162s
ok launchpad.net/juju-core/bzr 5.292s
ok launchpad.net/juju-core/cert 3.086s
ok launchpad.net/juju-core/charm 0.428s
? launchpad.net/juju-core/charm/hooks [no test files]
? launchpad.net/juju-core/charm/testing [no test files]
ok launchpad.net/juju-core/cloudinit 0.029s
ok launchpad.net/juju-core/cloudinit/sshinit 0.775s
ok launchpad.net/juju-core/cmd 0.184s
ok launchpad.net/juju-core/cmd/charm-admin 0.754s
? launchpad.net/juju-core/cmd/charmd [no test files]
? launchpad.net/juju-core/cmd/charmload [no test files]
ok launchpad.net/juju-core/cmd/juju 201.326s
ok launchpad.net/juju-core/cmd/jujud 62.820s
ok launchpad.net/juju-core/cmd/plugins/juju-metadata 8.784s
? launchpad.net/juju-core/cmd/plugins/juju-restore [no test files]
ok launchpad.net/juju-core/cmd/plugins/local 0.159s
? launchpad.net/juju-core/cmd/plugins/local/juju-local [no test files]
ok launchpad.net/juju-core/constraints 0.020s
ok launchpad.net/juju-core/container 0.042s
ok launchpad.net/juju-core/container/factory 0.041s
ok launchpad.net/juju-core/container/kvm 0.156s
ok launchpad.net/juju-core/container/kvm/mock 0.046s
? launchpad.net/juju-core/container/kvm/testing [no test files]
ok launchpad.net/juju-core/container/lxc 0.272s
? launchpad.net/juju-core/container/lxc/mock [no test files]
? launchpad.net/juju-core/container/lxc/testing [no test files]
? launchpad.net/juju-core/container/testing [no test files]
ok launchpad.net/juju-core/downloader 5.223s
ok launchpad.net/juju-core/environs 2.326s
ok launchpad.net/juju-core/environs/bootstrap 3.345s
ok launchpad.net/juju-core/environs/cloudinit 0.478s
ok launchpad.net/juju-core/environs/config 1.805s
ok launchpad.net/juju-core/environs/configstore 0.029s
ok launchpad.net/juju-core/environs/filestorage 0.026s
ok launchpad.net/juju-core/environs/httpstorage 0.697s
ok launchpad.net/juju-core/environs/imagemetadata 0.462s
? launchpad.net/juju-core/environs/imagemetadata/testing [no test files]
ok launchpad.net/juju-core/environs/instances 0.045s
ok launchpad.net/juju-core/environs/jujutest 0.174s
ok launchpad.net/juju-core/environs/manual 10.117s
ok launchpad.net/juju-core/environs/simplestreams 0.244s
? launchpad.net/juju-core/environs/simplestreams/testing [no test files]
ok launchpad.net/juju-core/environs/sshstorage 0.880s
ok launchpad.net/juju-core/environs/storage 0.767s
ok launchpad.net/juju-core/environs/sync 24.043s
ok launchpad.net/juju-core/environs/testing 0.186s
ok launchpad.net/juju-core/environs/tools 4.758s
? launchpad.net/juju-core/environs/tools/testing [no test files]
ok launchpad.net/juju-core/errors 0.011s
ok launchpad.net/juju-core/instance 0.018s
? launchpad.net/juju-core/instance/testing [no test files]
ok launchpad.net/juju-core/juju 19.138s
ok launchpad.net/juju-core/juju/osenv 0.015s
? launchp...

Revision history for this message
Go Bot (go-bot) wrote :
Download full text (9.8 KiB)

The attempt to merge lp:~thumper/juju-core/fast-lxc into lp:juju-core failed. Below is the output from the failed tests.

ok launchpad.net/juju-core 0.013s
ok launchpad.net/juju-core/agent 1.054s
ok launchpad.net/juju-core/agent/mongo 0.494s
ok launchpad.net/juju-core/agent/tools 0.214s
ok launchpad.net/juju-core/bzr 5.413s
ok launchpad.net/juju-core/cert 2.831s
ok launchpad.net/juju-core/charm 0.389s
? launchpad.net/juju-core/charm/hooks [no test files]
? launchpad.net/juju-core/charm/testing [no test files]
ok launchpad.net/juju-core/cloudinit 0.029s
ok launchpad.net/juju-core/cloudinit/sshinit 0.818s
ok launchpad.net/juju-core/cmd 0.167s
ok launchpad.net/juju-core/cmd/charm-admin 0.723s
? launchpad.net/juju-core/cmd/charmd [no test files]
? launchpad.net/juju-core/cmd/charmload [no test files]
ok launchpad.net/juju-core/cmd/juju 202.278s
ok launchpad.net/juju-core/cmd/jujud 63.134s
ok launchpad.net/juju-core/cmd/plugins/juju-metadata 13.152s
? launchpad.net/juju-core/cmd/plugins/juju-restore [no test files]
ok launchpad.net/juju-core/cmd/plugins/local 0.175s
? launchpad.net/juju-core/cmd/plugins/local/juju-local [no test files]
ok launchpad.net/juju-core/constraints 0.034s
ok launchpad.net/juju-core/container 0.043s
ok launchpad.net/juju-core/container/factory 0.041s
ok launchpad.net/juju-core/container/kvm 0.237s
ok launchpad.net/juju-core/container/kvm/mock 0.055s
? launchpad.net/juju-core/container/kvm/testing [no test files]
ok launchpad.net/juju-core/container/lxc 0.258s
? launchpad.net/juju-core/container/lxc/mock [no test files]
? launchpad.net/juju-core/container/lxc/testing [no test files]
? launchpad.net/juju-core/container/testing [no test files]
ok launchpad.net/juju-core/downloader 5.244s
ok launchpad.net/juju-core/environs 2.506s
ok launchpad.net/juju-core/environs/bootstrap 3.394s
ok launchpad.net/juju-core/environs/cloudinit 0.419s
ok launchpad.net/juju-core/environs/config 1.743s
ok launchpad.net/juju-core/environs/configstore 0.028s
ok launchpad.net/juju-core/environs/filestorage 0.026s
ok launchpad.net/juju-core/environs/httpstorage 0.649s
ok launchpad.net/juju-core/environs/imagemetadata 0.412s
? launchpad.net/juju-core/environs/imagemetadata/testing [no test files]
ok launchpad.net/juju-core/environs/instances 0.043s
ok launchpad.net/juju-core/environs/jujutest 0.191s
ok launchpad.net/juju-core/environs/manual 10.697s
ok launchpad.net/juju-core/environs/simplestreams 0.222s
? launchpad.net/juju-core/environs/simplestreams/testing [no test files]
ok launchpad.net/juju-core/environs/sshstorage 1.032s
ok launchpad.net/juju-core/environs/storage 0.884s
ok launchpad.net/juju-core/environs/sync 24.045s
ok launchpad.net/juju-core/environs/testing 0.154s
ok launchpad.net/juju-core/environs/tools 4.774s
? launchpad.net/juju-core/environs/tools/testing [no test files]
ok launchpad.net/juju-core/errors 0.011s
ok launchpad.net/juju-core/instance 0.016s
? launchpad.net/juju-core/instance/testing [no test files]
ok launchpad.net/juju-core/juju 19.602s
ok launchpad.net/juju-core/juju/osenv 0.015s
? launch...

Revision history for this message
Go Bot (go-bot) wrote :
Download full text (13.6 KiB)

The attempt to merge lp:~thumper/juju-core/fast-lxc into lp:juju-core failed. Below is the output from the failed tests.

ok launchpad.net/juju-core 0.014s
ok launchpad.net/juju-core/agent 1.037s
ok launchpad.net/juju-core/agent/mongo 0.616s
ok launchpad.net/juju-core/agent/tools 0.188s
ok launchpad.net/juju-core/bzr 5.307s
ok launchpad.net/juju-core/cert 2.717s
ok launchpad.net/juju-core/charm 0.428s
? launchpad.net/juju-core/charm/hooks [no test files]
? launchpad.net/juju-core/charm/testing [no test files]
ok launchpad.net/juju-core/cloudinit 0.029s
ok launchpad.net/juju-core/cloudinit/sshinit 0.788s
ok launchpad.net/juju-core/cmd 0.170s
ok launchpad.net/juju-core/cmd/charm-admin 0.722s
? launchpad.net/juju-core/cmd/charmd [no test files]
? launchpad.net/juju-core/cmd/charmload [no test files]
ok launchpad.net/juju-core/cmd/juju 201.091s
ok launchpad.net/juju-core/cmd/jujud 64.791s
ok launchpad.net/juju-core/cmd/plugins/juju-metadata 9.034s
? launchpad.net/juju-core/cmd/plugins/juju-restore [no test files]
ok launchpad.net/juju-core/cmd/plugins/local 0.217s
? launchpad.net/juju-core/cmd/plugins/local/juju-local [no test files]
ok launchpad.net/juju-core/constraints 0.020s
ok launchpad.net/juju-core/container 0.041s
ok launchpad.net/juju-core/container/factory 0.052s
ok launchpad.net/juju-core/container/kvm 0.199s
ok launchpad.net/juju-core/container/kvm/mock 0.049s
? launchpad.net/juju-core/container/kvm/testing [no test files]
ok launchpad.net/juju-core/container/lxc 0.197s
? launchpad.net/juju-core/container/lxc/mock [no test files]
? launchpad.net/juju-core/container/lxc/testing [no test files]
? launchpad.net/juju-core/container/testing [no test files]
ok launchpad.net/juju-core/downloader 5.234s
ok launchpad.net/juju-core/environs 2.586s
ok launchpad.net/juju-core/environs/bootstrap 3.348s
ok launchpad.net/juju-core/environs/cloudinit 0.494s
ok launchpad.net/juju-core/environs/config 4.956s
ok launchpad.net/juju-core/environs/configstore 0.035s
ok launchpad.net/juju-core/environs/filestorage 0.026s
ok launchpad.net/juju-core/environs/httpstorage 0.740s
ok launchpad.net/juju-core/environs/imagemetadata 0.430s
? launchpad.net/juju-core/environs/imagemetadata/testing [no test files]
ok launchpad.net/juju-core/environs/instances 0.045s
ok launchpad.net/juju-core/environs/jujutest 0.197s
ok launchpad.net/juju-core/environs/manual 8.965s
ok launchpad.net/juju-core/environs/simplestreams 0.340s
? launchpad.net/juju-core/environs/simplestreams/testing [no test files]
ok launchpad.net/juju-core/environs/sshstorage 0.968s
ok launchpad.net/juju-core/environs/storage 0.879s
ok launchpad.net/juju-core/environs/sync 24.882s
ok launchpad.net/juju-core/environs/testing 0.158s
ok launchpad.net/juju-core/environs/tools 4.785s
? launchpad.net/juju-core/environs/tools/testing [no test files]
ok launchpad.net/juju-core/errors 0.013s
ok launchpad.net/juju-core/instance 0.020s
? launchpad.net/juju-core/instance/testing [no test files]
ok launchpad.net/juju-core/juju 18.713s
ok launchpad.net/juju-core/juju/osenv 0.015s
? launchpa...

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'provider/local/environ.go'
--- provider/local/environ.go 2014-03-07 15:56:55 +0000
+++ provider/local/environ.go 2014-03-11 01:19:21 +0000
@@ -1,4 +1,4 @@
1// Copyright 2013 Canonical Ltd.1// Copyright 2013, 2014 Canonical Ltd.
2// Licensed under the AGPLv3, see LICENCE file for details.2// Licensed under the AGPLv3, see LICENCE file for details.
33
4package local4package local
@@ -60,6 +60,7 @@
60 localStorage storage.Storage60 localStorage storage.Storage
61 storageListener net.Listener61 storageListener net.Listener
62 containerManager container.Manager62 containerManager container.Manager
63 fastLXC bool
63}64}
6465
65// GetToolsSources returns a list of sources which are used to search for simplestreams tools metadata.66// GetToolsSources returns a list of sources which are used to search for simplestreams tools metadata.
@@ -210,9 +211,11 @@
210 defer env.localMutex.Unlock()211 defer env.localMutex.Unlock()
211 env.config = ecfg212 env.config = ecfg
212 env.name = ecfg.Name()213 env.name = ecfg.Name()
214 containerType := ecfg.container()
215 env.fastLXC = useFastLXC(containerType)
213216
214 env.containerManager, err = factory.NewContainerManager(217 env.containerManager, err = factory.NewContainerManager(
215 ecfg.container(),218 containerType,
216 container.ManagerConfig{219 container.ManagerConfig{
217 container.ConfigName: env.config.namespace(),220 container.ConfigName: env.config.namespace(),
218 container.ConfigLogDir: env.config.logDir(),221 container.ConfigLogDir: env.config.logDir(),
219222
=== modified file 'provider/local/export_test.go'
--- provider/local/export_test.go 2014-02-14 04:26:21 +0000
+++ provider/local/export_test.go 2014-03-11 01:19:21 +0000
@@ -10,11 +10,14 @@
10)10)
1111
12var (12var (
13 Provider = providerInstance13 CheckLocalPort = &checkLocalPort
14 FinishBootstrap = &finishBootstrap14 DetectAptProxies = &detectAptProxies
15 CheckLocalPort = &checkLocalPort15 EnvKeyTestingForceSlow = envKeyTestingForceSlow
16 DetectAptProxies = &detectAptProxies16 FinishBootstrap = &finishBootstrap
17 UserCurrent = &userCurrent17 Provider = providerInstance
18 ReleaseVersion = &releaseVersion
19 UseFastLXC = useFastLXC
20 UserCurrent = &userCurrent
18)21)
1922
20// SetRootCheckFunction allows tests to override the check for a root user.23// SetRootCheckFunction allows tests to override the check for a root user.
2124
=== added file 'provider/local/lxc.go'
--- provider/local/lxc.go 1970-01-01 00:00:00 +0000
+++ provider/local/lxc.go 2014-03-11 01:19:21 +0000
@@ -0,0 +1,38 @@
1// Copyright 2014 Canonical Ltd.
2// Licensed under the AGPLv3, see LICENCE file for details.
3
4package local
5
6import (
7 "os"
8 "strconv"
9
10 "launchpad.net/juju-core/instance"
11 "launchpad.net/juju-core/version"
12)
13
14// envKeyTestingForceSlow is an environment variable name to force the slow
15// lxc path. Setting to any non-empty value will force the slow path.
16const envKeyTestingForceSlow = "JUJU_TESTING_LXC_FORCE_SLOW"
17
18// releaseVersion is a function that returns a string representing the
19// DISTRIB_RELEASE from the /etc/lsb-release file.
20var releaseVersion = version.ReleaseVersion
21
22func useFastLXC(containerType instance.ContainerType) bool {
23 if containerType != instance.LXC {
24 return false
25 }
26 if os.Getenv(envKeyTestingForceSlow) != "" {
27 return false
28 }
29 release := releaseVersion()
30 if release == "" {
31 return false
32 }
33 value, err := strconv.ParseFloat(release, 64)
34 if err != nil {
35 return false
36 }
37 return value >= 14.04
38}
039
=== added file 'provider/local/lxc_test.go'
--- provider/local/lxc_test.go 1970-01-01 00:00:00 +0000
+++ provider/local/lxc_test.go 2014-03-11 01:19:21 +0000
@@ -0,0 +1,59 @@
1// Copyright 2014 Canonical Ltd.
2// Licensed under the AGPLv3, see LICENCE file for details.
3
4package local_test
5
6import (
7 gc "launchpad.net/gocheck"
8
9 "launchpad.net/juju-core/instance"
10 "launchpad.net/juju-core/provider/local"
11 jc "launchpad.net/juju-core/testing/checkers"
12 "launchpad.net/juju-core/testing/testbase"
13)
14
15type lxcTest struct {
16 testbase.LoggingSuite
17}
18
19var _ = gc.Suite(&lxcTest{})
20
21func (*lxcTest) TestUseFastLXCForContainer(c *gc.C) {
22 c.Assert(local.UseFastLXC(instance.ContainerType("")), jc.IsFalse)
23 c.Assert(local.UseFastLXC(instance.KVM), jc.IsFalse)
24}
25
26func (t *lxcTest) TestUseFastLXC(c *gc.C) {
27 for i, test := range []struct {
28 message string
29 releaseVersion string
30 expected bool
31 overrideSlow string
32 }{{
33 message: "missing release file",
34 }, {
35 message: "precise release",
36 releaseVersion: "12.04",
37 }, {
38 message: "trusty release",
39 releaseVersion: "14.04",
40 expected: true,
41 }, {
42 message: "unstable unicorn",
43 releaseVersion: "14.10",
44 expected: true,
45 }, {
46 message: "jaunty",
47 releaseVersion: "9.10",
48 }, {
49 message: "env override",
50 releaseVersion: "14.04",
51 overrideSlow: "value",
52 }} {
53 c.Logf("%v: %v", i, test.message)
54 t.PatchValue(local.ReleaseVersion, func() string { return test.releaseVersion })
55 t.PatchEnvironment(local.EnvKeyTestingForceSlow, test.overrideSlow)
56 value := local.UseFastLXC(instance.LXC)
57 c.Assert(value, gc.Equals, test.expected)
58 }
59}
060
=== modified file 'version/export_test.go'
--- version/export_test.go 2013-09-04 13:24:57 +0000
+++ version/export_test.go 2014-03-11 01:19:21 +0000
@@ -3,4 +3,7 @@
33
4package version4package version
55
6var ReadSeries = readSeries6var (
7 ReadSeries = readSeries
8 LSBReleaseFileVar = &lsbReleaseFile
9)
710
=== modified file 'version/version.go'
--- version/version.go 2014-03-06 16:08:30 +0000
+++ version/version.go 2014-03-11 01:19:21 +0000
@@ -24,12 +24,16 @@
24// number of the release package.24// number of the release package.
25const version = "1.17.5"25const version = "1.17.5"
2626
27// lsbReleaseFile is the name of the file that is read in order to determine
28// the release version of ubuntu.
29var lsbReleaseFile = "/etc/lsb-release"
30
27// Current gives the current version of the system. If the file31// Current gives the current version of the system. If the file
28// "FORCE-VERSION" is present in the same directory as the running32// "FORCE-VERSION" is present in the same directory as the running
29// binary, it will override this.33// binary, it will override this.
30var Current = Binary{34var Current = Binary{
31 Number: MustParse(version),35 Number: MustParse(version),
32 Series: readSeries("/etc/lsb-release"),36 Series: readSeries(lsbReleaseFile),
33 Arch: ubuntuArch(runtime.GOARCH),37 Arch: ubuntuArch(runtime.GOARCH),
34}38}
3539
@@ -311,14 +315,31 @@
311 return "unknown"315 return "unknown"
312 }316 }
313 for _, line := range strings.Split(string(data), "\n") {317 for _, line := range strings.Split(string(data), "\n") {
314 const p = "DISTRIB_CODENAME="318 const prefix = "DISTRIB_CODENAME="
315 if strings.HasPrefix(line, p) {319 if strings.HasPrefix(line, prefix) {
316 return strings.Trim(line[len(p):], "\t '\"")320 return strings.Trim(line[len(prefix):], "\t '\"")
317 }321 }
318 }322 }
319 return "unknown"323 return "unknown"
320}324}
321325
326// ReleaseVersion looks for the value of DISTRIB_RELEASE in the content of
327// the lsbReleaseFile. If the value is not found, the file is not found, or
328// an error occurs reading the file, an empty string is returned.
329func ReleaseVersion() string {
330 content, err := ioutil.ReadFile(lsbReleaseFile)
331 if err != nil {
332 return ""
333 }
334 const prefix = "DISTRIB_RELEASE="
335 for _, line := range strings.Split(string(content), "\n") {
336 if strings.HasPrefix(line, prefix) {
337 return strings.Trim(line[len(prefix):], "\t '\"")
338 }
339 }
340 return ""
341}
342
322func ubuntuArch(arch string) string {343func ubuntuArch(arch string) string {
323 if arch == "386" {344 if arch == "386" {
324 arch = "i386"345 arch = "i386"
325346
=== modified file 'version/version_test.go'
--- version/version_test.go 2014-03-06 16:08:30 +0000
+++ version/version_test.go 2014-03-11 01:19:21 +0000
@@ -5,6 +5,8 @@
55
6import (6import (
7 "encoding/json"7 "encoding/json"
8 "io/ioutil"
9 "path/filepath"
8 "strings"10 "strings"
9 "testing"11 "testing"
1012
@@ -12,12 +14,15 @@
12 gc "launchpad.net/gocheck"14 gc "launchpad.net/gocheck"
13 "launchpad.net/goyaml"15 "launchpad.net/goyaml"
1416
17 "launchpad.net/juju-core/testing/testbase"
15 "launchpad.net/juju-core/version"18 "launchpad.net/juju-core/version"
16)19)
1720
18type suite struct{}21type suite struct {
22 testbase.LoggingSuite
23}
1924
20var _ = gc.Suite(suite{})25var _ = gc.Suite(&suite{})
2126
22func Test(t *testing.T) {27func Test(t *testing.T) {
23 gc.TestingT(t)28 gc.TestingT(t)
@@ -44,7 +49,7 @@
44 {"2.0.1.10", "2.0.0.0", 1},49 {"2.0.1.10", "2.0.0.0", 1},
45}50}
4651
47func (suite) TestCompare(c *gc.C) {52func (*suite) TestCompare(c *gc.C) {
48 for i, test := range cmpTests {53 for i, test := range cmpTests {
49 c.Logf("test %d", i)54 c.Logf("test %d", i)
50 v1, err := version.Parse(test.v1)55 v1, err := version.Parse(test.v1)
@@ -106,7 +111,7 @@
106 err: "invalid version.*",111 err: "invalid version.*",
107}}112}}
108113
109func (suite) TestParse(c *gc.C) {114func (*suite) TestParse(c *gc.C) {
110 for i, test := range parseTests {115 for i, test := range parseTests {
111 c.Logf("test %d", i)116 c.Logf("test %d", i)
112 got, err := version.Parse(test.v)117 got, err := version.Parse(test.v)
@@ -152,7 +157,7 @@
152 err: "invalid binary version.*",157 err: "invalid binary version.*",
153}}158}}
154159
155func (suite) TestParseBinary(c *gc.C) {160func (*suite) TestParseBinary(c *gc.C) {
156 for i, test := range parseBinaryTests {161 for i, test := range parseBinaryTests {
157 c.Logf("test 1: %d", i)162 c.Logf("test 1: %d", i)
158 got, err := version.ParseBinary(test.v)163 got, err := version.ParseBinary(test.v)
@@ -201,7 +206,7 @@
201 goyaml.Unmarshal,206 goyaml.Unmarshal,
202}}207}}
203208
204func (suite) TestBinaryMarshalUnmarshal(c *gc.C) {209func (*suite) TestBinaryMarshalUnmarshal(c *gc.C) {
205 for _, m := range marshallers {210 for _, m := range marshallers {
206 c.Logf("encoding %v", m.name)211 c.Logf("encoding %v", m.name)
207 type doc struct {212 type doc struct {
@@ -220,7 +225,7 @@
220 }225 }
221}226}
222227
223func (suite) TestNumberMarshalUnmarshal(c *gc.C) {228func (*suite) TestNumberMarshalUnmarshal(c *gc.C) {
224 for _, m := range marshallers {229 for _, m := range marshallers {
225 c.Logf("encoding %v", m.name)230 c.Logf("encoding %v", m.name)
226 type doc struct {231 type doc struct {
@@ -260,7 +265,7 @@
260 err: `invalid major version number blah: strconv.ParseInt: parsing "blah": invalid syntax`,265 err: `invalid major version number blah: strconv.ParseInt: parsing "blah": invalid syntax`,
261}}266}}
262267
263func (suite) TestParseMajorMinor(c *gc.C) {268func (*suite) TestParseMajorMinor(c *gc.C) {
264 for i, test := range parseMajorMinorTests {269 for i, test := range parseMajorMinorTests {
265 c.Logf("test %d", i)270 c.Logf("test %d", i)
266 major, minor, err := version.ParseMajorMinor(test.v)271 major, minor, err := version.ParseMajorMinor(test.v)
@@ -273,3 +278,56 @@
273 }278 }
274 }279 }
275}280}
281
282func (s *suite) TestUseFastLXC(c *gc.C) {
283 for i, test := range []struct {
284 message string
285 releaseContent string
286 expected string
287 }{{
288 message: "missing release file",
289 }, {
290 message: "missing prefix in file",
291 releaseContent: "some junk\nand more junk",
292 }, {
293 message: "precise release",
294 releaseContent: `
295DISTRIB_ID=Ubuntu
296DISTRIB_RELEASE=12.04
297DISTRIB_CODENAME=precise
298DISTRIB_DESCRIPTION="Ubuntu 12.04.3 LTS"
299`,
300 expected: "12.04",
301 }, {
302 message: "trusty release",
303 releaseContent: `
304DISTRIB_ID=Ubuntu
305DISTRIB_RELEASE=14.04
306DISTRIB_CODENAME=trusty
307DISTRIB_DESCRIPTION="Ubuntu Trusty Tahr (development branch)"
308`,
309 expected: "14.04",
310 }, {
311 message: "minimal trusty release",
312 releaseContent: `DISTRIB_RELEASE=14.04`,
313 expected: "14.04",
314 }, {
315 message: "minimal unstable unicorn",
316 releaseContent: `DISTRIB_RELEASE=14.10`,
317 expected: "14.10",
318 }, {
319 message: "minimal jaunty",
320 releaseContent: `DISTRIB_RELEASE=9.10`,
321 expected: "9.10",
322 }} {
323 c.Logf("%v: %v", i, test.message)
324 filename := filepath.Join(c.MkDir(), "lsbRelease")
325 s.PatchValue(version.LSBReleaseFileVar, filename)
326 if test.releaseContent != "" {
327 err := ioutil.WriteFile(filename, []byte(test.releaseContent+"\n"), 0644)
328 c.Assert(err, gc.IsNil)
329 }
330 value := version.ReleaseVersion()
331 c.Assert(value, gc.Equals, test.expected)
332 }
333}

Subscribers

People subscribed via source and target branches

to status/vote changes: