@Around(CLIENT_INTERFACE_BATCH_REMOVE_CONFIG)
    public Object removeConfigByIdsAround(ProceedingJoinPoint pjp, HttpServletRequest request, List<Long> ids)
            throws Throwable {
        final ConfigChangePointCutTypes configChangePointCutType = ConfigChangePointCutTypes.REMOVE_BATCH_HTTP;
        final List<ConfigChangePluginService> pluginServices = getPluginServices(
                configChangePointCutType);
        // didn't enabled or add relative plugin
        if (pluginServices.isEmpty()) {
            return pjp.proceed();
        }
        ConfigChangeRequest configChangeRequest = new ConfigChangeRequest(configChangePointCutType);
        configChangeRequest.setArg("dataId", ids.toString());
        configChangeRequest.setArg("srcIp", RequestUtil.getRemoteIp(request));
        configChangeRequest.setArg("requestIpApp", RequestUtil.getAppName(request));
        configChangeRequest.setArg("use", RequestUtil.getSrcUserName(request));
        return configChangeServiceHandle(pjp, pluginServices, configChangeRequest);
    }
@Test
    void testRemoveConfigByIdsAround() throws Throwable {
        Mockito.when(configChangePluginService.executeType()).thenReturn(ConfigChangeExecuteTypes.EXECUTE_AFTER_TYPE);
        ProceedingJoinPoint proceedingJoinPoint = Mockito.mock(ProceedingJoinPoint.class);
        HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
        
        Mockito.when(proceedingJoinPoint.proceed(any())).thenReturn("mock success return");
        Object o = configChangeAspect.removeConfigByIdsAround(proceedingJoinPoint, request, Arrays.asList(1L, 2L));
        Thread.sleep(20L);
        // expect service executed.
        Mockito.verify(configChangePluginService, Mockito.times(1))
                .execute(any(ConfigChangeRequest.class), any(ConfigChangeResponse.class));
        //expect join point processed success.
        assertEquals("mock success return", o);
    }