github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/firewall/listrules_test.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package firewall_test
     5  
     6  import (
     7  	"strings"
     8  
     9  	"github.com/juju/cmd"
    10  	"github.com/juju/cmd/cmdtesting"
    11  	"github.com/juju/errors"
    12  	"github.com/juju/juju/testing"
    13  	jc "github.com/juju/testing/checkers"
    14  	gc "gopkg.in/check.v1"
    15  
    16  	"github.com/juju/juju/apiserver/params"
    17  	"github.com/juju/juju/cmd/juju/firewall"
    18  )
    19  
    20  type ListSuite struct {
    21  	testing.BaseSuite
    22  
    23  	mockAPI *mockListAPI
    24  }
    25  
    26  var _ = gc.Suite(&ListSuite{})
    27  
    28  func (s *ListSuite) SetUpTest(c *gc.C) {
    29  	s.mockAPI = &mockListAPI{
    30  		rules: []params.FirewallRule{
    31  			{
    32  				KnownService:   "ssh",
    33  				WhitelistCIDRS: []string{"192.168.1.0/16", "10.0.0.0/8"},
    34  			}, {
    35  				KnownService:   "juju-controller",
    36  				WhitelistCIDRS: []string{"10.2.0.0/16"},
    37  			},
    38  		},
    39  	}
    40  }
    41  
    42  func (s *ListSuite) TestListError(c *gc.C) {
    43  	s.mockAPI.err = errors.New("fail")
    44  	_, err := s.runList(c, nil)
    45  	c.Assert(err, gc.ErrorMatches, ".*fail.*")
    46  }
    47  
    48  func (s *ListSuite) TestListTabular(c *gc.C) {
    49  	s.assertValidList(
    50  		c,
    51  		[]string{"--format", "tabular"},
    52  		`
    53  Service          Whitelist subnets
    54  juju-controller  10.2.0.0/16
    55  ssh              192.168.1.0/16,10.0.0.0/8
    56  
    57  `[1:],
    58  		"",
    59  	)
    60  }
    61  
    62  func (s *ListSuite) TestListYAML(c *gc.C) {
    63  	s.assertValidList(
    64  		c,
    65  		[]string{"--format", "yaml"},
    66  		`
    67  - known-service: ssh
    68    whitelist-subnets:
    69    - 192.168.1.0/16
    70    - 10.0.0.0/8
    71  - known-service: juju-controller
    72    whitelist-subnets:
    73    - 10.2.0.0/16
    74  `[1:],
    75  		"",
    76  	)
    77  }
    78  
    79  func (s *ListSuite) runList(c *gc.C, args []string) (*cmd.Context, error) {
    80  	return cmdtesting.RunCommand(c, firewall.NewListRulesCommandForTest(s.mockAPI), args...)
    81  }
    82  
    83  func (s *ListSuite) assertValidList(c *gc.C, args []string, expectedValid, expectedErr string) {
    84  	context, err := s.runList(c, args)
    85  	c.Assert(err, jc.ErrorIsNil)
    86  
    87  	obtainedErr := strings.Replace(cmdtesting.Stderr(context), "\n", "", -1)
    88  	c.Assert(obtainedErr, gc.Matches, expectedErr)
    89  
    90  	obtainedValid := cmdtesting.Stdout(context)
    91  	c.Assert(obtainedValid, gc.Matches, expectedValid)
    92  }
    93  
    94  type mockListAPI struct {
    95  	rules []params.FirewallRule
    96  	err   error
    97  }
    98  
    99  func (s *mockListAPI) Close() error {
   100  	return nil
   101  }
   102  
   103  func (s *mockListAPI) ListFirewallRules() ([]params.FirewallRule, error) {
   104  	if s.err != nil {
   105  		return nil, s.err
   106  	}
   107  	return s.rules, nil
   108  }