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 }