github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/firewall/setrule_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  	"github.com/juju/cmd"
     8  	"github.com/juju/cmd/cmdtesting"
     9  	"github.com/juju/errors"
    10  	"github.com/juju/juju/testing"
    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/juju/firewall"
    16  )
    17  
    18  type SetRuleSuite struct {
    19  	testing.BaseSuite
    20  
    21  	mockAPI *mockSetRuleAPI
    22  }
    23  
    24  var _ = gc.Suite(&SetRuleSuite{})
    25  
    26  func (s *SetRuleSuite) SetUpTest(c *gc.C) {
    27  	s.mockAPI = &mockSetRuleAPI{}
    28  }
    29  
    30  func (s *SetRuleSuite) TestInitMissingService(c *gc.C) {
    31  	_, err := s.runSetRule(c, "--whitelist", "10.0.0.0/8")
    32  	c.Assert(err, gc.ErrorMatches, "no well known service specified")
    33  }
    34  
    35  func (s *SetRuleSuite) TestInitInvalidWhitelist(c *gc.C) {
    36  	_, err := s.runSetRule(c, "--whitelist", "foo", "ssh")
    37  	c.Assert(err, gc.ErrorMatches, `invalid white-list subnet: invalid CIDR address: foo`)
    38  }
    39  
    40  func (s *SetRuleSuite) TestInitMissingWhitelist(c *gc.C) {
    41  	_, err := s.runSetRule(c, "ssh")
    42  	c.Assert(err, gc.ErrorMatches, `no whitelist subnets specified`)
    43  }
    44  
    45  func (s *SetRuleSuite) TestSetRule(c *gc.C) {
    46  	_, err := s.runSetRule(c, "--whitelist", "10.2.1.0/8,192.168.1.0/8", "ssh")
    47  	c.Assert(err, jc.ErrorIsNil)
    48  	c.Assert(s.mockAPI.rule, jc.DeepEquals, params.FirewallRule{
    49  		KnownService:   params.SSHRule,
    50  		WhitelistCIDRS: []string{"10.2.1.0/8", "192.168.1.0/8"},
    51  	})
    52  }
    53  
    54  func (s *SetRuleSuite) TestSetError(c *gc.C) {
    55  	s.mockAPI.err = errors.New("fail")
    56  	_, err := s.runSetRule(c, "ssh", "--whitelist", "10.0.0.0/8")
    57  	c.Assert(err, gc.ErrorMatches, ".*fail.*")
    58  }
    59  
    60  func (s *SetRuleSuite) runSetRule(c *gc.C, args ...string) (*cmd.Context, error) {
    61  	return cmdtesting.RunCommand(c, firewall.NewSetRulesCommandForTest(s.mockAPI), args...)
    62  }
    63  
    64  type mockSetRuleAPI struct {
    65  	rule params.FirewallRule
    66  	err  error
    67  }
    68  
    69  func (s *mockSetRuleAPI) Close() error {
    70  	return nil
    71  }
    72  
    73  func (s *mockSetRuleAPI) SetFirewallRule(service string, whiteListCidrs []string) error {
    74  	if s.err != nil {
    75  		return s.err
    76  	}
    77  	s.rule = params.FirewallRule{
    78  		KnownService:   params.KnownServiceValue(service),
    79  		WhitelistCIDRS: whiteListCidrs,
    80  	}
    81  	return nil
    82  }