Skip to content

Commit

Permalink
Add tests for resource group delete
Browse files Browse the repository at this point in the history
  • Loading branch information
Jont828 committed Nov 22, 2021
1 parent 3d53d4b commit 9e32fe4
Showing 1 changed file with 27 additions and 69 deletions.
96 changes: 27 additions & 69 deletions azure/services/groups/groups_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ package groups
import (
"context"
// "errors"
"fmt"
"github.com/pkg/errors"

"net/http"
"testing"

"github.com/pkg/errors"

"github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2019-05-01/resources"
"github.com/Azure/go-autorest/autorest"
azureautorest "github.com/Azure/go-autorest/autorest/azure"
"github.com/Azure/go-autorest/autorest/to"
"github.com/golang/mock/gomock"
. "github.com/onsi/gomega"
Expand Down Expand Up @@ -88,12 +88,12 @@ func TestReconcileGroups(t *testing.T) {
},
{
name: "create resource group fails",
expectedError: "failed to create resource test-group/test-group (service: group): #: Internal Server Error: StatusCode=500",
expectedError: "#: Internal Server Error: StatusCode=500",
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder, r *mock_async.MockAsyncReconcilerMockRecorder) {
s.V(gomock.AssignableToTypeOf(2)).AnyTimes().Return(klogr.New())
s.GroupSpec().Return(&fakeGroupSpec)
r.CreateResource(gomockinternal.AContext(), &fakeGroupSpec, serviceName).Return(nil, errors.Wrapf(internalError, "failed to create resource test-group/test-group (service: group)"))
s.UpdatePutStatus(infrav1.ResourceGroupReadyCondition, serviceName, gomockinternal.ErrStrEq(fmt.Sprintf("failed to create resource test-group/test-group (service: group): %s", internalError.Error())))
r.CreateResource(gomockinternal.AContext(), &fakeGroupSpec, serviceName).Return(nil, internalError)
s.UpdatePutStatus(infrav1.ResourceGroupReadyCondition, serviceName, gomockinternal.ErrStrEq("#: Internal Server Error: StatusCode=500"))
},
},
}
Expand Down Expand Up @@ -133,104 +133,60 @@ func TestDeleteGroups(t *testing.T) {
testcases := []struct {
name string
expectedError string
expect func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder)
expect func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder, r *mock_async.MockAsyncReconcilerMockRecorder)
}{
{
name: "long running delete operation is done",
name: "delete operation is successful for managed resource group",
expectedError: "",
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder) {
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder, r *mock_async.MockAsyncReconcilerMockRecorder) {
s.V(gomock.AssignableToTypeOf(2)).AnyTimes().Return(klogr.New())
s.GroupSpec().AnyTimes().Return(&fakeGroupSpec)
m.Get(gomockinternal.AContext(), "test-group").Return(sampleManagedGroup, nil)
m.Get(gomockinternal.AContext(), &fakeGroupSpec).Return(sampleManagedGroup, nil)
s.ClusterName().Return("test-cluster")
s.GetLongRunningOperationState("test-group", serviceName).Times(2).Return(&fakeFuture)
m.IsDone(gomockinternal.AContext(), gomock.AssignableToTypeOf(&azureautorest.Future{})).Return(true, nil)
m.Result(gomockinternal.AContext(), gomock.AssignableToTypeOf(&azureautorest.Future{}), infrav1.DeleteFuture).Return(nil, nil)
s.DeleteLongRunningOperationState("test-group", serviceName)
r.DeleteResource(gomockinternal.AContext(), &fakeGroupSpec, serviceName).Return(nil)
s.UpdateDeleteStatus(infrav1.ResourceGroupReadyCondition, serviceName, nil)
},
},
{
name: "long running delete operation is not done",
expectedError: "operation type DELETE on Azure resource test-group/test-group is not done. Object will be requeued after 15s",
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder) {
s.V(gomock.AssignableToTypeOf(2)).AnyTimes().Return(klogr.New())
s.GroupSpec().AnyTimes().Return(&fakeGroupSpec)
m.Get(gomockinternal.AContext(), "test-group").Return(sampleManagedGroup, nil)
s.ClusterName().Return("test-cluster")
s.GetLongRunningOperationState("test-group", serviceName).Times(2).Return(&fakeFuture)
m.IsDone(gomockinternal.AContext(), gomock.AssignableToTypeOf(&azureautorest.Future{})).Return(false, nil)
s.UpdateDeleteStatus(infrav1.ResourceGroupReadyCondition, serviceName, gomockinternal.ErrStrEq("operation type DELETE on Azure resource test-group/test-group is not done. Object will be requeued after 15s"))
},
},
{
name: "resource group is not managed by capz",
expectedError: azure.ErrNotOwned.Error(),
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder) {
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder, r *mock_async.MockAsyncReconcilerMockRecorder) {
s.V(gomock.AssignableToTypeOf(2)).AnyTimes().Return(klogr.New())
s.GroupSpec().AnyTimes().Return(&fakeGroupSpec)
m.Get(gomockinternal.AContext(), "test-group").Return(sampleBYOGroup, nil)
m.Get(gomockinternal.AContext(), &fakeGroupSpec).Return(sampleBYOGroup, nil)
s.ClusterName().Return("test-cluster")
},
},
{
name: "fail to check if resource group is managed",
expectedError: "could not get resource group management state",
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder) {
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder, r *mock_async.MockAsyncReconcilerMockRecorder) {
s.V(gomock.AssignableToTypeOf(2)).AnyTimes().Return(klogr.New())
s.GroupSpec().AnyTimes().Return(&fakeGroupSpec)
m.Get(gomockinternal.AContext(), "test-group").Return(resources.Group{}, internalError)
m.Get(gomockinternal.AContext(), &fakeGroupSpec).Return(resources.Group{}, internalError)
},
},
{
name: "resource group doesn't exist",
expectedError: "",
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder) {
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder, r *mock_async.MockAsyncReconcilerMockRecorder) {
s.V(gomock.AssignableToTypeOf(2)).AnyTimes().Return(klogr.New())
s.GroupSpec().AnyTimes().Return(&fakeGroupSpec)
m.Get(gomockinternal.AContext(), "test-group").Return(resources.Group{}, notFoundError)
m.Get(gomockinternal.AContext(), &fakeGroupSpec).Return(resources.Group{}, notFoundError)
s.DeleteLongRunningOperationState("test-group", serviceName)
s.UpdateDeleteStatus(infrav1.ResourceGroupReadyCondition, serviceName, nil)
},
},
{
name: "error occurs when deleting resource group",
expectedError: "failed to delete resource test-group/test-group (service: group): #: Internal Server Error: StatusCode=500",
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder) {
s.V(gomock.AssignableToTypeOf(2)).AnyTimes().Return(klogr.New())
s.GroupSpec().AnyTimes().Return(&fakeGroupSpec)
s.GetLongRunningOperationState("test-group", serviceName).Return(nil)
m.Get(gomockinternal.AContext(), "test-group").Return(sampleManagedGroup, nil)
s.ClusterName().Return("test-cluster")
m.DeleteAsync(gomockinternal.AContext(), &fakeGroupSpec).Return(nil, internalError)
s.UpdateDeleteStatus(infrav1.ResourceGroupReadyCondition, serviceName, gomockinternal.ErrStrEq("failed to delete resource test-group/test-group (service: group): #: Internal Server Error: StatusCode=500"))
},
},
{
name: "context deadline exceeded while deleting resource group",
expectedError: "operation type DELETE on Azure resource test-group/test-group is not done. Object will be requeued after 15s",
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder) {
s.V(gomock.AssignableToTypeOf(2)).AnyTimes().Return(klogr.New())
s.GroupSpec().AnyTimes().Return(&fakeGroupSpec)
s.GetLongRunningOperationState("test-group", serviceName).Return(nil)
m.Get(gomockinternal.AContext(), "test-group").Return(sampleManagedGroup, nil)
s.ClusterName().Return("test-cluster")
m.DeleteAsync(gomockinternal.AContext(), &fakeGroupSpec).Return(&azureautorest.Future{}, errCtxExceeded)
s.SetLongRunningOperationState(gomock.AssignableToTypeOf(&infrav1.Future{}))
s.UpdateDeleteStatus(infrav1.ResourceGroupReadyCondition, serviceName, gomockinternal.ErrStrEq("operation type DELETE on Azure resource test-group/test-group is not done. Object will be requeued after 15s"))
},
},
{
name: "delete the resource group successfully",
expectedError: "",
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder) {
expectedError: "#: Internal Server Error: StatusCode=500",
expect: func(s *mock_groups.MockGroupScopeMockRecorder, m *mock_groups.MockclientMockRecorder, r *mock_async.MockAsyncReconcilerMockRecorder) {
s.V(gomock.AssignableToTypeOf(2)).AnyTimes().Return(klogr.New())
s.GroupSpec().AnyTimes().Return(&fakeGroupSpec)
s.GetLongRunningOperationState("test-group", serviceName).Return(nil)
m.Get(gomockinternal.AContext(), "test-group").Return(sampleManagedGroup, nil)
m.Get(gomockinternal.AContext(), &fakeGroupSpec).Return(sampleManagedGroup, nil)
s.ClusterName().Return("test-cluster")
m.DeleteAsync(gomockinternal.AContext(), &fakeGroupSpec).Return(nil, nil)
s.UpdateDeleteStatus(infrav1.ResourceGroupReadyCondition, serviceName, nil)
r.DeleteResource(gomockinternal.AContext(), &fakeGroupSpec, serviceName).Return(internalError)
s.UpdateDeleteStatus(infrav1.ResourceGroupReadyCondition, serviceName, gomockinternal.ErrStrEq("#: Internal Server Error: StatusCode=500"))
},
},
}
Expand All @@ -245,12 +201,14 @@ func TestDeleteGroups(t *testing.T) {
defer mockCtrl.Finish()
scopeMock := mock_groups.NewMockGroupScope(mockCtrl)
clientMock := mock_groups.NewMockclient(mockCtrl)
asyncMock := mock_async.NewMockAsyncReconciler(mockCtrl)

tc.expect(scopeMock.EXPECT(), clientMock.EXPECT())
tc.expect(scopeMock.EXPECT(), clientMock.EXPECT(), asyncMock.EXPECT())

s := &Service{
Scope: scopeMock,
client: clientMock,
Scope: scopeMock,
client: clientMock,
AsyncReconciler: asyncMock,
}

err := s.Delete(context.TODO())
Expand Down

0 comments on commit 9e32fe4

Please sign in to comment.