1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
10
"github.com/juju/names"
11
jc "github.com/juju/testing/checkers"
12
gc "gopkg.in/check.v1"
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"
21
type ShowSuite struct {
26
var _ = gc.Suite(&ShowSuite{})
28
func (s *ShowSuite) SetUpTest(c *gc.C) {
29
s.SubStorageSuite.SetUpTest(c)
31
s.mockAPI = &mockShowAPI{}
32
s.PatchValue(storage.GetStorageShowAPI, func(c *storage.ShowCommand) (storage.StorageShowAPI, error) {
38
func runShow(c *gc.C, args []string) (*cmd.Context, error) {
39
return testing.RunCommand(c, envcmd.Wrap(&storage.ShowCommand{}), args...)
42
func (s *ShowSuite) TestShowNoMatch(c *gc.C) {
43
s.mockAPI.noMatch = true
53
func (s *ShowSuite) TestShow(c *gc.C) {
56
[]string{"shared-fs/0"},
57
// Default format is yaml
76
func (s *ShowSuite) TestShowInvalidId(c *gc.C) {
77
_, err := runShow(c, []string{"foo"})
78
c.Assert(err, gc.ErrorMatches, ".*invalid storage id foo.*")
81
func (s *ShowSuite) TestShowJSON(c *gc.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"}}}
90
func (s *ShowSuite) TestShowMultipleReturn(c *gc.C) {
93
[]string{"shared-fs/0", "db-dir/1000"},
117
func (s *ShowSuite) assertValidShow(c *gc.C, args []string, expected string) {
118
context, err := runShow(c, args)
119
c.Assert(err, jc.ErrorIsNil)
121
obtained := testing.Stdout(context)
122
c.Assert(obtained, gc.Equals, expected)
125
type mockShowAPI struct {
129
func (s mockShowAPI) Close() error {
133
func (s mockShowAPI) Show(tags []names.StorageTag) ([]params.StorageDetails, error) {
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,
146
all[i].Persistent = true
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",