Bump akka to 2.6.16
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / AbstractShardManagerTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.controller.cluster.datastore;
10
11 import static org.awaitility.Awaitility.await;
12 import static org.mockito.Mockito.mock;
13 import static org.mockito.MockitoAnnotations.initMocks;
14
15 import akka.actor.ActorRef;
16 import akka.actor.PoisonPill;
17 import akka.actor.Props;
18 import com.google.common.util.concurrent.SettableFuture;
19 import java.time.Duration;
20 import java.util.concurrent.TimeUnit;
21 import org.junit.After;
22 import org.junit.Before;
23 import org.opendaylight.controller.cluster.access.concepts.MemberName;
24 import org.opendaylight.controller.cluster.datastore.config.Configuration;
25 import org.opendaylight.controller.cluster.datastore.identifiers.ShardIdentifier;
26 import org.opendaylight.controller.cluster.datastore.shardmanager.ShardManagerTest.TestShardManager;
27 import org.opendaylight.controller.cluster.raft.TestActorFactory;
28 import org.opendaylight.controller.cluster.raft.utils.InMemoryJournal;
29 import org.opendaylight.controller.cluster.raft.utils.InMemorySnapshotStore;
30 import org.opendaylight.controller.cluster.raft.utils.MessageCollectorActor;
31
32 public class AbstractShardManagerTest extends AbstractClusterRefActorTest {
33
34     protected static final MemberName MEMBER_1 = MemberName.forName("member-1");
35
36     protected static int ID_COUNTER = 1;
37     protected static ActorRef mockShardActor;
38     protected static ShardIdentifier mockShardName;
39
40     protected final String shardMrgIDSuffix = "config" + ID_COUNTER++;
41     protected final TestActorFactory actorFactory = new TestActorFactory(getSystem());
42     protected final DatastoreContext.Builder datastoreContextBuilder = DatastoreContext.newBuilder()
43             .dataStoreName(shardMrgIDSuffix).shardInitializationTimeout(600, TimeUnit.MILLISECONDS)
44             .shardHeartbeatIntervalInMillis(100).shardElectionTimeoutFactor(6);
45
46     protected static SettableFuture<Void> ready;
47
48     protected TestShardManager.Builder newTestShardMgrBuilder() {
49         return TestShardManager.builder(datastoreContextBuilder).distributedDataStore(mock(DistributedDataStore.class));
50     }
51
52     protected TestShardManager.Builder newTestShardMgrBuilder(final Configuration config) {
53         return TestShardManager.builder(datastoreContextBuilder).configuration(config)
54                 .distributedDataStore(mock(DistributedDataStore.class));
55     }
56
57     protected Props newShardMgrProps(final Configuration config) {
58         return newTestShardMgrBuilder(config).readinessFuture(ready).props();
59     }
60
61     @Before
62     public void setUp() {
63         initMocks(this);
64         ready = SettableFuture.create();
65
66         InMemoryJournal.clear();
67         InMemorySnapshotStore.clear();
68
69         if (mockShardActor == null) {
70             mockShardName = ShardIdentifier.create(Shard.DEFAULT_NAME, MEMBER_1, "config");
71             mockShardActor = getSystem().actorOf(MessageCollectorActor.props(), mockShardName.toString());
72         }
73
74         MessageCollectorActor.clearMessages(mockShardActor);
75     }
76
77     @After
78     public void tearDown() {
79         InMemoryJournal.clear();
80         InMemorySnapshotStore.clear();
81
82         mockShardActor.tell(PoisonPill.getInstance(), ActorRef.noSender());
83         await().atMost(Duration.ofSeconds(10)).until(mockShardActor::isTerminated);
84         mockShardActor = null;
85
86         actorFactory.close();
87     }
88 }