Skip to content

Commit ccadc3f

Browse files
committed
ARO-17482 resolve mockDBClient conflicts
1 parent 8192acc commit ccadc3f

File tree

1 file changed

+72
-140
lines changed

1 file changed

+72
-140
lines changed

admin/server/handlers/hcp/serialconsole_test.go

Lines changed: 72 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,13 @@ import (
2424
"testing"
2525

2626
"github.com/go-logr/logr/testr"
27-
"go.uber.org/mock/gomock"
2827

2928
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
3029
azcorearm "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
3130

3231
"github.com/Azure/ARO-HCP/internal/api"
3332
"github.com/Azure/ARO-HCP/internal/api/arm"
34-
"github.com/Azure/ARO-HCP/internal/database"
33+
"github.com/Azure/ARO-HCP/internal/databasetesting"
3534
"github.com/Azure/ARO-HCP/internal/ocm"
3635
"github.com/Azure/ARO-HCP/internal/utils"
3736
)
@@ -51,179 +50,111 @@ func TestSerialConsoleHandler(t *testing.T) {
5150
name string
5251
resourceID string
5352
vmName string
54-
setupMocks func(*gomock.Controller) (database.DBClient, ocm.ClusterServiceClientSpec, *mockFPACredentialRetriever)
53+
setupData func(context.Context, *testing.T, *databasetesting.MockDBClient, *azcorearm.ResourceID)
54+
mockFPA *mockFPACredentialRetriever
5555
expectedStatusCode int
5656
expectedError string
5757
}{
5858
{
5959
name: "missing vmName parameter",
6060
resourceID: api.TestClusterResourceID,
6161
vmName: "",
62-
setupMocks: func(ctrl *gomock.Controller) (database.DBClient, ocm.ClusterServiceClientSpec, *mockFPACredentialRetriever) {
63-
return database.NewMockDBClient(ctrl), ocm.NewMockClusterServiceClientSpec(ctrl), &mockFPACredentialRetriever{}
62+
setupData: func(ctx context.Context, t *testing.T, mockDB *databasetesting.MockDBClient, resourceID *azcorearm.ResourceID) {
6463
},
64+
mockFPA: &mockFPACredentialRetriever{},
6565
expectedStatusCode: http.StatusBadRequest,
6666
expectedError: "vmName query parameter is required",
6767
},
6868
{
6969
name: "invalid vmName format",
7070
resourceID: api.TestClusterResourceID,
7171
vmName: "-invalid-vm-name",
72-
setupMocks: func(ctrl *gomock.Controller) (database.DBClient, ocm.ClusterServiceClientSpec, *mockFPACredentialRetriever) {
73-
return database.NewMockDBClient(ctrl), ocm.NewMockClusterServiceClientSpec(ctrl), &mockFPACredentialRetriever{}
72+
setupData: func(ctx context.Context, t *testing.T, mockDB *databasetesting.MockDBClient, resourceID *azcorearm.ResourceID) {
7473
},
74+
mockFPA: &mockFPACredentialRetriever{},
7575
expectedStatusCode: http.StatusBadRequest,
7676
expectedError: "vmName contains invalid characters or format",
7777
},
78-
{
79-
name: "HCP cluster not found in database (generic error)",
80-
resourceID: api.TestClusterResourceID,
81-
vmName: "test-vm",
82-
setupMocks: func(ctrl *gomock.Controller) (database.DBClient, ocm.ClusterServiceClientSpec, *mockFPACredentialRetriever) {
83-
mockDB := database.NewMockDBClient(ctrl)
84-
mockCRUD := database.NewMockHCPClusterCRUD(ctrl)
85-
86-
resourceID, _ := azcorearm.ParseResourceID(api.TestClusterResourceID)
87-
mockDB.EXPECT().
88-
HCPClusters(resourceID.SubscriptionID, resourceID.ResourceGroupName).
89-
Return(mockCRUD)
90-
mockCRUD.EXPECT().
91-
Get(gomock.Any(), resourceID.Name).
92-
Return(nil, fmt.Errorf("failed to get HCP from database: cluster not found"))
93-
94-
return mockDB, ocm.NewMockClusterServiceClientSpec(ctrl), &mockFPACredentialRetriever{}
95-
},
96-
expectedStatusCode: http.StatusInternalServerError,
97-
expectedError: "failed to get HCP from database",
98-
},
9978
{
10079
name: "HCP cluster not found in database (404 ResponseError)",
10180
resourceID: api.TestClusterResourceID,
10281
vmName: "test-vm",
103-
setupMocks: func(ctrl *gomock.Controller) (database.DBClient, ocm.ClusterServiceClientSpec, *mockFPACredentialRetriever) {
104-
mockDB := database.NewMockDBClient(ctrl)
105-
mockCRUD := database.NewMockHCPClusterCRUD(ctrl)
106-
107-
resourceID, _ := azcorearm.ParseResourceID(api.TestClusterResourceID)
108-
mockDB.EXPECT().
109-
HCPClusters(resourceID.SubscriptionID, resourceID.ResourceGroupName).
110-
Return(mockCRUD)
111-
mockCRUD.EXPECT().
112-
Get(gomock.Any(), resourceID.Name).
113-
Return(nil, &azcore.ResponseError{StatusCode: http.StatusNotFound})
114-
115-
return mockDB, ocm.NewMockClusterServiceClientSpec(ctrl), &mockFPACredentialRetriever{}
82+
setupData: func(ctx context.Context, t *testing.T, mockDB *databasetesting.MockDBClient, resourceID *azcorearm.ResourceID) {
11683
},
84+
mockFPA: &mockFPACredentialRetriever{},
11785
expectedStatusCode: http.StatusInternalServerError,
118-
expectedError: "failed to get HCP from database", // Wrapped error, ReportError converts to 404 ResourceNotFoundError
86+
expectedError: "failed to get HCP from database",
11987
},
12088
{
12189
name: "subscription not found",
12290
resourceID: api.TestClusterResourceID,
12391
vmName: "test-vm",
124-
setupMocks: func(ctrl *gomock.Controller) (database.DBClient, ocm.ClusterServiceClientSpec, *mockFPACredentialRetriever) {
125-
mockDB := database.NewMockDBClient(ctrl)
126-
mockCRUD := database.NewMockHCPClusterCRUD(ctrl)
127-
mockSubscriptionCRUD := database.NewMockSubscriptionCRUD(ctrl)
128-
129-
resourceID, _ := azcorearm.ParseResourceID(api.TestClusterResourceID)
130-
131-
hcp := &api.HCPOpenShiftCluster{}
132-
133-
mockDB.EXPECT().
134-
HCPClusters(resourceID.SubscriptionID, resourceID.ResourceGroupName).
135-
Return(mockCRUD)
136-
mockCRUD.EXPECT().
137-
Get(gomock.Any(), resourceID.Name).
138-
Return(hcp, nil)
139-
140-
// Mock subscription not found
141-
mockDB.EXPECT().
142-
Subscriptions().
143-
Return(mockSubscriptionCRUD)
144-
mockSubscriptionCRUD.EXPECT().
145-
Get(gomock.Any(), resourceID.SubscriptionID).
146-
Return(nil, &azcore.ResponseError{StatusCode: http.StatusNotFound})
147-
148-
return mockDB, ocm.NewMockClusterServiceClientSpec(ctrl), &mockFPACredentialRetriever{}
92+
setupData: func(ctx context.Context, t *testing.T, mockDB *databasetesting.MockDBClient, resourceID *azcorearm.ResourceID) {
93+
// Create HCP cluster with InternalID
94+
internalID, err := api.NewInternalID("/api/clusters_mgmt/v1/clusters/test-cluster-id")
95+
if err != nil {
96+
t.Fatalf("Failed to create InternalID: %v", err)
97+
}
98+
hcp := &api.HCPOpenShiftCluster{
99+
TrackedResource: arm.TrackedResource{
100+
Resource: arm.Resource{ID: resourceID},
101+
},
102+
ServiceProviderProperties: api.HCPOpenShiftClusterServiceProviderProperties{
103+
ClusterServiceID: internalID,
104+
},
105+
}
106+
_, err = mockDB.HCPClusters(resourceID.SubscriptionID, resourceID.ResourceGroupName).Create(ctx, hcp, nil)
107+
if err != nil {
108+
t.Fatalf("Failed to create HCP cluster: %v", err)
109+
}
149110
},
111+
mockFPA: &mockFPACredentialRetriever{},
150112
expectedStatusCode: http.StatusNotFound,
151113
expectedError: "not found",
152114
},
153-
{
154-
name: "subscription retrieval fails (generic error)",
155-
resourceID: api.TestClusterResourceID,
156-
vmName: "test-vm",
157-
setupMocks: func(ctrl *gomock.Controller) (database.DBClient, ocm.ClusterServiceClientSpec, *mockFPACredentialRetriever) {
158-
mockDB := database.NewMockDBClient(ctrl)
159-
mockCRUD := database.NewMockHCPClusterCRUD(ctrl)
160-
mockSubscriptionCRUD := database.NewMockSubscriptionCRUD(ctrl)
161-
162-
resourceID, _ := azcorearm.ParseResourceID(api.TestClusterResourceID)
163-
164-
hcp := &api.HCPOpenShiftCluster{}
165-
166-
mockDB.EXPECT().
167-
HCPClusters(resourceID.SubscriptionID, resourceID.ResourceGroupName).
168-
Return(mockCRUD)
169-
mockCRUD.EXPECT().
170-
Get(gomock.Any(), resourceID.Name).
171-
Return(hcp, nil)
172-
173-
// Mock subscription retrieval error
174-
mockDB.EXPECT().
175-
Subscriptions().
176-
Return(mockSubscriptionCRUD)
177-
mockSubscriptionCRUD.EXPECT().
178-
Get(gomock.Any(), resourceID.SubscriptionID).
179-
Return(nil, fmt.Errorf("database error"))
180-
181-
return mockDB, ocm.NewMockClusterServiceClientSpec(ctrl), &mockFPACredentialRetriever{}
182-
},
183-
expectedStatusCode: http.StatusInternalServerError,
184-
expectedError: "database error",
185-
},
186115
{
187116
name: "FPA credential retrieval fails",
188117
resourceID: api.TestClusterResourceID,
189118
vmName: "test-vm",
190-
setupMocks: func(ctrl *gomock.Controller) (database.DBClient, ocm.ClusterServiceClientSpec, *mockFPACredentialRetriever) {
191-
mockDB := database.NewMockDBClient(ctrl)
192-
mockCRUD := database.NewMockHCPClusterCRUD(ctrl)
193-
mockSubscriptionCRUD := database.NewMockSubscriptionCRUD(ctrl)
194-
195-
resourceID, _ := azcorearm.ParseResourceID(api.TestClusterResourceID)
196-
197-
hcp := &api.HCPOpenShiftCluster{}
198-
199-
mockDB.EXPECT().
200-
HCPClusters(resourceID.SubscriptionID, resourceID.ResourceGroupName).
201-
Return(mockCRUD)
202-
mockCRUD.EXPECT().
203-
Get(gomock.Any(), resourceID.Name).
204-
Return(hcp, nil)
119+
setupData: func(ctx context.Context, t *testing.T, mockDB *databasetesting.MockDBClient, resourceID *azcorearm.ResourceID) {
120+
// Create HCP cluster with InternalID
121+
internalID, err := api.NewInternalID("/api/clusters_mgmt/v1/clusters/test-cluster-id")
122+
if err != nil {
123+
t.Fatalf("Failed to create InternalID: %v", err)
124+
}
125+
hcp := &api.HCPOpenShiftCluster{
126+
TrackedResource: arm.TrackedResource{
127+
Resource: arm.Resource{ID: resourceID},
128+
},
129+
ServiceProviderProperties: api.HCPOpenShiftClusterServiceProviderProperties{
130+
ClusterServiceID: internalID,
131+
},
132+
}
133+
_, err = mockDB.HCPClusters(resourceID.SubscriptionID, resourceID.ResourceGroupName).Create(ctx, hcp, nil)
134+
if err != nil {
135+
t.Fatalf("Failed to create HCP cluster: %v", err)
136+
}
205137

206-
// Mock subscription with tenant ID
138+
// Create subscription with tenant ID
207139
tenantID := "test-tenant-id"
140+
subscriptionResourceID := api.Must(azcorearm.ParseResourceID("/subscriptions/" + resourceID.SubscriptionID))
208141
subscription := &arm.Subscription{
142+
CosmosMetadata: arm.CosmosMetadata{
143+
ResourceID: subscriptionResourceID,
144+
},
145+
ResourceID: subscriptionResourceID,
146+
State: arm.SubscriptionStateRegistered,
209147
Properties: &arm.SubscriptionProperties{
210148
TenantId: &tenantID,
211149
},
212150
}
213-
214-
mockDB.EXPECT().
215-
Subscriptions().
216-
Return(mockSubscriptionCRUD)
217-
mockSubscriptionCRUD.EXPECT().
218-
Get(gomock.Any(), resourceID.SubscriptionID).
219-
Return(subscription, nil)
220-
221-
// Mock FPA failure
222-
mockFPA := &mockFPACredentialRetriever{
223-
err: fmt.Errorf("failed to get FPA credentials"),
151+
_, err = mockDB.Subscriptions().Create(ctx, subscription, nil)
152+
if err != nil {
153+
t.Fatalf("Failed to create subscription: %v", err)
224154
}
225-
226-
return mockDB, ocm.NewMockClusterServiceClientSpec(ctrl), mockFPA
155+
},
156+
mockFPA: &mockFPACredentialRetriever{
157+
err: fmt.Errorf("failed to get FPA credentials"),
227158
},
228159
expectedStatusCode: http.StatusInternalServerError,
229160
expectedError: "failed to retrieve Azure credentials",
@@ -233,20 +164,23 @@ func TestSerialConsoleHandler(t *testing.T) {
233164
for _, tt := range tests {
234165
t.Run(tt.name, func(t *testing.T) {
235166
ctx := utils.ContextWithLogger(context.Background(), testr.New(t))
236-
ctrl := gomock.NewController(t)
237-
defer ctrl.Finish()
238-
239-
// Setup mocks
240-
mockDB, mockCS, mockFPA := tt.setupMocks(ctrl)
241167

242-
// Create handler
243-
handler := NewHCPSerialConsoleHandler(mockDB, mockCS, mockFPA)
168+
// Setup database and test data
169+
mockDB := databasetesting.NewMockDBClient()
170+
mockCS := ocm.NewMockClusterServiceClientSpec(nil)
244171

245172
// Parse resource ID and add to context
246173
resourceID, err := azcorearm.ParseResourceID(tt.resourceID)
247174
if err != nil {
248175
t.Fatalf("Failed to parse resource ID: %v", err)
249176
}
177+
178+
// Setup test data
179+
tt.setupData(ctx, t, mockDB, resourceID)
180+
181+
// Create handler
182+
handler := NewHCPSerialConsoleHandler(mockDB, mockCS, tt.mockFPA)
183+
250184
ctx = utils.ContextWithResourceID(ctx, resourceID)
251185

252186
// Create request
@@ -297,11 +231,9 @@ func TestSerialConsoleHandler(t *testing.T) {
297231

298232
func TestSerialConsoleHandler_InvalidResourceID(t *testing.T) {
299233
ctx := utils.ContextWithLogger(context.Background(), testr.New(t))
300-
ctrl := gomock.NewController(t)
301-
defer ctrl.Finish()
302234

303-
mockDB := database.NewMockDBClient(ctrl)
304-
mockCS := ocm.NewMockClusterServiceClientSpec(ctrl)
235+
mockDB := databasetesting.NewMockDBClient()
236+
mockCS := ocm.NewMockClusterServiceClientSpec(nil)
305237
mockFPA := &mockFPACredentialRetriever{}
306238

307239
handler := NewHCPSerialConsoleHandler(mockDB, mockCS, mockFPA)

0 commit comments

Comments
 (0)