Skip to content

Commit

Permalink
Use a single client instance per primitive test to avoid pollution of…
Browse files Browse the repository at this point in the history
… cluster membership across tests.
  • Loading branch information
kuujo committed May 4, 2018
1 parent 084684a commit 6254745
Showing 1 changed file with 30 additions and 12 deletions.
42 changes: 30 additions & 12 deletions core/src/test/java/io/atomix/core/AbstractPrimitiveTest.java
Expand Up @@ -16,11 +16,12 @@
package io.atomix.core; package io.atomix.core;


import io.atomix.cluster.Member; import io.atomix.cluster.Member;
import io.atomix.cluster.MemberId;
import io.atomix.primitive.protocol.PrimitiveProtocol; import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.protocols.backup.partition.PrimaryBackupPartitionGroup; import io.atomix.protocols.backup.partition.PrimaryBackupPartitionGroup;
import io.atomix.protocols.raft.partition.RaftPartitionGroup; import io.atomix.protocols.raft.partition.RaftPartitionGroup;
import org.junit.After;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;


import java.util.ArrayList; import java.util.ArrayList;
Expand All @@ -35,7 +36,8 @@
* Base Atomix test. * Base Atomix test.
*/ */
public abstract class AbstractPrimitiveTest extends AbstractAtomixTest { public abstract class AbstractPrimitiveTest extends AbstractAtomixTest {
private static List<Atomix> instances; private static List<Atomix> servers;
private static List<Atomix> clients;
private static int id = 10; private static int id = 10;


/** /**
Expand All @@ -52,13 +54,13 @@ public abstract class AbstractPrimitiveTest extends AbstractAtomixTest {
*/ */
protected Atomix atomix() throws Exception { protected Atomix atomix() throws Exception {
Atomix instance = createAtomix(Member.Type.EPHEMERAL, id++, Arrays.asList(1, 2, 3), Arrays.asList()); Atomix instance = createAtomix(Member.Type.EPHEMERAL, id++, Arrays.asList(1, 2, 3), Arrays.asList());
instance.start().get(10, TimeUnit.SECONDS); clients.add(instance);
instances.add(instance); instance.start().get(30, TimeUnit.SECONDS);
return instance; return instance;
} }


@BeforeClass @BeforeClass
public static void setupAtomix() throws Exception { public static void setupCluster() throws Exception {
AbstractAtomixTest.setupAtomix(); AbstractAtomixTest.setupAtomix();
Function<Atomix.Builder, Atomix> build = builder -> Function<Atomix.Builder, Atomix> build = builder ->
builder.withManagementGroup(RaftPartitionGroup.builder("system") builder.withManagementGroup(RaftPartitionGroup.builder("system")
Expand All @@ -73,22 +75,38 @@ public static void setupAtomix() throws Exception {
.withNumPartitions(7) .withNumPartitions(7)
.build()) .build())
.build(); .build();
instances = new ArrayList<>(); servers = new ArrayList<>();
instances.add(createAtomix(Member.Type.PERSISTENT, 1, Arrays.asList(1, 2, 3), Arrays.asList(), build)); servers.add(createAtomix(Member.Type.PERSISTENT, 1, Arrays.asList(1, 2, 3), Arrays.asList(), build));
instances.add(createAtomix(Member.Type.PERSISTENT, 2, Arrays.asList(1, 2, 3), Arrays.asList(), build)); servers.add(createAtomix(Member.Type.PERSISTENT, 2, Arrays.asList(1, 2, 3), Arrays.asList(), build));
instances.add(createAtomix(Member.Type.PERSISTENT, 3, Arrays.asList(1, 2, 3), Arrays.asList(), build)); servers.add(createAtomix(Member.Type.PERSISTENT, 3, Arrays.asList(1, 2, 3), Arrays.asList(), build));
List<CompletableFuture<Atomix>> futures = instances.stream().map(a -> a.start().thenApply(v -> a)).collect(Collectors.toList()); List<CompletableFuture<Atomix>> futures = servers.stream().map(a -> a.start().thenApply(v -> a)).collect(Collectors.toList());
CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).get(30, TimeUnit.SECONDS); CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).get(30, TimeUnit.SECONDS);
} }


@AfterClass @AfterClass
public static void teardownAtomix() throws Exception { public static void teardownCluster() throws Exception {
List<CompletableFuture<Void>> futures = instances.stream().map(Atomix::stop).collect(Collectors.toList()); List<CompletableFuture<Void>> futures = servers.stream().map(Atomix::stop).collect(Collectors.toList());
try { try {
CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).join(); CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).join();
} catch (Exception e) { } catch (Exception e) {
// Do nothing // Do nothing
} }
AbstractAtomixTest.teardownAtomix(); AbstractAtomixTest.teardownAtomix();
} }

@Before
public void setupTest() throws Exception {
clients = new ArrayList<>();
id = 10;
}

@After
public void teardownTest() throws Exception {
List<CompletableFuture<Void>> futures = clients.stream().map(Atomix::stop).collect(Collectors.toList());
try {
CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).join();
} catch (Exception e) {
// Do nothing
}
}
} }

0 comments on commit 6254745

Please sign in to comment.