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  }