github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/firewallrules/client_test.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package firewallrules_test 5 6 import ( 7 "github.com/juju/errors" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 11 basetesting "github.com/juju/juju/api/base/testing" 12 "github.com/juju/juju/api/firewallrules" 13 "github.com/juju/juju/apiserver/common" 14 "github.com/juju/juju/apiserver/params" 15 "github.com/juju/juju/testing" 16 ) 17 18 type FirewallRulesSuite struct { 19 testing.BaseSuite 20 } 21 22 var _ = gc.Suite(&FirewallRulesSuite{}) 23 24 func (s *FirewallRulesSuite) TestSetFirewallRule(c *gc.C) { 25 apiCaller := basetesting.APICallerFunc( 26 func(objType string, 27 version int, 28 id, request string, 29 a, result interface{}, 30 ) error { 31 c.Check(objType, gc.Equals, "FirewallRules") 32 c.Check(id, gc.Equals, "") 33 c.Check(request, gc.Equals, "SetFirewallRules") 34 35 args, ok := a.(params.FirewallRuleArgs) 36 c.Assert(ok, jc.IsTrue) 37 c.Assert(args.Args, gc.HasLen, 1) 38 39 rule := args.Args[0] 40 c.Assert(rule.KnownService, gc.Equals, params.SSHRule) 41 c.Assert(rule.WhitelistCIDRS, jc.DeepEquals, []string{"192.168.1.0/32"}) 42 43 if results, ok := result.(*params.ErrorResults); ok { 44 results.Results = []params.ErrorResult{{ 45 Error: common.ServerError(errors.New("fail"))}} 46 } 47 return nil 48 }) 49 50 client := firewallrules.NewClient(apiCaller) 51 err := client.SetFirewallRule("ssh", []string{"192.168.1.0/32"}) 52 c.Assert(err, gc.ErrorMatches, "fail") 53 } 54 55 func (s *FirewallRulesSuite) TestSetFirewallRuleFacadeCallError(c *gc.C) { 56 msg := "facade failure" 57 apiCaller := basetesting.APICallerFunc( 58 func(objType string, 59 version int, 60 id, request string, 61 a, result interface{}, 62 ) error { 63 c.Check(objType, gc.Equals, "FirewallRules") 64 c.Check(id, gc.Equals, "") 65 c.Check(request, gc.Equals, "SetFirewallRules") 66 return errors.New(msg) 67 }) 68 client := firewallrules.NewClient(apiCaller) 69 err := client.SetFirewallRule("ssh", nil) 70 c.Assert(errors.Cause(err), gc.ErrorMatches, msg) 71 } 72 73 func (s *FirewallRulesSuite) TestSetFirewallRuleInvalid(c *gc.C) { 74 apiCaller := basetesting.APICallerFunc( 75 func(objType string, 76 version int, 77 id, request string, 78 a, result interface{}, 79 ) error { 80 c.Fail() 81 return errors.New("unexpected") 82 }) 83 84 client := firewallrules.NewClient(apiCaller) 85 err := client.SetFirewallRule("foo", []string{"192.168.1.0/32"}) 86 c.Assert(err, gc.ErrorMatches, `known service "foo" not valid`) 87 } 88 89 func (s *FirewallRulesSuite) TestList(c *gc.C) { 90 called := false 91 apiCaller := basetesting.APICallerFunc( 92 func(objType string, 93 version int, 94 id, request string, 95 a, result interface{}, 96 ) error { 97 c.Check(objType, gc.Equals, "FirewallRules") 98 c.Check(id, gc.Equals, "") 99 c.Check(request, gc.Equals, "ListFirewallRules") 100 101 called = true 102 c.Assert(a, gc.IsNil) 103 104 if results, ok := result.(*params.ListFirewallRulesResults); ok { 105 results.Rules = []params.FirewallRule{{ 106 KnownService: params.SSHRule, 107 WhitelistCIDRS: []string{"192.168.1.0/32"}, 108 }} 109 } 110 return nil 111 }) 112 113 client := firewallrules.NewClient(apiCaller) 114 results, err := client.ListFirewallRules() 115 c.Assert(err, jc.ErrorIsNil) 116 c.Assert(called, jc.IsTrue) 117 c.Assert(results, jc.DeepEquals, []params.FirewallRule{{ 118 KnownService: params.SSHRule, 119 WhitelistCIDRS: []string{"192.168.1.0/32"}, 120 }}) 121 } 122 123 func (s *FirewallRulesSuite) TestListError(c *gc.C) { 124 called := false 125 apiCaller := basetesting.APICallerFunc( 126 func(objType string, 127 version int, 128 id, request string, 129 a, result interface{}, 130 ) error { 131 c.Check(objType, gc.Equals, "FirewallRules") 132 c.Check(id, gc.Equals, "") 133 c.Check(request, gc.Equals, "ListFirewallRules") 134 135 called = true 136 return errors.New("fail") 137 }) 138 139 client := firewallrules.NewClient(apiCaller) 140 _, err := client.ListFirewallRules() 141 c.Assert(errors.Cause(err), gc.ErrorMatches, "fail") 142 c.Assert(called, jc.IsTrue) 143 }