github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/provider/ec2/securitygroups_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package ec2_test
     5  
     6  import (
     7  	"github.com/juju/testing"
     8  	jc "github.com/juju/testing/checkers"
     9  	amzec2 "gopkg.in/amz.v3/ec2"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/provider/ec2"
    13  	coretesting "github.com/juju/juju/testing"
    14  )
    15  
    16  type SecurityGroupSuite struct {
    17  	coretesting.BaseSuite
    18  
    19  	instanceStub *stubInstance
    20  	deleteFunc   func(inst ec2.SecurityGroupCleaner, group amzec2.SecurityGroup) error
    21  }
    22  
    23  var _ = gc.Suite(&SecurityGroupSuite{})
    24  
    25  func (s *SecurityGroupSuite) SetUpSuite(c *gc.C) {
    26  	s.BaseSuite.SetUpSuite(c)
    27  	s.deleteFunc = *ec2.DeleteSecurityGroupInsistently
    28  }
    29  
    30  func (s *SecurityGroupSuite) SetUpTest(c *gc.C) {
    31  	s.BaseSuite.SetUpTest(c)
    32  	s.instanceStub = &stubInstance{
    33  		Stub: &testing.Stub{},
    34  		deleteSecurityGroup: func(group amzec2.SecurityGroup) (resp *amzec2.SimpleResp, err error) {
    35  			return nil, nil
    36  		},
    37  	}
    38  }
    39  
    40  func (s *SecurityGroupSuite) TestDeleteSecurityGroupSuccess(c *gc.C) {
    41  	err := s.deleteFunc(s.instanceStub, amzec2.SecurityGroup{})
    42  	c.Assert(err, jc.ErrorIsNil)
    43  	s.instanceStub.CheckCallNames(c, "DeleteSecurityGroup")
    44  }
    45  
    46  func (s *SecurityGroupSuite) TestDeleteSecurityGroupInvalidGroupNotFound(c *gc.C) {
    47  	s.instanceStub.deleteSecurityGroup = func(group amzec2.SecurityGroup) (resp *amzec2.SimpleResp, err error) {
    48  		return nil, &amzec2.Error{Code: "InvalidGroup.NotFound"}
    49  	}
    50  	err := s.deleteFunc(s.instanceStub, amzec2.SecurityGroup{})
    51  	c.Assert(err, jc.ErrorIsNil)
    52  	s.instanceStub.CheckCallNames(c, "DeleteSecurityGroup")
    53  }
    54  
    55  func (s *SecurityGroupSuite) TestDeleteSecurityGroupFewCalls(c *gc.C) {
    56  	count := 0
    57  	maxCalls := 4
    58  	s.instanceStub.deleteSecurityGroup = func(group amzec2.SecurityGroup) (resp *amzec2.SimpleResp, err error) {
    59  		if count < maxCalls {
    60  			count++
    61  			return nil, &amzec2.Error{Code: "keep going"}
    62  		}
    63  		return nil, nil
    64  	}
    65  	err := s.deleteFunc(s.instanceStub, amzec2.SecurityGroup{})
    66  	c.Assert(err, jc.ErrorIsNil)
    67  
    68  	expectedCalls := make([]string, maxCalls+1)
    69  	for i := 0; i < maxCalls+1; i++ {
    70  		expectedCalls[i] = "DeleteSecurityGroup"
    71  	}
    72  	s.instanceStub.CheckCallNames(c, expectedCalls...)
    73  }
    74  
    75  type stubInstance struct {
    76  	*testing.Stub
    77  	deleteSecurityGroup func(group amzec2.SecurityGroup) (resp *amzec2.SimpleResp, err error)
    78  }
    79  
    80  func (s *stubInstance) DeleteSecurityGroup(group amzec2.SecurityGroup) (resp *amzec2.SimpleResp, err error) {
    81  	s.MethodCall(s, "DeleteSecurityGroup", group)
    82  	return s.deleteSecurityGroup(group)
    83  }