### Question:
EtcdDataSource extends AbstractDataSource<String, T> { @Override public String readSource() throws Exception { CompletableFuture<GetResponse> responseFuture = client.getKVClient().get(ByteSequence.from(key, charset)); List<KeyValue> kvs = responseFuture.get().getKvs(); return kvs.size() == 0 ? null : kvs.get(0).getValue().toString(charset); } EtcdDataSource(String key, Converter<String, T> parser); @Override String readSource(); @Override void close();  }### Answer:
@Test public void testReadSource() throws Exception { EtcdDataSource dataSource = new EtcdDataSource("foo", value -> value); KV kvClient = Client.builder() .endpoints(endPoints) .build().getKVClient(); kvClient.put(ByteSequence.from("foo".getBytes()), ByteSequence.from("test".getBytes())); Assert.assertNotNull(dataSource.readSource().equals("test")); kvClient.put(ByteSequence.from("foo".getBytes()), ByteSequence.from("test2".getBytes())); Assert.assertNotNull(dataSource.getProperty().equals("test2")); }