~juju-qa/ubuntu/xenial/juju/xenial-2.0-beta3

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/state/binarystorage_test.go

  • Committer: Martin Packman
  • Date: 2016-03-30 19:31:08 UTC
  • mfrom: (1.1.41)
  • Revision ID: martin.packman@canonical.com-20160330193108-h9iz3ak334uk0z5r
Merge new upstream source 2.0~beta3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2012, 2013 Canonical Ltd.
 
2
// Licensed under the AGPLv3, see LICENCE file for details.
 
3
 
 
4
package state_test
 
5
 
 
6
import (
 
7
        "fmt"
 
8
        "strings"
 
9
 
 
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"
 
17
        "gopkg.in/mgo.v2"
 
18
 
 
19
        "github.com/juju/juju/state"
 
20
        "github.com/juju/juju/state/binarystorage"
 
21
        "github.com/juju/juju/tools"
 
22
)
 
23
 
 
24
type tooler interface {
 
25
        lifer
 
26
        AgentTools() (*tools.Tools, error)
 
27
        SetAgentVersion(v version.Binary) error
 
28
        Refresh() error
 
29
}
 
30
 
 
31
func testAgentTools(c *gc.C, obj tooler, agent string) {
 
32
        // object starts with zero'd tools.
 
33
        t, err := obj.AgentTools()
 
34
        c.Assert(t, gc.IsNil)
 
35
        c.Assert(err, jc.Satisfies, errors.IsNotFound)
 
36
 
 
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))
 
39
 
 
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)
 
46
        err = obj.Refresh()
 
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)
 
51
 
 
52
        testWhenDying(c, obj, noErr, deadErr, func() error {
 
53
                return obj.SetAgentVersion(v2)
 
54
        })
 
55
}
 
56
 
 
57
type binaryStorageSuite struct {
 
58
        ConnSuite
 
59
}
 
60
 
 
61
var _ = gc.Suite(&binaryStorageSuite{})
 
62
 
 
63
type storageOpener func() (binarystorage.StorageCloser, error)
 
64
 
 
65
func (s *binaryStorageSuite) TestToolsStorage(c *gc.C) {
 
66
        s.testStorage(c, "toolsmetadata", s.State.ToolsStorage)
 
67
}
 
68
 
 
69
func (s *binaryStorageSuite) TestToolsStorageParams(c *gc.C) {
 
70
        s.testStorageParams(c, "toolsmetadata", s.State.ToolsStorage)
 
71
}
 
72
 
 
73
func (s *binaryStorageSuite) TestGUIArchiveStorage(c *gc.C) {
 
74
        s.testStorage(c, "guimetadata", s.State.GUIStorage)
 
75
}
 
76
 
 
77
func (s *binaryStorageSuite) TestGUIArchiveStorageParams(c *gc.C) {
 
78
        s.testStorageParams(c, "guimetadata", s.State.GUIStorage)
 
79
}
 
80
 
 
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)
 
87
 
 
88
        storage, err := openStorage()
 
89
        c.Assert(err, jc.ErrorIsNil)
 
90
        defer func() {
 
91
                err := storage.Close()
 
92
                c.Assert(err, jc.ErrorIsNil)
 
93
        }()
 
94
 
 
95
        err = storage.Add(strings.NewReader(""), binarystorage.Metadata{})
 
96
        c.Assert(err, jc.ErrorIsNil)
 
97
 
 
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)
 
102
}
 
103
 
 
104
func (s *binaryStorageSuite) testStorageParams(c *gc.C, collName string, openStorage storageOpener) {
 
105
        env, err := s.State.Model()
 
106
        c.Assert(err, jc.ErrorIsNil)
 
107
 
 
108
        var called bool
 
109
        s.PatchValue(state.BinarystorageNew, func(
 
110
                modelUUID string,
 
111
                managedStorage blobstore.ManagedStorage,
 
112
                metadataCollection *mgo.Collection,
 
113
                runner jujutxn.Runner,
 
114
        ) binarystorage.Storage {
 
115
                called = true
 
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)
 
120
                return nil
 
121
        })
 
122
 
 
123
        storage, err := openStorage()
 
124
        c.Assert(err, jc.ErrorIsNil)
 
125
        storage.Close()
 
126
        c.Assert(called, jc.IsTrue)
 
127
}