@@ -52,17 +52,17 @@ public void repairResource_ok() throws Exception {
5252 CloudResourceUid cloudResourceUid = new CloudResourceUid ().googleProjectUid (googleProjectUid );
5353
5454 Pool mockPool = Pool .builder ()
55- .id (PoolId .create ("test-pool " ))
55+ .id (PoolId .create ("test-pool_v1 " ))
5656 .size (10 )
57- .resourceConfig (new ResourceConfig ()) // Use appropriate resource config
57+ .resourceConfig (new ResourceConfig ())
5858 .creation (BufferDao .currentInstant ())
5959 .resourceType (ResourceType .GOOGLE_PROJECT )
6060 .status (PoolStatus .ACTIVE )
6161 .build ();
6262
6363 Resource mockResource = Resource .builder ()
6464 .id (ResourceId .create (UUID .randomUUID ()))
65- .poolId (PoolId .create ("test-pool " ))
65+ .poolId (PoolId .create ("test-pool_v1 " ))
6666 .cloudResourceUid (cloudResourceUid )
6767 .creation (BufferDao .currentInstant ())
6868 .state (ResourceState .HANDED_OUT )
@@ -71,7 +71,7 @@ public void repairResource_ok() throws Exception {
7171
7272 Mockito .when (bufferDao .retrieveResource (cloudResourceUid ))
7373 .thenReturn (Optional .of (mockResource ));
74- Mockito .when (mockBufferDAO .retrievePool ( mockResource . poolId () ))
74+ Mockito .when (mockBufferDAO .retrieveLatestActivePoolByFamily ( "test-pool" ))
7575 .thenReturn (Optional .of (mockPool ));
7676 Mockito .when (mockFlightScheduler .submitRepairResourceFlight (mockPool , googleProjectUid ))
7777 .thenReturn (Optional .of ("flight-123" ));
@@ -89,7 +89,7 @@ public void repairResource_ok() throws Exception {
8989 .perform (
9090 post ("/api/resource/v1/" + projectId + "/repair" )
9191 .contentType (MediaType .APPLICATION_JSON )
92- .content ("{}" )) // no request body is needed for this endpoint
92+ .content ("{}" ))
9393 .andExpect (status ().isAccepted ())
9494 .andReturn ()
9595 .getResponse ()
@@ -101,6 +101,63 @@ public void repairResource_ok() throws Exception {
101101 assertEquals (JobModel .JobStatusEnum .RUNNING , actualJob .getJobStatus ());
102102 }
103103
104+ @ Test
105+ public void repairResource_usesNewerActivePool () throws Exception {
106+ String projectId = "test-project-id" ;
107+ GoogleProjectUid googleProjectUid = new GoogleProjectUid ().projectId (projectId );
108+ CloudResourceUid cloudResourceUid = new CloudResourceUid ().googleProjectUid (googleProjectUid );
109+
110+ PoolId oldPoolId = PoolId .create ("cwb_ws_prod_v8" );
111+ PoolId newPoolId = PoolId .create ("cwb_ws_prod_v9" );
112+
113+ Pool newerPool = Pool .builder ()
114+ .id (newPoolId )
115+ .size (10 )
116+ .resourceConfig (new ResourceConfig ())
117+ .creation (BufferDao .currentInstant ())
118+ .resourceType (ResourceType .GOOGLE_PROJECT )
119+ .status (PoolStatus .ACTIVE )
120+ .build ();
121+
122+ Resource mockResource = Resource .builder ()
123+ .id (ResourceId .create (UUID .randomUUID ()))
124+ .poolId (oldPoolId )
125+ .cloudResourceUid (cloudResourceUid )
126+ .creation (BufferDao .currentInstant ())
127+ .state (ResourceState .HANDED_OUT )
128+ .requestHandoutId (RequestHandoutId .create ("test-handout-id" ))
129+ .build ();
130+
131+ Mockito .when (bufferDao .retrieveResource (cloudResourceUid ))
132+ .thenReturn (Optional .of (mockResource ));
133+ Mockito .when (mockBufferDAO .retrieveLatestActivePoolByFamily ("cwb_ws_prod" ))
134+ .thenReturn (Optional .of (newerPool ));
135+ Mockito .when (mockFlightScheduler .submitRepairResourceFlight (newerPool , googleProjectUid ))
136+ .thenReturn (Optional .of ("flight-456" ));
137+
138+ JobModel mockJobModel = new JobModel ()
139+ .id ("flight-456" )
140+ .className ("RepairResourceFlight" )
141+ .description ("Repair resource for project " + projectId )
142+ .jobStatus (JobModel .JobStatusEnum .RUNNING )
143+ .statusCode (202 );
144+
145+ Mockito .when (mockJobService .retrieveJob ("flight-456" )).thenReturn (mockJobModel );
146+
147+ String response = this .mvc
148+ .perform (
149+ post ("/api/resource/v1/" + projectId + "/repair" )
150+ .contentType (MediaType .APPLICATION_JSON )
151+ .content ("{}" ))
152+ .andExpect (status ().isAccepted ())
153+ .andReturn ()
154+ .getResponse ()
155+ .getContentAsString ();
156+
157+ JobModel actualJob = objectMapper .readValue (response , JobModel .class );
158+ assertEquals ("flight-456" , actualJob .getId ());
159+ }
160+
104161 @ Test
105162 public void repairResourceProjectNotFound () throws Exception {
106163 String projectId = "fake-project-id" ;
@@ -131,6 +188,8 @@ public void repairResourcePoolNotFound() throws Exception {
131188 .build ();
132189 Mockito .when (bufferDao .retrieveResource (cloudResourceUid ))
133190 .thenReturn (Optional .of (resource ));
191+ Mockito .when (mockBufferDAO .retrieveLatestActivePoolByFamily ("non-existent-pool" ))
192+ .thenReturn (Optional .empty ());
134193 Mockito .when (mockBufferDAO .retrievePool (resource .poolId ()))
135194 .thenThrow (new NotFoundException (String .format ("Pool for this resource does not exist: %s." , resource .poolId ())));
136195 this .mvc
0 commit comments