+ @Test
+ public void testShardRegistrationClose() throws Exception {
+ rootShardReg.close();
+
+ final InMemoryDOMDataTreeShard newRootShard = InMemoryDOMDataTreeShard.create(ROOT_ID, executor, 1, 1);
+ newRootShard.onGlobalContextUpdated(schemaContext);
+ final DOMDataTreeProducer shardRegProducer = dataTreeService.createProducer(Collections.singletonList(ROOT_ID));
+
+ ListenerRegistration<InMemoryDOMDataTreeShard> newRootShardReg =
+ dataTreeService.registerDataTreeShard(ROOT_ID, rootShard, shardRegProducer);
+ shardRegProducer.close();
+
+ final InMemoryDOMDataTreeShard innerShard = InMemoryDOMDataTreeShard.create(INNER_CONTAINER_ID, executor, 1, 1);
+ innerShard.onGlobalContextUpdated(schemaContext);
+ final DOMDataTreeProducer shardRegProducer2 = dataTreeService.createProducer(Collections.singletonList(INNER_CONTAINER_ID));
+ ListenerRegistration<InMemoryDOMDataTreeShard> innerShardReg = dataTreeService.registerDataTreeShard(INNER_CONTAINER_ID, innerShard, shardRegProducer2);
+
+ innerShardReg.close();
+ // try to register the shard again
+ innerShardReg = dataTreeService.registerDataTreeShard(INNER_CONTAINER_ID, innerShard, shardRegProducer2);
+ final DOMDataTreeCursorAwareTransaction tx = shardRegProducer2.createTransaction(false);
+ final DOMDataTreeWriteCursor cursor = tx.createCursor(INNER_CONTAINER_ID);
+ assertNotNull(cursor);
+
+ cursor.close();
+ tx.cancel();
+ shardRegProducer2.close();
+
+ innerShardReg.close();
+ newRootShardReg.close();
+ }
+