11
11
jc "github.com/juju/testing/checkers"
12
12
"github.com/juju/utils/arch"
13
13
"github.com/juju/utils/series"
14
"github.com/juju/version"
14
15
gc "gopkg.in/check.v1"
16
17
"github.com/juju/juju/apiserver/common"
20
21
"github.com/juju/juju/juju/testing"
21
22
"github.com/juju/juju/network"
22
23
"github.com/juju/juju/state"
23
"github.com/juju/juju/state/toolstorage"
24
"github.com/juju/juju/state/binarystorage"
24
25
coretools "github.com/juju/juju/tools"
25
"github.com/juju/juju/version"
26
jujuversion "github.com/juju/juju/version"
28
29
type toolsSuite struct {
33
34
var _ = gc.Suite(&toolsSuite{})
35
36
var current = version.Binary{
36
Number: version.Current,
37
Number: jujuversion.Current,
37
38
Arch: arch.HostArch(),
38
39
Series: series.HostSeries(),
159
160
Version: version.MustParseBinary("123.456.1-win81-alpha"),
162
storageMetadata := []toolstorage.Metadata{{
163
Version: version.MustParseBinary("123.456.0-win81-alpha"),
163
storageMetadata := []binarystorage.Metadata{{
164
Version: "123.456.0-win81-alpha",
165
166
SHA256: "feedface",
184
185
c.Assert(result.Error, gc.IsNil)
185
186
c.Assert(result.List, gc.DeepEquals, coretools.List{
186
187
&coretools.Tools{
187
Version: storageMetadata[0].Version,
188
Version: version.MustParseBinary(storageMetadata[0].Version),
188
189
Size: storageMetadata[0].Size,
189
190
SHA256: storageMetadata[0].SHA256,
190
URL: "tools:" + storageMetadata[0].Version.String(),
191
URL: "tools:" + storageMetadata[0].Version,
206
207
func (s *toolsSuite) TestFindToolsExactInStorage(c *gc.C) {
207
208
mockToolsStorage := &mockToolsStorage{
208
metadata: []toolstorage.Metadata{
209
{Version: version.MustParseBinary("1.22-beta1-trusty-amd64")},
210
{Version: version.MustParseBinary("1.22.0-trusty-amd64")},
209
metadata: []binarystorage.Metadata{
210
{Version: "1.22-beta1-trusty-amd64"},
211
{Version: "1.22.0-trusty-amd64"},
214
215
s.PatchValue(&arch.HostArch, func() string { return arch.AMD64 })
215
216
s.PatchValue(&series.HostSeries, func() string { return "trusty" })
216
s.PatchValue(&version.Current, version.MustParseBinary("1.22-beta1-trusty-amd64").Number)
217
s.PatchValue(&jujuversion.Current, version.MustParseBinary("1.22-beta1-trusty-amd64").Number)
217
218
s.testFindToolsExact(c, mockToolsStorage, true, true)
218
s.PatchValue(&version.Current, version.MustParseBinary("1.22.0-trusty-amd64").Number)
219
s.PatchValue(&jujuversion.Current, version.MustParseBinary("1.22.0-trusty-amd64").Number)
219
220
s.testFindToolsExact(c, mockToolsStorage, true, false)
222
223
func (s *toolsSuite) TestFindToolsExactNotInStorage(c *gc.C) {
223
224
mockToolsStorage := &mockToolsStorage{}
224
s.PatchValue(&version.Current, version.MustParse("1.22-beta1"))
225
s.PatchValue(&jujuversion.Current, version.MustParse("1.22-beta1"))
225
226
s.testFindToolsExact(c, mockToolsStorage, false, true)
226
s.PatchValue(&version.Current, version.MustParse("1.22.0"))
227
s.PatchValue(&jujuversion.Current, version.MustParse("1.22.0"))
227
228
s.testFindToolsExact(c, mockToolsStorage, false, false)
232
233
s.PatchValue(common.EnvtoolsFindTools, func(e environs.Environ, major, minor int, stream string, filter coretools.Filter) (list coretools.List, err error) {
234
c.Assert(filter.Number, gc.Equals, version.Current)
235
c.Assert(filter.Number, gc.Equals, jujuversion.Current)
235
236
c.Assert(filter.Series, gc.Equals, series.HostSeries())
236
237
c.Assert(filter.Arch, gc.Equals, arch.HostArch())
237
238
if develVersion {
244
245
toolsFinder := common.NewToolsFinder(s.State, t, sprintfURLGetter("tools:%s"))
245
246
result, err := toolsFinder.FindTools(params.FindToolsParams{
246
Number: version.Current,
247
Number: jujuversion.Current,
247
248
MajorVersion: -1,
248
249
MinorVersion: -1,
249
250
Series: series.HostSeries(),
321
322
type mockToolsStorage struct {
323
metadata []toolstorage.Metadata
323
binarystorage.Storage
324
metadata []binarystorage.Metadata
327
func (s *mockToolsStorage) ToolsStorage() (toolstorage.StorageCloser, error) {
328
func (s *mockToolsStorage) ToolsStorage() (binarystorage.StorageCloser, error) {