SLING-7683 Support runmode in separate feature files
diff --git a/src/main/java/org/apache/sling/feature/modelconverter/FeatureToProvisioning.java b/src/main/java/org/apache/sling/feature/modelconverter/FeatureToProvisioning.java
index afaa2e2..9b92ad8 100644
--- a/src/main/java/org/apache/sling/feature/modelconverter/FeatureToProvisioning.java
+++ b/src/main/java/org/apache/sling/feature/modelconverter/FeatureToProvisioning.java
@@ -59,7 +59,7 @@
 public class FeatureToProvisioning {
     private static final Logger LOGGER = LoggerFactory.getLogger(FeatureToProvisioning.class);
     static final String PROVISIONING_MODEL_NAME_VARIABLE = "provisioning.model.name";
-    static final String PROVISIONING_RUNMODE = "provisioning.runmode";
+    static final String PROVISIONING_RUNMODES = "provisioning.runmodes";
 
     public static void convert(File inputFile, File outputFile, ArtifactManager am) throws IOException {
         if (outputFile.exists()) {
@@ -79,7 +79,7 @@
             featureName = feature.getId().getArtifactId();
         }
 
-        String runMode = (String) feature.getVariables().remove(PROVISIONING_RUNMODE);
+        String runMode = (String) feature.getVariables().remove(PROVISIONING_RUNMODES);
         String[] runModes = null;
         if (runMode != null) {
             runModes = runMode.split(",");
diff --git a/src/test/java/org/apache/sling/feature/modelconverter/ModelConverterTest.java b/src/test/java/org/apache/sling/feature/modelconverter/ModelConverterTest.java
index 8526fa8..263d479 100644
--- a/src/test/java/org/apache/sling/feature/modelconverter/ModelConverterTest.java
+++ b/src/test/java/org/apache/sling/feature/modelconverter/ModelConverterTest.java
@@ -140,7 +140,7 @@
             files2 = new File[] {getFile("/oak.json")};
         }
 
-        testConvertToProvisioningModel(files1, files2);
+        testConvertToProvisioningModel(files2, files1);
     }
 
     private File getFile(String f) throws URISyntaxException {
@@ -345,6 +345,7 @@
         Model expected = readProvisioningModel(expectedFile);
         Model actual = readProvisioningModel(generatedFiles);
         assertModelsEqual(expected, actual);
+        assertModelsEqual(actual, expected);
     }
 
     public void testConvertToProvisioningModel(File[] jsonFiles1, File[] jsonFiles2) throws URISyntaxException, IOException {
@@ -354,12 +355,17 @@
         Model actual1 = readProvisioningModel(generatedFiles1);
         Model actual2 = readProvisioningModel(generatedFiles2);
         assertModelsEqual(actual1, actual2);
+        assertModelsEqual(actual2, actual1);
     }
 
     private List<File> convertFeatureFilesToProvisioningModel(File[] jsonFiles) throws URISyntaxException, IOException {
         List<File> generatedFiles = new ArrayList<>();
         for (File inFile : jsonFiles) {
-            File outFile = new File(tempDir.toFile(), inFile.getName() + ".txt.generated");
+            File outFile;
+            int counter = 0;
+            do {
+                outFile = new File(tempDir.toFile(), inFile.getName() + (counter++) + ".txt.generated");
+            } while (outFile.exists());
 
             FeatureToProvisioning.convert(inFile, outFile, artifactManager);
             generatedFiles.add(outFile);
diff --git a/src/test/resources/runmodeseparation/oak_mongo.json b/src/test/resources/runmodeseparation/oak_mongo.json
index 9ed9a8e..989f3aa 100644
--- a/src/test/resources/runmodeseparation/oak_mongo.json
+++ b/src/test/resources/runmodeseparation/oak_mongo.json
@@ -4,7 +4,7 @@
     "variables": {
         "oak.version": "1.6.8",
         "provisioning.model.name": "oak",
-        "provisioning.runmode": "oak_mongo"
+        "provisioning.runmodes": "oak_mongo"
     },
 
     "bundles": [
diff --git a/src/test/resources/runmodeseparation/oak_tar.json b/src/test/resources/runmodeseparation/oak_tar.json
index 71ade48..75011d5 100644
--- a/src/test/resources/runmodeseparation/oak_tar.json
+++ b/src/test/resources/runmodeseparation/oak_tar.json
@@ -4,7 +4,7 @@
     "variables": {
         "oak.version": "1.6.8",
         "provisioning.model.name": "oak",
-        "provisioning.runmode": "oak_tar"
+        "provisioning.runmodes": "oak_tar"
     },
     
     "bundles": [