JCLOUDS-428: Use Maps with a consistent iteration order
diff --git a/core/src/main/java/org/jclouds/chef/internal/BaseChefService.java b/core/src/main/java/org/jclouds/chef/internal/BaseChefService.java
index 40a44a9..1a3b153 100644
--- a/core/src/main/java/org/jclouds/chef/internal/BaseChefService.java
+++ b/core/src/main/java/org/jclouds/chef/internal/BaseChefService.java
@@ -154,7 +154,7 @@
    String buildBootstrapConfiguration(BootstrapConfig bootstrapConfig) {
       checkNotNull(bootstrapConfig, "bootstrapConfig must not be null");
 
-      Map<String, Object> configMap = Maps.newHashMap();
+      Map<String, Object> configMap = Maps.newLinkedHashMap();
       configMap.put("run_list", bootstrapConfig.getRunList());
 
       if (bootstrapConfig.getEnvironment().isPresent()) {
diff --git a/core/src/main/java/org/jclouds/ohai/functions/NestSlashKeys.java b/core/src/main/java/org/jclouds/ohai/functions/NestSlashKeys.java
index c709463..d68ed14 100644
--- a/core/src/main/java/org/jclouds/ohai/functions/NestSlashKeys.java
+++ b/core/src/main/java/org/jclouds/ohai/functions/NestSlashKeys.java
@@ -94,7 +94,7 @@
    @VisibleForTesting
    void mergeAsPeer(String key, JsonBall value, Map<String, JsonBall> insertionContext) {
       Map<String, JsonBall> immutableValueContext = json.fromJson(insertionContext.get(key).toString(), mapLiteral);
-      Map<String, JsonBall> valueContext = Maps.newHashMap(immutableValueContext);
+      Map<String, JsonBall> valueContext = Maps.newLinkedHashMap(immutableValueContext);
       Map<String, JsonBall> toPut = json.<Map<String, JsonBall>> fromJson(value.toString(), mapLiteral);
       Set<String> uniques = Sets.difference(toPut.keySet(), valueContext.keySet());
       for (String k : uniques) {
@@ -135,7 +135,7 @@
 
       checkArgument(rootValue.matches("^\\{.*\\}$"), "value must be a hash: %s", rootValue);
       Map<String, JsonBall> immutableInsertionContext = json.fromJson(rootValue, mapLiteral);
-      Map<String, JsonBall> insertionContext = Maps.newHashMap(immutableInsertionContext);
+      Map<String, JsonBall> insertionContext = Maps.newLinkedHashMap(immutableInsertionContext);
       if (keyParts.size() == 1) {
          if (!insertionContext.containsKey(keyParts.get(0))) {
             insertionContext.put(keyParts.get(0), toInsert);
diff --git a/core/src/test/java/org/jclouds/chef/internal/BaseChefServiceTest.java b/core/src/test/java/org/jclouds/chef/internal/BaseChefServiceTest.java
index e763d8f..d998534 100644
--- a/core/src/test/java/org/jclouds/chef/internal/BaseChefServiceTest.java
+++ b/core/src/test/java/org/jclouds/chef/internal/BaseChefServiceTest.java
@@ -84,7 +84,7 @@
       BootstrapConfig bootstrapConfig = BootstrapConfig.builder().runList(runlist)
             .attributes(new JsonBall("{\"tomcat6\":{\"ssl_port\":8433}}")).build();
       String config = chefService.buildBootstrapConfiguration(bootstrapConfig);
-      assertEquals(config, "{\"tomcat6\":{\"ssl_port\":8433},\"run_list\":[\"recipe[apache2]\",\"role[webserver]\"]}");
+      assertEquals(config, "{\"run_list\":[\"recipe[apache2]\",\"role[webserver]\"],\"tomcat6\":{\"ssl_port\":8433}}");
    }
 
    public void testBuildBootstrapConfigurationWithRunlistAndAttributesAndEnvironment() {
@@ -93,7 +93,7 @@
             .attributes(new JsonBall("{\"tomcat6\":{\"ssl_port\":8433}}")).environment("env").build();
       String config = chefService.buildBootstrapConfiguration(bootstrapConfig);
       assertEquals(config,
-            "{\"tomcat6\":{\"ssl_port\":8433},\"environment\":\"env\",\"run_list\":[\"recipe[apache2]\",\"role[webserver]\"]}");
+            "{\"run_list\":[\"recipe[apache2]\",\"role[webserver]\"],\"environment\":\"env\",\"tomcat6\":{\"ssl_port\":8433}}");
    }
 
 }
diff --git a/core/src/test/java/org/jclouds/ohai/config/OhaiModuleTest.java b/core/src/test/java/org/jclouds/ohai/config/OhaiModuleTest.java
index ecc4562..9f36fe9 100644
--- a/core/src/test/java/org/jclouds/ohai/config/OhaiModuleTest.java
+++ b/core/src/test/java/org/jclouds/ohai/config/OhaiModuleTest.java
@@ -133,7 +133,7 @@
       assertEquals(
             json.toJson(ohai.ohai.get(), new TypeLiteral<Map<String, JsonBall>>() {
             }.getType()),
-            "{\"ohai_time\":1279992919,\"platform\":\"macosx\",\"platform_version\":\"10.3.0\",\"current_user\":\"user\",\"test\":{\"prop2\":\"test2\",\"prop1\":\"test1\"},\"jvm\":{\"system\":{\"user.name\":\"user\",\"os.version\":\"10.3.0\",\"os.name\":\"Mac OS X\"}}}");
+            "{\"ohai_time\":1279992919,\"platform\":\"macosx\",\"platform_version\":\"10.3.0\",\"current_user\":\"user\",\"test\":{\"prop1\":\"test1\",\"prop2\":\"test2\"},\"jvm\":{\"system\":{\"user.name\":\"user\",\"os.version\":\"10.3.0\",\"os.name\":\"Mac OS X\"}}}");
    }
 
    static class Ohai {
diff --git a/core/src/test/java/org/jclouds/ohai/functions/NestSlashKeysTest.java b/core/src/test/java/org/jclouds/ohai/functions/NestSlashKeysTest.java
index 594ab58..f1edb7d 100644
--- a/core/src/test/java/org/jclouds/ohai/functions/NestSlashKeysTest.java
+++ b/core/src/test/java/org/jclouds/ohai/functions/NestSlashKeysTest.java
@@ -31,7 +31,7 @@
 
 import com.google.common.base.Supplier;
 import com.google.common.base.Suppliers;
-import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableListMultimap;
 import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
@@ -39,7 +39,7 @@
 /**
  * Tests behavior of {@code NestSlashKeys}
  */
-@Test(groups = { "unit" }, sequential = true)
+@Test(groups = "unit", testName = "NestSlashKeysTest")
 public class NestSlashKeysTest {
 
    private NestSlashKeys converter;
@@ -60,56 +60,56 @@
    @Test
    public void testBase() {
       assertEquals(
-            json.toJson(converter.apply(ImmutableMultimap.<String, Supplier<JsonBall>> of("java",
+            json.toJson(converter.apply(ImmutableListMultimap.<String, Supplier<JsonBall>> of("java",
                   Suppliers.ofInstance(new JsonBall("java"))))), "{\"java\":\"java\"}");
    }
 
    @Test(expectedExceptions = IllegalArgumentException.class)
    public void testIllegal() {
-      json.toJson(converter.apply(ImmutableMultimap.<String, Supplier<JsonBall>> of("java",
+      json.toJson(converter.apply(ImmutableListMultimap.<String, Supplier<JsonBall>> of("java",
             Suppliers.ofInstance(new JsonBall("java")), "java/system", Suppliers.ofInstance(new JsonBall("system")))));
    }
 
    @Test
    public void testOne() {
       assertEquals(
-            json.toJson(converter.apply(ImmutableMultimap.<String, Supplier<JsonBall>> of("java",
+            json.toJson(converter.apply(ImmutableListMultimap.<String, Supplier<JsonBall>> of("java",
                   Suppliers.ofInstance(new JsonBall("{\"time\":\"time\"}")), "java/system",
                   Suppliers.ofInstance(new JsonBall("system"))))),
-            "{\"java\":{\"system\":\"system\",\"time\":\"time\"}}");
+            "{\"java\":{\"time\":\"time\",\"system\":\"system\"}}");
    }
 
    @Test
    public void testOneDuplicate() {
       assertEquals(
-            json.toJson(converter.apply(ImmutableMultimap.<String, Supplier<JsonBall>> of("java",
+            json.toJson(converter.apply(ImmutableListMultimap.<String, Supplier<JsonBall>> of("java",
                   Suppliers.ofInstance(new JsonBall("{\"time\":\"time\"}")), "java",
                   Suppliers.ofInstance(new JsonBall("{\"system\":\"system\"}"))))),
-            "{\"java\":{\"system\":\"system\",\"time\":\"time\"}}");
+            "{\"java\":{\"time\":\"time\",\"system\":\"system\"}}");
    }
 
    @Test
    public void testMerge() {
       assertEquals(
-            json.toJson(converter.apply(ImmutableMultimap.<String, Supplier<JsonBall>> of("java",
+            json.toJson(converter.apply(ImmutableListMultimap.<String, Supplier<JsonBall>> of("java",
                   Suppliers.ofInstance(new JsonBall("{\"time\":{\"1\":\"hello\"}}")), "java/time",
                   Suppliers.ofInstance(new JsonBall("{\"2\":\"goodbye\"}"))))),
-            "{\"java\":{\"time\":{\"2\":\"goodbye\",\"1\":\"hello\"}}}");
+            "{\"java\":{\"time\":{\"1\":\"hello\",\"2\":\"goodbye\"}}}");
    }
 
    @Test
    public void testMergeNestedTwice() {
       assertEquals(
-            json.toJson(converter.apply(ImmutableMultimap.<String, Supplier<JsonBall>> of("java",
+            json.toJson(converter.apply(ImmutableListMultimap.<String, Supplier<JsonBall>> of("java",
                   Suppliers.ofInstance(new JsonBall("{\"time\":{\"1\":\"hello\"}}")), "java",
                   Suppliers.ofInstance(new JsonBall("{\"time\":{\"2\":\"goodbye\"}}"))))),
-            "{\"java\":{\"time\":{\"2\":\"goodbye\",\"1\":\"hello\"}}}");
+            "{\"java\":{\"time\":{\"1\":\"hello\",\"2\":\"goodbye\"}}}");
    }
 
    @Test
    public void testReplaceList() {
       assertEquals(
-            json.toJson(converter.apply(ImmutableMultimap.<String, Supplier<JsonBall>> of("java",
+            json.toJson(converter.apply(ImmutableListMultimap.<String, Supplier<JsonBall>> of("java",
                   Suppliers.ofInstance(new JsonBall("{\"time\":{\"1\":[\"hello\"]}}")), "java/time",
                   Suppliers.ofInstance(new JsonBall("{\"1\":[\"goodbye\"]}"))))),
             "{\"java\":{\"time\":{\"1\":[\"goodbye\"]}}}");