From e4bef4a2199681e334876fdca25c4560b3d31341 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 29 Dec 2023 01:56:48 +0100 Subject: [PATCH] Remove DistributedDataStoreTest Rehost the tests for waiting into ClientBackedDataStoreTest, leaving only limiter tests around -- and those are no longer useful. JIRA: CONTROLLER-2054 Change-Id: Idf908cd33110c610c8fe0c0b37cd69dabdd3f367 Signed-off-by: Robert Varga --- .../cluster/datastore/AbstractDataStore.java | 2 +- .../databroker/ClientBackedDataStoreTest.java | 46 ++++++ .../datastore/DistributedDataStoreTest.java | 140 ------------------ 3 files changed, 47 insertions(+), 141 deletions(-) delete mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreTest.java diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractDataStore.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractDataStore.java index 96b1b4a194..d90f71941f 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractDataStore.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractDataStore.java @@ -335,7 +335,7 @@ public abstract class AbstractDataStore implements DistributedDataStoreInterface } @VisibleForTesting - SettableFuture readinessFuture() { + public final SettableFuture readinessFuture() { return readinessFuture; } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedDataStoreTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedDataStoreTest.java index 2c73eac3a7..15fe8a417f 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedDataStoreTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedDataStoreTest.java @@ -8,10 +8,16 @@ package org.opendaylight.controller.cluster.databroker; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import akka.util.Timeout; +import com.google.common.base.Stopwatch; +import com.google.common.util.concurrent.Uninterruptibles; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.TimeUnit; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -29,6 +35,8 @@ import org.opendaylight.controller.cluster.databroker.actors.dds.ClientTransacti import org.opendaylight.controller.cluster.databroker.actors.dds.DataStoreClient; import org.opendaylight.controller.cluster.datastore.DatastoreContext; import org.opendaylight.controller.cluster.datastore.utils.ActorUtils; +import org.opendaylight.yangtools.yang.common.Empty; +import scala.concurrent.duration.FiniteDuration; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class ClientBackedDataStoreTest { @@ -46,6 +54,10 @@ public class ClientBackedDataStoreTest { @Mock private DataStoreClient clientActor; @Mock + private DatastoreContext datastoreContext; + @Mock + private Timeout shardElectionTimeout; + @Mock private ActorUtils actorUtils; @Mock private ClientLocalHistory clientLocalHistory; @@ -54,6 +66,7 @@ public class ClientBackedDataStoreTest { @Mock private ClientSnapshot clientSnapshot; + @Before public void setUp() { doReturn(DatastoreContext.newBuilder().build()).when(actorUtils).getDatastoreContext(); @@ -96,4 +109,37 @@ public class ClientBackedDataStoreTest { verify(clientActor, times(1)).createTransaction(); } } + + @Test + public void testWaitTillReadyBlocking() { + doReturn(datastoreContext).when(actorUtils).getDatastoreContext(); + doReturn(shardElectionTimeout).when(datastoreContext).getShardLeaderElectionTimeout(); + doReturn(1).when(datastoreContext).getInitialSettleTimeoutMultiplier(); + doReturn(FiniteDuration.apply(50, TimeUnit.MILLISECONDS)).when(shardElectionTimeout).duration(); + try (var clientBackedDataStore = new ClientBackedDataStore(actorUtils, UNKNOWN_ID, clientActor)) { + final var sw = Stopwatch.createStarted(); + clientBackedDataStore.waitTillReady(); + final var elapsedMillis = sw.stop().elapsed(TimeUnit.MILLISECONDS); + + assertTrue("Expected to be blocked for 50 millis", elapsedMillis >= 50); + } + } + + @Test + public void testWaitTillReadyCountDown() { + try (var clientBackedDataStore = new ClientBackedDataStore(actorUtils, UNKNOWN_ID, clientActor)) { + doReturn(datastoreContext).when(actorUtils).getDatastoreContext(); + + ForkJoinPool.commonPool().submit(() -> { + Uninterruptibles.sleepUninterruptibly(500, TimeUnit.MILLISECONDS); + clientBackedDataStore.readinessFuture().set(Empty.value()); + }); + + final var sw = Stopwatch.createStarted(); + clientBackedDataStore.waitTillReady(); + final var elapsedMillis = sw.stop().elapsed(TimeUnit.MILLISECONDS); + + assertTrue("Expected to be released in 500 millis", elapsedMillis < 5000); + } + } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreTest.java deleted file mode 100644 index be3ba1ecb7..0000000000 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreTest.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.controller.cluster.datastore; - -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -import akka.util.Timeout; -import com.google.common.util.concurrent.Uninterruptibles; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.opendaylight.controller.cluster.access.concepts.ClientIdentifier; -import org.opendaylight.controller.cluster.access.concepts.FrontendIdentifier; -import org.opendaylight.controller.cluster.access.concepts.FrontendType; -import org.opendaylight.controller.cluster.access.concepts.MemberName; -import org.opendaylight.controller.cluster.datastore.utils.ActorUtils; -import org.opendaylight.controller.md.cluster.datastore.model.TestModel; -import org.opendaylight.yangtools.yang.common.Empty; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import scala.concurrent.duration.FiniteDuration; - -public class DistributedDataStoreTest extends AbstractActorTest { - private static final ClientIdentifier UNKNOWN_ID = ClientIdentifier.create( - FrontendIdentifier.create(MemberName.forName("local"), FrontendType.forName("unknown")), 0); - - private static SchemaContext SCHEMA_CONTEXT; - - @Mock - private ActorUtils actorUtils; - - @Mock - private DatastoreContext datastoreContext; - - @Mock - private Timeout shardElectionTimeout; - - @BeforeClass - public static void beforeClass() { - SCHEMA_CONTEXT = TestModel.createTestContext(); - } - - @AfterClass - public static void afterClass() { - SCHEMA_CONTEXT = null; - } - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - - doReturn(SCHEMA_CONTEXT).when(actorUtils).getSchemaContext(); - doReturn(DatastoreContext.newBuilder().build()).when(actorUtils).getDatastoreContext(); - } - - @Test - public void testRateLimitingUsedInReadWriteTxCreation() { - try (DistributedDataStore distributedDataStore = new DistributedDataStore(actorUtils, UNKNOWN_ID)) { - - distributedDataStore.newReadWriteTransaction(); - - verify(actorUtils, times(1)).acquireTxCreationPermit(); - } - } - - @Test - public void testRateLimitingUsedInWriteOnlyTxCreation() { - try (DistributedDataStore distributedDataStore = new DistributedDataStore(actorUtils, UNKNOWN_ID)) { - - distributedDataStore.newWriteOnlyTransaction(); - - verify(actorUtils, times(1)).acquireTxCreationPermit(); - } - } - - @Test - public void testRateLimitingNotUsedInReadOnlyTxCreation() { - try (DistributedDataStore distributedDataStore = new DistributedDataStore(actorUtils, UNKNOWN_ID)) { - - distributedDataStore.newReadOnlyTransaction(); - distributedDataStore.newReadOnlyTransaction(); - distributedDataStore.newReadOnlyTransaction(); - - verify(actorUtils, times(0)).acquireTxCreationPermit(); - } - } - - @Test - public void testWaitTillReadyBlocking() { - doReturn(datastoreContext).when(actorUtils).getDatastoreContext(); - doReturn(shardElectionTimeout).when(datastoreContext).getShardLeaderElectionTimeout(); - doReturn(1).when(datastoreContext).getInitialSettleTimeoutMultiplier(); - doReturn(FiniteDuration.apply(50, TimeUnit.MILLISECONDS)).when(shardElectionTimeout).duration(); - try (DistributedDataStore distributedDataStore = new DistributedDataStore(actorUtils, UNKNOWN_ID)) { - - long start = System.currentTimeMillis(); - - distributedDataStore.waitTillReady(); - - long end = System.currentTimeMillis(); - - assertTrue("Expected to be blocked for 50 millis", end - start >= 50); - } - } - - @Test - public void testWaitTillReadyCountDown() { - try (DistributedDataStore distributedDataStore = new DistributedDataStore(actorUtils, UNKNOWN_ID)) { - doReturn(datastoreContext).when(actorUtils).getDatastoreContext(); - doReturn(shardElectionTimeout).when(datastoreContext).getShardLeaderElectionTimeout(); - doReturn(FiniteDuration.apply(5000, TimeUnit.MILLISECONDS)).when(shardElectionTimeout).duration(); - - Executors.newSingleThreadExecutor().submit(() -> { - Uninterruptibles.sleepUninterruptibly(500, TimeUnit.MILLISECONDS); - distributedDataStore.readinessFuture().set(Empty.value()); - }); - - long start = System.currentTimeMillis(); - - distributedDataStore.waitTillReady(); - - long end = System.currentTimeMillis(); - - assertTrue("Expected to be released in 500 millis", end - start < 5000); - } - } -} -- 2.36.6