github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/block/list_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package block_test 5 6 import ( 7 "errors" 8 9 "github.com/juju/cmd" 10 "github.com/juju/cmd/cmdtesting" 11 "github.com/juju/juju/jujuclient/jujuclienttesting" 12 jc "github.com/juju/testing/checkers" 13 gc "gopkg.in/check.v1" 14 15 "github.com/juju/juju/apiserver/params" 16 "github.com/juju/juju/cmd/juju/block" 17 "github.com/juju/juju/testing" 18 ) 19 20 var _ = gc.Suite(&listCommandSuite{}) 21 22 type listCommandSuite struct { 23 testing.FakeJujuXDGDataHomeSuite 24 } 25 26 func (s *listCommandSuite) TestInit(c *gc.C) { 27 cmd := s.listCommand(nil, nil) 28 err := cmdtesting.InitCommand(cmd, nil) 29 c.Check(err, jc.ErrorIsNil) 30 31 err = cmdtesting.InitCommand(cmd, []string{"anything"}) 32 c.Check(err.Error(), gc.Equals, `unrecognized args: ["anything"]`) 33 } 34 35 func (*listCommandSuite) listCommand(api *mockListClient, err error) cmd.Command { 36 store := jujuclienttesting.MinimalStore() 37 return block.NewListCommandForTest(store, api, err) 38 } 39 40 func (s *listCommandSuite) TestListEmpty(c *gc.C) { 41 ctx, err := cmdtesting.RunCommand(c, s.listCommand(&mockListClient{}, nil)) 42 c.Assert(err, jc.ErrorIsNil) 43 c.Assert(cmdtesting.Stderr(ctx), gc.Equals, "No commands are currently disabled.\n") 44 } 45 46 func (s *listCommandSuite) TestListError(c *gc.C) { 47 _, err := cmdtesting.RunCommand(c, s.listCommand( 48 &mockListClient{err: errors.New("boom")}, nil)) 49 c.Assert(err, gc.ErrorMatches, "boom") 50 } 51 52 func (s *listCommandSuite) mock() *mockListClient { 53 return &mockListClient{ 54 blocks: []params.Block{ 55 { 56 Type: "BlockDestroy", 57 Message: "Sysadmins in control.", 58 }, { 59 Type: "BlockChange", 60 Message: "just temporary", 61 }, 62 }, 63 modelBlocks: []params.ModelBlockInfo{ 64 { 65 Name: "controller", 66 UUID: "fake-uuid-1", 67 OwnerTag: "user-admin", 68 Blocks: []string{"BlockDestroy", "BlockRemove"}, 69 }, { 70 Name: "model-a", 71 UUID: "fake-uuid-2", 72 OwnerTag: "user-bob@external", 73 Blocks: []string{"BlockChange"}, 74 }, { 75 Name: "model-b", 76 UUID: "fake-uuid-3", 77 OwnerTag: "user-charlie@external", 78 Blocks: []string{"BlockDestroy", "BlockChange"}, 79 }, 80 }, 81 } 82 } 83 84 func (s *listCommandSuite) TestList(c *gc.C) { 85 cmd := s.listCommand(s.mock(), nil) 86 ctx, err := cmdtesting.RunCommand(c, cmd) 87 c.Assert(err, jc.ErrorIsNil) 88 c.Assert(cmdtesting.Stderr(ctx), gc.Equals, "") 89 c.Assert(cmdtesting.Stdout(ctx), gc.Equals, ""+ 90 "Disabled commands Message\n"+ 91 "destroy-model Sysadmins in control.\n"+ 92 "all just temporary\n"+ 93 "\n", 94 ) 95 } 96 97 func (s *listCommandSuite) TestListYAML(c *gc.C) { 98 cmd := s.listCommand(s.mock(), nil) 99 ctx, err := cmdtesting.RunCommand(c, cmd, "--format", "yaml") 100 c.Assert(err, jc.ErrorIsNil) 101 c.Assert(cmdtesting.Stdout(ctx), gc.Equals, ""+ 102 "- command-set: destroy-model\n"+ 103 " message: Sysadmins in control.\n"+ 104 "- command-set: all\n"+ 105 " message: just temporary\n", 106 ) 107 } 108 109 func (s *listCommandSuite) TestListJSONEmpty(c *gc.C) { 110 ctx, err := cmdtesting.RunCommand(c, s.listCommand(&mockListClient{}, nil), "--format", "json") 111 c.Assert(err, jc.ErrorIsNil) 112 c.Assert(cmdtesting.Stdout(ctx), gc.Equals, "[]\n") 113 } 114 115 func (s *listCommandSuite) TestListJSON(c *gc.C) { 116 cmd := s.listCommand(s.mock(), nil) 117 ctx, err := cmdtesting.RunCommand(c, cmd, "--format", "json") 118 c.Assert(err, jc.ErrorIsNil) 119 c.Assert(cmdtesting.Stdout(ctx), gc.Equals, ""+ 120 `[{"command-set":"destroy-model","message":"Sysadmins in control."},`+ 121 `{"command-set":"all","message":"just temporary"}]`+"\n") 122 } 123 124 func (s *listCommandSuite) TestListAll(c *gc.C) { 125 cmd := s.listCommand(s.mock(), nil) 126 ctx, err := cmdtesting.RunCommand(c, cmd, "--all") 127 c.Assert(err, jc.ErrorIsNil) 128 c.Assert(cmdtesting.Stderr(ctx), gc.Equals, "") 129 c.Assert(cmdtesting.Stdout(ctx), gc.Equals, ""+ 130 "Name Model UUID Owner Disabled commands\n"+ 131 "controller fake-uuid-1 admin destroy-model, remove-object\n"+ 132 "model-a fake-uuid-2 bob@external all\n"+ 133 "model-b fake-uuid-3 charlie@external all, destroy-model\n"+ 134 "\n") 135 } 136 137 func (s *listCommandSuite) TestListAllYAML(c *gc.C) { 138 cmd := s.listCommand(s.mock(), nil) 139 ctx, err := cmdtesting.RunCommand(c, cmd, "--format", "yaml", "--all") 140 c.Assert(err, jc.ErrorIsNil) 141 c.Assert(cmdtesting.Stdout(ctx), gc.Equals, ""+ 142 "- name: controller\n"+ 143 " model-uuid: fake-uuid-1\n"+ 144 " owner: admin\n"+ 145 " disabled-commands:\n"+ 146 " - destroy-model\n"+ 147 " - remove-object\n"+ 148 "- name: model-a\n"+ 149 " model-uuid: fake-uuid-2\n"+ 150 " owner: bob@external\n"+ 151 " disabled-commands:\n"+ 152 " - all\n"+ 153 "- name: model-b\n"+ 154 " model-uuid: fake-uuid-3\n"+ 155 " owner: charlie@external\n"+ 156 " disabled-commands:\n"+ 157 " - all\n"+ 158 " - destroy-model\n") 159 } 160 161 func (s *listCommandSuite) TestListAllJSON(c *gc.C) { 162 cmd := s.listCommand(s.mock(), nil) 163 ctx, err := cmdtesting.RunCommand(c, cmd, "--format", "json", "--all") 164 c.Assert(err, jc.ErrorIsNil) 165 c.Assert(cmdtesting.Stdout(ctx), gc.Equals, "["+ 166 `{"name":"controller","model-uuid":"fake-uuid-1","owner":"admin","disabled-commands":["destroy-model","remove-object"]},`+ 167 `{"name":"model-a","model-uuid":"fake-uuid-2","owner":"bob@external","disabled-commands":["all"]},`+ 168 `{"name":"model-b","model-uuid":"fake-uuid-3","owner":"charlie@external","disabled-commands":["all","destroy-model"]}`+ 169 "]\n") 170 } 171 172 type mockListClient struct { 173 blocks []params.Block 174 modelBlocks []params.ModelBlockInfo 175 err error 176 } 177 178 func (c *mockListClient) Close() error { 179 return nil 180 } 181 182 func (c *mockListClient) List() ([]params.Block, error) { 183 return c.blocks, c.err 184 } 185 186 func (c *mockListClient) ListBlockedModels() ([]params.ModelBlockInfo, error) { 187 return c.modelBlocks, c.err 188 }