private Settings nodeSettings(String dataPath) {
   return Settings.builder()
       .put(NodeEnvironment.ADD_NODE_LOCK_ID_TO_CUSTOM_PATH.getKey(), false)
       .put(Environment.PATH_SHARED_DATA_SETTING.getKey(), dataPath)
       .put(FsDirectoryService.INDEX_LOCK_FACTOR_SETTING.getKey(), randomFrom("native", "simple"))
       .build();
 }
 public void testGetRootPaths() throws IOException {
   boolean useCustomDataPath = randomBoolean();
   final Settings indexSettings;
   final Settings nodeSettings;
   final String indexUUID = "0xDEADBEEF";
   Settings.Builder indexSettingsBuilder =
       Settings.builder()
           .put(IndexMetaData.SETTING_INDEX_UUID, indexUUID)
           .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT);
   final Path customPath;
   if (useCustomDataPath) {
     final Path path = createTempDir();
     final boolean includeNodeId = randomBoolean();
     indexSettings = indexSettingsBuilder.put(IndexMetaData.SETTING_DATA_PATH, "custom").build();
     nodeSettings =
         Settings.builder()
             .put(
                 Environment.PATH_SHARED_DATA_SETTING.getKey(),
                 path.toAbsolutePath().toAbsolutePath())
             .put(NodeEnvironment.ADD_NODE_LOCK_ID_TO_CUSTOM_PATH.getKey(), includeNodeId)
             .build();
     if (includeNodeId) {
       customPath = path.resolve("custom").resolve("0");
     } else {
       customPath = path.resolve("custom");
     }
   } else {
     customPath = null;
     indexSettings = indexSettingsBuilder.build();
     nodeSettings = Settings.EMPTY;
   }
   try (final NodeEnvironment env = newNodeEnvironment(nodeSettings)) {
     ShardId shardId = new ShardId("foo", indexUUID, 0);
     Path[] paths = env.availableShardPaths(shardId);
     Path path = randomFrom(paths);
     ShardStateMetaData.FORMAT.write(
         new ShardStateMetaData(2, true, indexUUID, AllocationId.newInitializing()), path);
     ShardPath shardPath =
         ShardPath.loadShardPath(
             logger,
             env,
             shardId,
             IndexSettingsModule.newIndexSettings(
                 shardId.getIndex(), indexSettings, nodeSettings));
     boolean found = false;
     for (Path p : env.nodeDataPaths()) {
       if (p.equals(shardPath.getRootStatePath())) {
         found = true;
         break;
       }
     }
     assertTrue(
         "root state paths must be a node path but wasn't: " + shardPath.getRootStatePath(),
         found);
     found = false;
     if (useCustomDataPath) {
       assertNotEquals(shardPath.getRootDataPath(), shardPath.getRootStatePath());
       assertEquals(customPath, shardPath.getRootDataPath());
     } else {
       assertNull(customPath);
       for (Path p : env.nodeDataPaths()) {
         if (p.equals(shardPath.getRootDataPath())) {
           found = true;
           break;
         }
       }
       assertTrue(
           "root state paths must be a node path but wasn't: " + shardPath.getRootDataPath(),
           found);
     }
   }
 }