package edu.uw.zookeeper.server;
import static org.junit.Assert.*;
import java.util.concurrent.TimeUnit;
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.util.concurrent.ListenableFuture;
import edu.uw.zookeeper.ZNodeTrieExecutor;
import edu.uw.zookeeper.client.SessionClientExecutor;
import edu.uw.zookeeper.data.LockableZNodeCache;
import edu.uw.zookeeper.data.ZNodeCache;
import edu.uw.zookeeper.client.SubmitGenerator;
import edu.uw.zookeeper.common.Generator;
import edu.uw.zookeeper.common.CountingGenerator;
import edu.uw.zookeeper.client.random.RandomRequestGenerator;
import edu.uw.zookeeper.common.Pair;
import edu.uw.zookeeper.protocol.Message;
import edu.uw.zookeeper.protocol.Operation;
import edu.uw.zookeeper.protocol.proto.Records;
@RunWith(JUnit4.class)
public class ZNodeTrieTest {
protected final Logger logger = LogManager.getLogger();
@Test(timeout=10000)
public void testRandom() throws Exception {
ZNodeTrieExecutor executor = ZNodeTrieExecutor.defaults();
LockableZNodeCache<ZNodeCache.SimpleCacheNode, Records.Request, Message.ServerResponse<?>> cache =
LockableZNodeCache.newInstance(SessionClientExecutor.create(1, executor));
int iterations = 100;
Generator<Records.Request> requests = RandomRequestGenerator.fromCache(cache);
CountingGenerator<Pair<Records.Request, ListenableFuture<Message.ServerResponse<?>>>> operations = CountingGenerator.create(
iterations, iterations, SubmitGenerator.create(requests, cache), logger);
while (operations.hasNext()) {
Pair<Records.Request, ListenableFuture<Message.ServerResponse<?>>> operation = operations.next();
assertFalse(operation.second().get(1000, TimeUnit.MILLISECONDS).record() instanceof Operation.Error);
}
}
}