~ubuntu-branches/ubuntu/vivid/juju-core/vivid-proposed

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/cmd/juju/storage/show_test.go

  • Committer: Package Import Robot
  • Author(s): Curtis C. Hovey
  • Date: 2015-09-29 19:43:29 UTC
  • mfrom: (47.1.4 wily-proposed)
  • Revision ID: package-import@ubuntu.com-20150929194329-9y496tbic30hc7vp
Tags: 1.24.6-0ubuntu1~15.04.1
Backport of 1.24.6 from wily. (LP: #1500916, #1497087)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2015 Canonical Ltd.
 
2
// Licensed under the AGPLv3, see LICENCE file for details.
 
3
 
 
4
package storage_test
 
5
 
 
6
import (
 
7
        "strings"
 
8
 
 
9
        "github.com/juju/cmd"
 
10
        "github.com/juju/names"
 
11
        jc "github.com/juju/testing/checkers"
 
12
        gc "gopkg.in/check.v1"
 
13
 
 
14
        "github.com/juju/juju/apiserver/params"
 
15
        "github.com/juju/juju/cmd/envcmd"
 
16
        "github.com/juju/juju/cmd/juju/storage"
 
17
        _ "github.com/juju/juju/provider/dummy"
 
18
        "github.com/juju/juju/testing"
 
19
)
 
20
 
 
21
type ShowSuite struct {
 
22
        SubStorageSuite
 
23
        mockAPI *mockShowAPI
 
24
}
 
25
 
 
26
var _ = gc.Suite(&ShowSuite{})
 
27
 
 
28
func (s *ShowSuite) SetUpTest(c *gc.C) {
 
29
        s.SubStorageSuite.SetUpTest(c)
 
30
 
 
31
        s.mockAPI = &mockShowAPI{}
 
32
        s.PatchValue(storage.GetStorageShowAPI, func(c *storage.ShowCommand) (storage.StorageShowAPI, error) {
 
33
                return s.mockAPI, nil
 
34
        })
 
35
 
 
36
}
 
37
 
 
38
func runShow(c *gc.C, args []string) (*cmd.Context, error) {
 
39
        return testing.RunCommand(c, envcmd.Wrap(&storage.ShowCommand{}), args...)
 
40
}
 
41
 
 
42
func (s *ShowSuite) TestShowNoMatch(c *gc.C) {
 
43
        s.mockAPI.noMatch = true
 
44
        s.assertValidShow(
 
45
                c,
 
46
                []string{"fluff/0"},
 
47
                `
 
48
{}
 
49
`[1:],
 
50
        )
 
51
}
 
52
 
 
53
func (s *ShowSuite) TestShow(c *gc.C) {
 
54
        s.assertValidShow(
 
55
                c,
 
56
                []string{"shared-fs/0"},
 
57
                // Default format is yaml
 
58
                `
 
59
postgresql/0:
 
60
  shared-fs/0:
 
61
    storage: shared-fs
 
62
    kind: block
 
63
    status: pending
 
64
    persistent: false
 
65
transcode/0:
 
66
  shared-fs/0:
 
67
    storage: shared-fs
 
68
    kind: filesystem
 
69
    status: attached
 
70
    persistent: false
 
71
    location: a location
 
72
`[1:],
 
73
        )
 
74
}
 
75
 
 
76
func (s *ShowSuite) TestShowInvalidId(c *gc.C) {
 
77
        _, err := runShow(c, []string{"foo"})
 
78
        c.Assert(err, gc.ErrorMatches, ".*invalid storage id foo.*")
 
79
}
 
80
 
 
81
func (s *ShowSuite) TestShowJSON(c *gc.C) {
 
82
        s.assertValidShow(
 
83
                c,
 
84
                []string{"shared-fs/0", "--format", "json"},
 
85
                `{"postgresql/0":{"shared-fs/0":{"storage":"shared-fs","kind":"block","status":"pending","persistent":false}},"transcode/0":{"shared-fs/0":{"storage":"shared-fs","kind":"filesystem","status":"attached","persistent":false,"location":"a location"}}}
 
86
`,
 
87
        )
 
88
}
 
89
 
 
90
func (s *ShowSuite) TestShowMultipleReturn(c *gc.C) {
 
91
        s.assertValidShow(
 
92
                c,
 
93
                []string{"shared-fs/0", "db-dir/1000"},
 
94
                `
 
95
postgresql/0:
 
96
  db-dir/1000:
 
97
    storage: db-dir
 
98
    kind: block
 
99
    status: pending
 
100
    persistent: true
 
101
  shared-fs/0:
 
102
    storage: shared-fs
 
103
    kind: block
 
104
    status: pending
 
105
    persistent: false
 
106
transcode/0:
 
107
  shared-fs/0:
 
108
    storage: shared-fs
 
109
    kind: filesystem
 
110
    status: attached
 
111
    persistent: false
 
112
    location: a location
 
113
`[1:],
 
114
        )
 
115
}
 
116
 
 
117
func (s *ShowSuite) assertValidShow(c *gc.C, args []string, expected string) {
 
118
        context, err := runShow(c, args)
 
119
        c.Assert(err, jc.ErrorIsNil)
 
120
 
 
121
        obtained := testing.Stdout(context)
 
122
        c.Assert(obtained, gc.Equals, expected)
 
123
}
 
124
 
 
125
type mockShowAPI struct {
 
126
        noMatch bool
 
127
}
 
128
 
 
129
func (s mockShowAPI) Close() error {
 
130
        return nil
 
131
}
 
132
 
 
133
func (s mockShowAPI) Show(tags []names.StorageTag) ([]params.StorageDetails, error) {
 
134
        if s.noMatch {
 
135
                return nil, nil
 
136
        }
 
137
        all := make([]params.StorageDetails, len(tags))
 
138
        for i, tag := range tags {
 
139
                all[i] = params.StorageDetails{
 
140
                        StorageTag: tag.String(),
 
141
                        UnitTag:    "unit-postgresql-0",
 
142
                        Kind:       params.StorageKindBlock,
 
143
                        Status:     "pending",
 
144
                }
 
145
                if i == 1 {
 
146
                        all[i].Persistent = true
 
147
                }
 
148
        }
 
149
        for _, tag := range tags {
 
150
                if strings.Contains(tag.String(), "shared") {
 
151
                        all = append(all, params.StorageDetails{
 
152
                                StorageTag: tag.String(),
 
153
                                OwnerTag:   "unit-transcode-0",
 
154
                                UnitTag:    "unit-transcode-0",
 
155
                                Kind:       params.StorageKindFilesystem,
 
156
                                Location:   "a location",
 
157
                                Status:     "attached",
 
158
                        })
 
159
                }
 
160
        }
 
161
        return all, nil
 
162
}