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  }