@@ -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
298232func 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