package edu.uw.zookeeper.client; import static org.junit.Assert.*; import java.util.Set; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import com.google.common.base.Function; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.util.concurrent.Service; import edu.uw.zookeeper.RandomSingleClientTest; import edu.uw.zookeeper.SimpleServerAndClient; import edu.uw.zookeeper.common.ServiceMonitor; import edu.uw.zookeeper.common.TimeValue; import edu.uw.zookeeper.data.AbsoluteZNodePath; import edu.uw.zookeeper.data.LockableZNodeCache; import edu.uw.zookeeper.data.ZNodeCache; import edu.uw.zookeeper.data.ZNodeName; import edu.uw.zookeeper.data.ZNodePath; import edu.uw.zookeeper.protocol.Message; import edu.uw.zookeeper.protocol.Operation; @RunWith(JUnit4.class) public class DeleteSubtreeTest { protected final Logger logger = LogManager.getLogger(this); @Test(timeout=30000) public void testRandom() throws Exception { SimpleServerAndClient client = SimpleServerAndClient.defaults().setDefaults(); ServiceMonitor monitor = client.getRuntimeModule().getServiceMonitor(); for (Service service: client.build()) { monitor.add(service); } monitor.startAsync().awaitRunning(); LockableZNodeCache<ZNodeCache.SimpleCacheNode, Operation.Request, Message.ServerResponse<?>> cache = RandomSingleClientTest.randomCache( 100, TimeValue.milliseconds(5000), client.getClientBuilder().getConnectionClientExecutor(), logger); Set<AbsoluteZNodePath> children = ImmutableSet.copyOf( Iterables.transform( cache.cache().root().keySet(), new Function<ZNodeName,AbsoluteZNodePath>() { @Override public AbsoluteZNodePath apply(ZNodeName input) { return (AbsoluteZNodePath) ZNodePath.root().join(input); } })); assertEquals(children, ImmutableSet.copyOf(DeleteSubtree.deleteChildren(ZNodePath.root(), cache).get())); assertTrue(cache.cache().isEmpty()); monitor.stopAsync().awaitTerminated(); } }