1
// Copyright 2012, 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
10
"github.com/juju/errors"
11
jc "github.com/juju/testing/checkers"
12
jujutxn "github.com/juju/txn"
13
"github.com/juju/utils/set"
14
"github.com/juju/version"
15
gc "gopkg.in/check.v1"
16
"gopkg.in/juju/blobstore.v2"
19
"github.com/juju/juju/state"
20
"github.com/juju/juju/state/binarystorage"
21
"github.com/juju/juju/tools"
24
type tooler interface {
26
AgentTools() (*tools.Tools, error)
27
SetAgentVersion(v version.Binary) error
31
func testAgentTools(c *gc.C, obj tooler, agent string) {
32
// object starts with zero'd tools.
33
t, err := obj.AgentTools()
35
c.Assert(err, jc.Satisfies, errors.IsNotFound)
37
err = obj.SetAgentVersion(version.Binary{})
38
c.Assert(err, gc.ErrorMatches, fmt.Sprintf("cannot set agent version for %s: empty series or arch", agent))
40
v2 := version.MustParseBinary("7.8.9-quantal-amd64")
41
err = obj.SetAgentVersion(v2)
42
c.Assert(err, jc.ErrorIsNil)
43
t3, err := obj.AgentTools()
44
c.Assert(err, jc.ErrorIsNil)
45
c.Assert(t3.Version, gc.DeepEquals, v2)
47
c.Assert(err, jc.ErrorIsNil)
48
t3, err = obj.AgentTools()
49
c.Assert(err, jc.ErrorIsNil)
50
c.Assert(t3.Version, gc.DeepEquals, v2)
52
testWhenDying(c, obj, noErr, deadErr, func() error {
53
return obj.SetAgentVersion(v2)
57
type binaryStorageSuite struct {
61
var _ = gc.Suite(&binaryStorageSuite{})
63
type storageOpener func() (binarystorage.StorageCloser, error)
65
func (s *binaryStorageSuite) TestToolsStorage(c *gc.C) {
66
s.testStorage(c, "toolsmetadata", s.State.ToolsStorage)
69
func (s *binaryStorageSuite) TestToolsStorageParams(c *gc.C) {
70
s.testStorageParams(c, "toolsmetadata", s.State.ToolsStorage)
73
func (s *binaryStorageSuite) TestGUIArchiveStorage(c *gc.C) {
74
s.testStorage(c, "guimetadata", s.State.GUIStorage)
77
func (s *binaryStorageSuite) TestGUIArchiveStorageParams(c *gc.C) {
78
s.testStorageParams(c, "guimetadata", s.State.GUIStorage)
81
func (s *binaryStorageSuite) testStorage(c *gc.C, collName string, openStorage storageOpener) {
82
session := s.State.MongoSession()
83
collectionNames, err := session.DB("juju").CollectionNames()
84
c.Assert(err, jc.ErrorIsNil)
85
nameSet := set.NewStrings(collectionNames...)
86
c.Assert(nameSet.Contains(collName), jc.IsFalse)
88
storage, err := openStorage()
89
c.Assert(err, jc.ErrorIsNil)
91
err := storage.Close()
92
c.Assert(err, jc.ErrorIsNil)
95
err = storage.Add(strings.NewReader(""), binarystorage.Metadata{})
96
c.Assert(err, jc.ErrorIsNil)
98
collectionNames, err = session.DB("juju").CollectionNames()
99
c.Assert(err, jc.ErrorIsNil)
100
nameSet = set.NewStrings(collectionNames...)
101
c.Assert(nameSet.Contains(collName), jc.IsTrue)
104
func (s *binaryStorageSuite) testStorageParams(c *gc.C, collName string, openStorage storageOpener) {
105
env, err := s.State.Model()
106
c.Assert(err, jc.ErrorIsNil)
109
s.PatchValue(state.BinarystorageNew, func(
111
managedStorage blobstore.ManagedStorage,
112
metadataCollection *mgo.Collection,
113
runner jujutxn.Runner,
114
) binarystorage.Storage {
116
c.Assert(modelUUID, gc.Equals, env.UUID())
117
c.Assert(managedStorage, gc.NotNil)
118
c.Assert(metadataCollection.Name, gc.Equals, collName)
119
c.Assert(runner, gc.NotNil)
123
storage, err := openStorage()
124
c.Assert(err, jc.ErrorIsNil)
126
c.Assert(called, jc.IsTrue)