@Test
public void testClusteredDataTreeChangeListenerRegistration() throws Exception {

    final ShardTestKit testKit = new ShardTestKit(getSystem());
    final String testName = "testClusteredDataTreeChangeListenerRegistration";
    final ShardIdentifier followerShardID = ShardIdentifier.create("inventory",
        MemberName.forName(actorFactory.generateActorId(testName + "-follower")), "config");
    final ShardIdentifier leaderShardID = ShardIdentifier.create("inventory",
        MemberName.forName(actorFactory.generateActorId(testName + "-leader")), "config");
    final TestActorRef<Shard> followerShard = actorFactory
            .createTestActor(Shard.builder().id(followerShardID)
                .datastoreContext(dataStoreContextBuilder.shardElectionTimeoutFactor(1000).build())
                .peerAddresses(Collections.singletonMap(leaderShardID.toString(),
                    "akka://test/user/" + leaderShardID.toString()))
                .schemaContextProvider(() -> SCHEMA_CONTEXT).props()
                .withDispatcher(Dispatchers.DefaultDispatcherId()), followerShardID.toString());
    final TestActorRef<Shard> leaderShard = actorFactory
            .createTestActor(Shard.builder().id(leaderShardID).datastoreContext(newDatastoreContext())
                .peerAddresses(Collections.singletonMap(followerShardID.toString(),
                    "akka://test/user/" + followerShardID.toString()))
                .schemaContextProvider(() -> SCHEMA_CONTEXT).props()
                .withDispatcher(Dispatchers.DefaultDispatcherId()), leaderShardID.toString());
    leaderShard.tell(TimeoutNow.INSTANCE, ActorRef.noSender());
    final String leaderPath = ShardTestKit.waitUntilLeader(followerShard);
    assertEquals("Shard leader path", leaderShard.path().toString(), leaderPath);
    final YangInstanceIdentifier path = TestModel.TEST_PATH;
    final MockDataTreeChangeListener listener = new MockDataTreeChangeListener(1);
    final ActorRef dclActor = actorFactory.createActor(DataTreeChangeListenerActor.props(listener, path),
        actorFactory.generateActorId(testName + "-DataTreeChangeListener"));
    followerShard.tell(new RegisterDataTreeChangeListener(TestModel.TEST_PATH, dclActor, true), testKit.getRef());
    final RegisterDataTreeNotificationListenerReply reply = testKit.expectMsgClass(Duration.ofSeconds(5),
        RegisterDataTreeNotificationListenerReply.class);
    assertNotNull("getListenerRegistrationPath", reply.getListenerRegistrationPath());
    writeToStore(followerShard, path, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
    listener.waitForChangeEvents();
}