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 }