77import static org .mockito .ArgumentMatchers .any ;
88import static org .mockito .ArgumentMatchers .eq ;
99import static org .mockito .Mockito .RETURNS_DEEP_STUBS ;
10- import static org .mockito .Mockito .doCallRealMethod ;
1110import static org .mockito .Mockito .doReturn ;
1211import static org .mockito .Mockito .doThrow ;
1312import static org .mockito .Mockito .mock ;
2827import com .linkedin .venice .meta .RoutingStrategy ;
2928import com .linkedin .venice .meta .Store ;
3029import com .linkedin .venice .meta .ZKStore ;
30+ import com .linkedin .venice .protocols .controller .ClusterStoreGrpcInfo ;
31+ import com .linkedin .venice .protocols .controller .GetFutureVersionGrpcRequest ;
32+ import com .linkedin .venice .protocols .controller .GetFutureVersionGrpcResponse ;
3133import com .linkedin .venice .pubsub .PubSubTopicRepository ;
3234import com .linkedin .venice .utils .ObjectMapperFactory ;
3335import java .util .Collections ;
@@ -51,20 +53,30 @@ public class StoresRoutesTest {
5153 @ Test
5254 public void testGetFutureVersion () throws Exception {
5355 Admin mockAdmin = mock (VeniceParentHelixAdmin .class );
56+ VeniceControllerRequestHandler mockRequestHandler = mock (VeniceControllerRequestHandler .class );
5457 doReturn (true ).when (mockAdmin ).isLeaderControllerFor (TEST_CLUSTER );
5558
56- Store mockStore = mock (Store .class );
57- doReturn (mockStore ).when (mockAdmin ).getStore (TEST_CLUSTER , TEST_STORE_NAME );
58-
5959 Map <String , String > storeStatusMap = Collections .singletonMap ("dc-0" , "1" );
60- doReturn (storeStatusMap ).when (mockAdmin ).getFutureVersionsForMultiColos (TEST_CLUSTER , TEST_STORE_NAME );
60+
61+ ClusterStoreGrpcInfo storeInfo =
62+ ClusterStoreGrpcInfo .newBuilder ().setClusterName (TEST_CLUSTER ).setStoreName (TEST_STORE_NAME ).build ();
63+ GetFutureVersionGrpcResponse grpcResponse =
64+ GetFutureVersionGrpcResponse .newBuilder ().setStoreInfo (storeInfo ).putAllStoreVersionMap (storeStatusMap ).build ();
65+ when (mockRequestHandler .getFutureVersion (any (GetFutureVersionGrpcRequest .class ))).thenReturn (grpcResponse );
6166
6267 Request request = mock (Request .class );
6368 doReturn (TEST_CLUSTER ).when (request ).queryParams (eq (ControllerApiConstants .CLUSTER ));
6469 doReturn (TEST_STORE_NAME ).when (request ).queryParams (eq (ControllerApiConstants .NAME ));
6570
66- Route getFutureVersionRoute =
67- new StoresRoutes (false , Optional .empty (), pubSubTopicRepository ).getFutureVersion (mockAdmin );
71+ QueryParamsMap queryParamsMap = mock (QueryParamsMap .class );
72+ Map <String , String []> queryMap = new HashMap <>();
73+ queryMap .put (ControllerApiConstants .CLUSTER , new String [] { TEST_CLUSTER });
74+ queryMap .put (ControllerApiConstants .NAME , new String [] { TEST_STORE_NAME });
75+ doReturn (queryMap ).when (queryParamsMap ).toMap ();
76+ doReturn (queryParamsMap ).when (request ).queryMap ();
77+
78+ Route getFutureVersionRoute = new StoresRoutes (false , Optional .empty (), pubSubTopicRepository )
79+ .getFutureVersion (mockAdmin , mockRequestHandler );
6880 MultiStoreStatusResponse multiStoreStatusResponse = ObjectMapperFactory .getInstance ()
6981 .readValue (
7082 getFutureVersionRoute .handle (request , mock (Response .class )).toString (),
@@ -199,42 +211,41 @@ public void testCleanExecutionIds() throws Exception {
199211 @ Test
200212 public void testGetFutureVersionForChildController () throws Exception {
201213 Admin mockAdmin = mock (VeniceHelixAdmin .class );
214+ VeniceControllerRequestHandler mockRequestHandler = mock (VeniceControllerRequestHandler .class );
202215 doReturn (true ).when (mockAdmin ).isLeaderControllerFor (TEST_CLUSTER );
203216
204- Store mockStore = mock (Store .class );
205- doReturn (mockStore ).when (mockAdmin ).getStore (TEST_CLUSTER , TEST_STORE_NAME );
206-
207- doCallRealMethod ().when (mockAdmin ).getFutureVersionsForMultiColos (TEST_CLUSTER , TEST_STORE_NAME );
208- doReturn (1 ).when (mockAdmin ).getFutureVersion (TEST_CLUSTER , TEST_STORE_NAME );
217+ Map <String , String > storeStatusMap = Collections .singletonMap (TEST_STORE_NAME , "1" );
218+ ClusterStoreGrpcInfo storeInfo =
219+ ClusterStoreGrpcInfo .newBuilder ().setClusterName (TEST_CLUSTER ).setStoreName (TEST_STORE_NAME ).build ();
220+ GetFutureVersionGrpcResponse grpcResponse =
221+ GetFutureVersionGrpcResponse .newBuilder ().setStoreInfo (storeInfo ).putAllStoreVersionMap (storeStatusMap ).build ();
222+ when (mockRequestHandler .getFutureVersion (any (GetFutureVersionGrpcRequest .class ))).thenReturn (grpcResponse );
209223
210224 Request request = mock (Request .class );
211225 doReturn (TEST_CLUSTER ).when (request ).queryParams (eq (ControllerApiConstants .CLUSTER ));
212226 doReturn (TEST_STORE_NAME ).when (request ).queryParams (eq (ControllerApiConstants .NAME ));
213227
214- Route getFutureVersionRoute =
215- new StoresRoutes (false , Optional .empty (), pubSubTopicRepository ).getFutureVersion (mockAdmin );
228+ QueryParamsMap queryParamsMap = mock (QueryParamsMap .class );
229+ Map <String , String []> queryMap = new HashMap <>();
230+ queryMap .put (ControllerApiConstants .CLUSTER , new String [] { TEST_CLUSTER });
231+ queryMap .put (ControllerApiConstants .NAME , new String [] { TEST_STORE_NAME });
232+ doReturn (queryMap ).when (queryParamsMap ).toMap ();
233+ doReturn (queryParamsMap ).when (request ).queryMap ();
234+
235+ Route getFutureVersionRoute = new StoresRoutes (false , Optional .empty (), pubSubTopicRepository )
236+ .getFutureVersion (mockAdmin , mockRequestHandler );
216237 MultiStoreStatusResponse multiStoreStatusResponse = ObjectMapperFactory .getInstance ()
217238 .readValue (
218239 getFutureVersionRoute .handle (request , mock (Response .class )).toString (),
219240 MultiStoreStatusResponse .class );
220241 Assert .assertEquals (multiStoreStatusResponse .getCluster (), TEST_CLUSTER );
221242 Assert .assertEquals (multiStoreStatusResponse .getStoreStatusMap (), Collections .singletonMap (TEST_STORE_NAME , "1" ));
222-
223- doCallRealMethod ().when (mockAdmin ).getBackupVersionsForMultiColos (TEST_CLUSTER , TEST_STORE_NAME );
224- doReturn (2 ).when (mockAdmin ).getBackupVersion (TEST_CLUSTER , TEST_STORE_NAME );
225- Route getBackupVersionRoute =
226- new StoresRoutes (false , Optional .empty (), pubSubTopicRepository ).getBackupVersion (mockAdmin );
227- multiStoreStatusResponse = ObjectMapperFactory .getInstance ()
228- .readValue (
229- getBackupVersionRoute .handle (request , mock (Response .class )).toString (),
230- MultiStoreStatusResponse .class );
231- Assert .assertEquals (multiStoreStatusResponse .getCluster (), TEST_CLUSTER );
232- Assert .assertEquals (multiStoreStatusResponse .getStoreStatusMap (), Collections .singletonMap (TEST_STORE_NAME , "2" ));
233243 }
234244
235245 @ Test
236246 public void testGetFutureVersionWhenNotLeaderController () throws Exception {
237247 Admin mockAdmin = mock (VeniceParentHelixAdmin .class );
248+ VeniceControllerRequestHandler mockRequestHandler = mock (VeniceControllerRequestHandler .class );
238249 doReturn (false ).when (mockAdmin ).isLeaderControllerFor (TEST_CLUSTER );
239250
240251 Store mockStore = mock (Store .class );
@@ -253,8 +264,8 @@ public void testGetFutureVersionWhenNotLeaderController() throws Exception {
253264 doReturn (queryMap ).when (queryParamsMap ).toMap ();
254265 doReturn (queryParamsMap ).when (request ).queryMap ();
255266
256- Route getFutureVersionRoute =
257- new StoresRoutes ( false , Optional . empty (), pubSubTopicRepository ). getFutureVersion (mockAdmin );
267+ Route getFutureVersionRoute = new StoresRoutes ( false , Optional . empty (), pubSubTopicRepository )
268+ . getFutureVersion (mockAdmin , mockRequestHandler );
258269 MultiStoreStatusResponse multiStoreStatusResponse = ObjectMapperFactory .getInstance ()
259270 .readValue (
260271 getFutureVersionRoute .handle (request , mock (Response .class )).toString (),
@@ -266,9 +277,11 @@ public void testGetFutureVersionWhenNotLeaderController() throws Exception {
266277 @ Test
267278 public void testGetFutureVersionWhenStoreNotExist () throws Exception {
268279 Admin mockAdmin = mock (VeniceParentHelixAdmin .class );
280+ VeniceControllerRequestHandler mockRequestHandler = mock (VeniceControllerRequestHandler .class );
269281 doReturn (true ).when (mockAdmin ).isLeaderControllerFor (TEST_CLUSTER );
270282
271- doReturn (null ).when (mockAdmin ).getStore (TEST_CLUSTER , TEST_STORE_NAME );
283+ when (mockRequestHandler .getFutureVersion (any (GetFutureVersionGrpcRequest .class )))
284+ .thenThrow (new com .linkedin .venice .exceptions .VeniceNoStoreException (TEST_STORE_NAME ));
272285
273286 Request request = mock (Request .class );
274287 doReturn (TEST_CLUSTER ).when (request ).queryParams (eq (ControllerApiConstants .CLUSTER ));
@@ -283,8 +296,8 @@ public void testGetFutureVersionWhenStoreNotExist() throws Exception {
283296 doReturn (queryMap ).when (queryParamsMap ).toMap ();
284297 doReturn (queryParamsMap ).when (request ).queryMap ();
285298
286- Route getFutureVersionRoute =
287- new StoresRoutes ( false , Optional . empty (), pubSubTopicRepository ). getFutureVersion (mockAdmin );
299+ Route getFutureVersionRoute = new StoresRoutes ( false , Optional . empty (), pubSubTopicRepository )
300+ . getFutureVersion (mockAdmin , mockRequestHandler );
288301 MultiStoreStatusResponse multiStoreStatusResponse = ObjectMapperFactory .getInstance ()
289302 .readValue (
290303 getFutureVersionRoute .handle (request , mock (Response .class )).toString (),
0 commit comments