View Javadoc

1   package com.atlassian.vcache.internal.test;
2   
3   import com.atlassian.utt.concurrency.Barrier;
4   import org.slf4j.Logger;
5   import org.slf4j.LoggerFactory;
6   
7   import java.util.concurrent.Callable;
8   import java.util.concurrent.CompletableFuture;
9   import java.util.concurrent.ExecutionException;
10  import java.util.concurrent.ExecutorService;
11  import java.util.concurrent.Executors;
12  import java.util.concurrent.Future;
13  
14  public class TestUtils {
15      private static final Logger log = LoggerFactory.getLogger(AbstractStableReadExternalCacheIT.class);
16  
17      private static final ExecutorService EXECUTOR_SERVICE = Executors.newCachedThreadPool();
18  
19      public static <T> CompletableFuture<T> runAndWaitForStart(final Callable<T> r) {
20          final Barrier barrier = new Barrier();
21          log.info("{}: About to submit()", Thread.currentThread().getName());
22          final Future<T> result = EXECUTOR_SERVICE.submit(() -> {
23              log.info("{}: About to signal()", Thread.currentThread().getName());
24              barrier.signal();
25              log.info("{}: resume after signal", Thread.currentThread().getName());
26              return r.call();
27          });
28  
29          log.info("{}: About to await()", Thread.currentThread().getName());
30          barrier.await();
31          log.info("{}: resume after await()", Thread.currentThread().getName());
32  
33          return CompletableFuture.supplyAsync(() -> {
34              try {
35                  return result.get();
36              } catch (InterruptedException | ExecutionException e) {
37                  throw new RuntimeException(e);
38              }
39          });
40      }
41  }