### Question:
ZookeeperDataSource extends AbstractDataSource<String, T> { protected CuratorFramework getZkClient() { return this.zkClient; } ZookeeperDataSource(final String serverAddr, final String path, Converter<String, T> parser);  ZookeeperDataSource(final String serverAddr, final String groupId, final String dataId,
                               Converter<String, T> parser);  ZookeeperDataSource(final String serverAddr, final List<AuthInfo> authInfos, final String groupId, final String dataId,
                               Converter<String, T> parser); @Override String readSource(); @Override void close();  }### Answer:
@Test public void testZooKeeperDataSourceSameZkClient() throws Exception { TestingServer server = new TestingServer(21813); server.start(); final String remoteAddress = server.getConnectString(); final String flowPath = "/sentinel-zk-ds-demo/flow-HK"; final String degradePath = "/sentinel-zk-ds-demo/degrade-HK"; ZookeeperDataSource<List<FlowRule>> flowRuleZkDataSource = new ZookeeperDataSource<>(remoteAddress, flowPath, new Converter<String, List<FlowRule>>() { @Override public List<FlowRule> convert(String source) { return JSON.parseObject(source, new TypeReference<List<FlowRule>>() { }); } }); ZookeeperDataSource<List<DegradeRule>> degradeRuleZkDataSource = new ZookeeperDataSource<>(remoteAddress, degradePath, new Converter<String, List<DegradeRule>>() { @Override public List<DegradeRule> convert(String source) { return JSON.parseObject(source, new TypeReference<List<DegradeRule>>() { }); } }); Assert.assertTrue(flowRuleZkDataSource.getZkClient() == degradeRuleZkDataSource.getZkClient()); final String groupId = "sentinel-zk-ds-demo"; final String flowDataId = "flow-HK"; final String degradeDataId = "degrade-HK"; final String scheme = "digest"; final String auth = "root:123456"; AuthInfo authInfo = new AuthInfo(scheme, auth.getBytes()); List<AuthInfo> authInfoList = Collections.singletonList(authInfo); ZookeeperDataSource<List<FlowRule>> flowRuleZkAutoDataSource = new ZookeeperDataSource<List<FlowRule>>(remoteAddress, authInfoList, groupId, flowDataId, new Converter<String, List<FlowRule>>() { @Override public List<FlowRule> convert(String source) { return JSON.parseObject(source, new TypeReference<List<FlowRule>>() { }); } }); ZookeeperDataSource<List<DegradeRule>> degradeRuleZkAutoDataSource = new ZookeeperDataSource<List<DegradeRule>>(remoteAddress, authInfoList, groupId, degradeDataId, new Converter<String, List<DegradeRule>>() { @Override public List<DegradeRule> convert(String source) { return JSON.parseObject(source, new TypeReference<List<DegradeRule>>() { }); } }); Assert.assertTrue(flowRuleZkAutoDataSource.getZkClient() == degradeRuleZkAutoDataSource.getZkClient()); server.stop(); }