public static <T extends List<?>, U extends List<?>> void waitAdmin2GatewayDataSyncEquals(final ShenyuE2ESupplier<T> adminSupplier,
                                                 final ShenyuE2ESupplier<U> gatewaySupplier, final AdminClient adminClient) throws Exception {
        final String testClassName = Thread.currentThread().getStackTrace()[2].getClassName();
        int retryNum = 0;
        List<?> gatewayDataList = null;
        List<?> adminDataList = adminSupplier.get();
        if (CollectionUtils.isEmpty(adminDataList)) {
            LOGGER.warn("dataSyncEquals test {} adminDataList size is zero sleep 10s... ", testClassName);
            Thread.sleep(10000);
        }
        while (retryNum < 12) {
            adminDataList = adminSupplier.get();
            gatewayDataList = gatewaySupplier.get();
            LOGGER.warn("dataSyncEquals test {} admin size = {} gateway size = {}", testClassName, adminDataList.size(), gatewayDataList.size());
            if (!CollectionUtils.isEmpty(adminDataList) && gatewayDataList.size() == adminDataList.size()) {
                break;
            }
            if (retryNum % 3 == 0) {
                adminClient.syncPluginAll();
            }
            Thread.sleep(10000);
            retryNum++;
        }
        Assertions.assertNotEquals(adminDataList.size(), 0);
        Assertions.assertEquals(adminDataList.size(), gatewayDataList.size());
    }
waitAdmin2GatewayDataSync.

@param adminSupplier adminSupplier
@param gatewaySupplier gatewaySupplier
@param adminClient adminClient
@param <T> List
@param <U> List
@throws Exception Exception
shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/WaitDataSync.java