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 ;
3736import com .linkedin .venice .meta .StoreInfo ;
3837import com .linkedin .venice .meta .ZKStore ;
3938import com .linkedin .venice .protocols .controller .ClusterStoreGrpcInfo ;
39+ import com .linkedin .venice .protocols .controller .GetFutureVersionGrpcRequest ;
40+ import com .linkedin .venice .protocols .controller .GetFutureVersionGrpcResponse ;
4041import com .linkedin .venice .protocols .controller .ListStoresGrpcRequest ;
4142import com .linkedin .venice .protocols .controller .ListStoresGrpcResponse ;
4243import com .linkedin .venice .protocols .controller .ValidateStoreDeletedGrpcRequest ;
@@ -66,20 +67,30 @@ public class StoresRoutesTest {
6667 @ Test
6768 public void testGetFutureVersion () throws Exception {
6869 Admin mockAdmin = mock (VeniceParentHelixAdmin .class );
70+ VeniceControllerRequestHandler mockRequestHandler = mock (VeniceControllerRequestHandler .class );
6971 doReturn (true ).when (mockAdmin ).isLeaderControllerFor (TEST_CLUSTER );
7072
71- Store mockStore = mock (Store .class );
72- doReturn (mockStore ).when (mockAdmin ).getStore (TEST_CLUSTER , TEST_STORE_NAME );
73-
7473 Map <String , String > storeStatusMap = Collections .singletonMap ("dc-0" , "1" );
75- doReturn (storeStatusMap ).when (mockAdmin ).getFutureVersionsForMultiColos (TEST_CLUSTER , TEST_STORE_NAME );
74+
75+ ClusterStoreGrpcInfo storeInfo =
76+ ClusterStoreGrpcInfo .newBuilder ().setClusterName (TEST_CLUSTER ).setStoreName (TEST_STORE_NAME ).build ();
77+ GetFutureVersionGrpcResponse grpcResponse =
78+ GetFutureVersionGrpcResponse .newBuilder ().setStoreInfo (storeInfo ).putAllStoreVersionMap (storeStatusMap ).build ();
79+ when (mockRequestHandler .getFutureVersion (any (GetFutureVersionGrpcRequest .class ))).thenReturn (grpcResponse );
7680
7781 Request request = mock (Request .class );
7882 doReturn (TEST_CLUSTER ).when (request ).queryParams (eq (ControllerApiConstants .CLUSTER ));
7983 doReturn (TEST_STORE_NAME ).when (request ).queryParams (eq (ControllerApiConstants .NAME ));
8084
81- Route getFutureVersionRoute =
82- new StoresRoutes (false , Optional .empty (), pubSubTopicRepository ).getFutureVersion (mockAdmin );
85+ QueryParamsMap queryParamsMap = mock (QueryParamsMap .class );
86+ Map <String , String []> queryMap = new HashMap <>();
87+ queryMap .put (ControllerApiConstants .CLUSTER , new String [] { TEST_CLUSTER });
88+ queryMap .put (ControllerApiConstants .NAME , new String [] { TEST_STORE_NAME });
89+ doReturn (queryMap ).when (queryParamsMap ).toMap ();
90+ doReturn (queryParamsMap ).when (request ).queryMap ();
91+
92+ Route getFutureVersionRoute = new StoresRoutes (false , Optional .empty (), pubSubTopicRepository )
93+ .getFutureVersion (mockAdmin , mockRequestHandler );
8394 MultiStoreStatusResponse multiStoreStatusResponse = ObjectMapperFactory .getInstance ()
8495 .readValue (
8596 getFutureVersionRoute .handle (request , mock (Response .class )).toString (),
@@ -214,42 +225,41 @@ public void testCleanExecutionIds() throws Exception {
214225 @ Test
215226 public void testGetFutureVersionForChildController () throws Exception {
216227 Admin mockAdmin = mock (VeniceHelixAdmin .class );
228+ VeniceControllerRequestHandler mockRequestHandler = mock (VeniceControllerRequestHandler .class );
217229 doReturn (true ).when (mockAdmin ).isLeaderControllerFor (TEST_CLUSTER );
218230
219- Store mockStore = mock (Store .class );
220- doReturn (mockStore ).when (mockAdmin ).getStore (TEST_CLUSTER , TEST_STORE_NAME );
221-
222- doCallRealMethod ().when (mockAdmin ).getFutureVersionsForMultiColos (TEST_CLUSTER , TEST_STORE_NAME );
223- doReturn (1 ).when (mockAdmin ).getFutureVersion (TEST_CLUSTER , TEST_STORE_NAME );
231+ Map <String , String > storeStatusMap = Collections .singletonMap (TEST_STORE_NAME , "1" );
232+ ClusterStoreGrpcInfo storeInfo =
233+ ClusterStoreGrpcInfo .newBuilder ().setClusterName (TEST_CLUSTER ).setStoreName (TEST_STORE_NAME ).build ();
234+ GetFutureVersionGrpcResponse grpcResponse =
235+ GetFutureVersionGrpcResponse .newBuilder ().setStoreInfo (storeInfo ).putAllStoreVersionMap (storeStatusMap ).build ();
236+ when (mockRequestHandler .getFutureVersion (any (GetFutureVersionGrpcRequest .class ))).thenReturn (grpcResponse );
224237
225238 Request request = mock (Request .class );
226239 doReturn (TEST_CLUSTER ).when (request ).queryParams (eq (ControllerApiConstants .CLUSTER ));
227240 doReturn (TEST_STORE_NAME ).when (request ).queryParams (eq (ControllerApiConstants .NAME ));
228241
229- Route getFutureVersionRoute =
230- new StoresRoutes (false , Optional .empty (), pubSubTopicRepository ).getFutureVersion (mockAdmin );
242+ QueryParamsMap queryParamsMap = mock (QueryParamsMap .class );
243+ Map <String , String []> queryMap = new HashMap <>();
244+ queryMap .put (ControllerApiConstants .CLUSTER , new String [] { TEST_CLUSTER });
245+ queryMap .put (ControllerApiConstants .NAME , new String [] { TEST_STORE_NAME });
246+ doReturn (queryMap ).when (queryParamsMap ).toMap ();
247+ doReturn (queryParamsMap ).when (request ).queryMap ();
248+
249+ Route getFutureVersionRoute = new StoresRoutes (false , Optional .empty (), pubSubTopicRepository )
250+ .getFutureVersion (mockAdmin , mockRequestHandler );
231251 MultiStoreStatusResponse multiStoreStatusResponse = ObjectMapperFactory .getInstance ()
232252 .readValue (
233253 getFutureVersionRoute .handle (request , mock (Response .class )).toString (),
234254 MultiStoreStatusResponse .class );
235255 Assert .assertEquals (multiStoreStatusResponse .getCluster (), TEST_CLUSTER );
236256 Assert .assertEquals (multiStoreStatusResponse .getStoreStatusMap (), Collections .singletonMap (TEST_STORE_NAME , "1" ));
237-
238- doCallRealMethod ().when (mockAdmin ).getBackupVersionsForMultiColos (TEST_CLUSTER , TEST_STORE_NAME );
239- doReturn (2 ).when (mockAdmin ).getBackupVersion (TEST_CLUSTER , TEST_STORE_NAME );
240- Route getBackupVersionRoute =
241- new StoresRoutes (false , Optional .empty (), pubSubTopicRepository ).getBackupVersion (mockAdmin );
242- multiStoreStatusResponse = ObjectMapperFactory .getInstance ()
243- .readValue (
244- getBackupVersionRoute .handle (request , mock (Response .class )).toString (),
245- MultiStoreStatusResponse .class );
246- Assert .assertEquals (multiStoreStatusResponse .getCluster (), TEST_CLUSTER );
247- Assert .assertEquals (multiStoreStatusResponse .getStoreStatusMap (), Collections .singletonMap (TEST_STORE_NAME , "2" ));
248257 }
249258
250259 @ Test
251260 public void testGetFutureVersionWhenNotLeaderController () throws Exception {
252261 Admin mockAdmin = mock (VeniceParentHelixAdmin .class );
262+ VeniceControllerRequestHandler mockRequestHandler = mock (VeniceControllerRequestHandler .class );
253263 doReturn (false ).when (mockAdmin ).isLeaderControllerFor (TEST_CLUSTER );
254264
255265 Store mockStore = mock (Store .class );
@@ -268,8 +278,8 @@ public void testGetFutureVersionWhenNotLeaderController() throws Exception {
268278 doReturn (queryMap ).when (queryParamsMap ).toMap ();
269279 doReturn (queryParamsMap ).when (request ).queryMap ();
270280
271- Route getFutureVersionRoute =
272- new StoresRoutes ( false , Optional . empty (), pubSubTopicRepository ). getFutureVersion (mockAdmin );
281+ Route getFutureVersionRoute = new StoresRoutes ( false , Optional . empty (), pubSubTopicRepository )
282+ . getFutureVersion (mockAdmin , mockRequestHandler );
273283 MultiStoreStatusResponse multiStoreStatusResponse = ObjectMapperFactory .getInstance ()
274284 .readValue (
275285 getFutureVersionRoute .handle (request , mock (Response .class )).toString (),
@@ -281,9 +291,11 @@ public void testGetFutureVersionWhenNotLeaderController() throws Exception {
281291 @ Test
282292 public void testGetFutureVersionWhenStoreNotExist () throws Exception {
283293 Admin mockAdmin = mock (VeniceParentHelixAdmin .class );
294+ VeniceControllerRequestHandler mockRequestHandler = mock (VeniceControllerRequestHandler .class );
284295 doReturn (true ).when (mockAdmin ).isLeaderControllerFor (TEST_CLUSTER );
285296
286- doReturn (null ).when (mockAdmin ).getStore (TEST_CLUSTER , TEST_STORE_NAME );
297+ when (mockRequestHandler .getFutureVersion (any (GetFutureVersionGrpcRequest .class )))
298+ .thenThrow (new com .linkedin .venice .exceptions .VeniceNoStoreException (TEST_STORE_NAME ));
287299
288300 Request request = mock (Request .class );
289301 doReturn (TEST_CLUSTER ).when (request ).queryParams (eq (ControllerApiConstants .CLUSTER ));
@@ -298,8 +310,8 @@ public void testGetFutureVersionWhenStoreNotExist() throws Exception {
298310 doReturn (queryMap ).when (queryParamsMap ).toMap ();
299311 doReturn (queryParamsMap ).when (request ).queryMap ();
300312
301- Route getFutureVersionRoute =
302- new StoresRoutes ( false , Optional . empty (), pubSubTopicRepository ). getFutureVersion (mockAdmin );
313+ Route getFutureVersionRoute = new StoresRoutes ( false , Optional . empty (), pubSubTopicRepository )
314+ . getFutureVersion (mockAdmin , mockRequestHandler );
303315 MultiStoreStatusResponse multiStoreStatusResponse = ObjectMapperFactory .getInstance ()
304316 .readValue (
305317 getFutureVersionRoute .handle (request , mock (Response .class )).toString (),
0 commit comments