SLING-6893: Remove commons.json from Content Distribution Integration Tests - take2

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1797389 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index 94b82ff..147a7b6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,7 +50,7 @@
     optionally using -Dmaven.surefire.debug to enable debugging.
     -->
     <properties>
-
+        <sling.java.version>8</sling.java.version>
         <!-- Set this to run tests against an existing server instance -->
         <keepJarRunning>false</keepJarRunning>
 
@@ -345,7 +345,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.tools</artifactId>
-            <version>1.0.12</version>
+            <version>1.0.17-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
diff --git a/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java b/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
index e81b60e..cb4a3b4 100644
--- a/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
+++ b/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
@@ -20,7 +20,8 @@
 
 import java.io.IOException;
 
-import org.apache.sling.commons.json.JSONException;
+import javax.json.JsonException;
+
 import org.apache.sling.testing.tools.sling.SlingClient;
 import org.apache.sling.testing.tools.sling.SlingInstance;
 import org.apache.sling.testing.tools.sling.SlingInstanceManager;
@@ -125,7 +126,7 @@
 
 
     @After
-    public void checkNoPackagesLeft() throws IOException, JSONException, InterruptedException {
+    public void checkNoPackagesLeft() throws IOException, JsonException, InterruptedException {
 
         Thread.sleep(5000);
 
diff --git a/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java b/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java
index 11a53ab..9e42acc 100644
--- a/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java
+++ b/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java
@@ -20,6 +20,7 @@
 package org.apache.sling.distribution.it;
 
 import java.io.IOException;
+import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -27,15 +28,17 @@
 import java.util.Map;
 import java.util.UUID;
 
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonException;
+import javax.json.JsonObject;
+import javax.json.JsonString;
+
 import org.apache.http.NameValuePair;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
 import org.apache.http.entity.ByteArrayEntity;
 import org.apache.http.message.BasicNameValuePair;
 import org.apache.jackrabbit.util.Text;
-import org.apache.sling.commons.json.JSONArray;
-import org.apache.sling.commons.json.JSONException;
-import org.apache.sling.commons.json.JSONObject;
-import org.apache.sling.commons.json.JSONTokener;
 import org.apache.sling.distribution.DistributionRequestType;
 import org.apache.sling.testing.tools.http.Request;
 import org.apache.sling.testing.tools.sling.SlingClient;
@@ -56,7 +59,7 @@
     private static final String DISTRIBUTOR_PASSWORD = "123";
 
 
-    public static JSONObject getResource(SlingInstance slingInstance, String path) throws IOException, JSONException {
+    public static JsonObject getResource(SlingInstance slingInstance, String path) throws IOException, JsonException {
         if (!path.endsWith(JSON_SELECTOR)) {
             path += JSON_SELECTOR;
         }
@@ -71,7 +74,7 @@
 
         // Parse JSON response for more precise testing
 
-        return new JSONObject(new JSONTokener(content));
+        return Json.createReader(new StringReader(content)).readObject();
     }
 
     public static String assertPostResourceWithParameters(SlingInstance slingInstance,
@@ -290,7 +293,7 @@
     }
 
 
-    public static void assertEmptyFolder(SlingInstance instance, SlingClient client, String path) throws IOException, JSONException {
+    public static void assertEmptyFolder(SlingInstance instance, SlingClient client, String path) throws IOException, JsonException {
 
         if (client.exists(path)) {
             List<String> children = getChildrenForFolder(instance, path);
@@ -301,10 +304,10 @@
     }
 
 
-    public static List<String> getChildrenForFolder(SlingInstance instance, String path) throws IOException, JSONException {
+    public static List<String> getChildrenForFolder(SlingInstance instance, String path) throws IOException, JsonException {
         List<String> result = new ArrayList<String>();
-        JSONObject authorJson = getResource(instance, path + ".1.json");
-        Iterator<String> it = authorJson.keys();
+        JsonObject authorJson = getResource(instance, path + ".1.json");
+        Iterator<String> it = authorJson.keySet().iterator();
         while (it.hasNext()) {
             String key = it.next();
 
@@ -315,21 +318,21 @@
         return result;
     }
 
-    public static Map<String, Map<String, Object>> getQueues(SlingInstance instance, String agentName) throws IOException, JSONException {
+    public static Map<String, Map<String, Object>> getQueues(SlingInstance instance, String agentName) throws IOException, JsonException {
         Map<String, Map<String, Object>> result = new HashMap<String, Map<String, Object>>();
 
-        JSONObject json = getResource(instance, queueUrl(agentName) + ".infinity");
+        JsonObject json = getResource(instance, queueUrl(agentName) + ".infinity");
 
-        JSONArray items = json.getJSONArray("items");
+        JsonArray items = json.getJsonArray("items");
 
-        for(int i=0; i < items.length(); i++) {
+        for(int i=0; i < items.size(); i++) {
             String queueName = items.getString(i);
 
             Map<String, Object> queueProperties = new HashMap<String, Object>();
 
-            JSONObject queue = json.getJSONObject(queueName);
+            JsonObject queue = json.getJsonObject(queueName);
             queueProperties.put("empty", queue.getBoolean("empty"));
-            queueProperties.put("itemsCount", queue.get("itemsCount"));
+            queueProperties.put("itemsCount", queue.getInt("itemsCount"));
 
             result.put(queueName, queueProperties);
         }
@@ -337,27 +340,43 @@
         return result;
     }
 
-    public static List<Map<String, Object>> getQueueItems(SlingInstance instance, String queueUrl) throws IOException, JSONException {
+    public static List<Map<String, Object>> getQueueItems(SlingInstance instance, String queueUrl) throws IOException, JsonException {
         List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
 
-        JSONObject json = getResource(instance, queueUrl + ".infinity");
+        JsonObject json = getResource(instance, queueUrl + ".infinity");
 
 
-        Iterator<String> keys = json.keys();
+        Iterator<String> keys = json.keySet().iterator();
         while (keys.hasNext()) {
             String key = keys.next();
-            JSONObject queueItem = json.optJSONObject(key);
-            if (queueItem != null && queueItem.optString("id") != null) {
+            JsonObject queueItem;
+            Object item = json.get(key);
+            if (item instanceof JsonObject)
+            {
+                queueItem = (JsonObject) item;
+            }
+            else if (item instanceof JsonString) {
+                try {
+                    queueItem = Json.createReader(new StringReader(((JsonString) item).getString())).readObject();
+                } catch (JsonException ex) {
+                    queueItem = null;
+                }
+            }
+            else {
+                queueItem = null;
+            }
+                
+            if (queueItem != null && queueItem.containsKey("id")) {
 
                 Map<String, Object> itemProperties = new HashMap<String, Object>();
 
-                itemProperties.put("id", queueItem.get("id"));
-                itemProperties.put("paths", queueItem.get("paths"));
-                itemProperties.put("action", queueItem.get("action"));
-                itemProperties.put("userid", queueItem.get("userid"));
-                itemProperties.put("attempts", queueItem.get("attempts"));
-                itemProperties.put("time", queueItem.get("time"));
-                itemProperties.put("state", queueItem.get("state"));
+                itemProperties.put("id", queueItem.getString("id"));
+                itemProperties.put("paths", JsonUtil.unbox(queueItem.get("paths")));
+                itemProperties.put("action", JsonUtil.unbox(queueItem.get("action")));
+                itemProperties.put("userid", JsonUtil.unbox(queueItem.get("userid")));
+                itemProperties.put("attempts", JsonUtil.unbox(queueItem.get("attempts")));
+                itemProperties.put("time", JsonUtil.unbox(queueItem.get("time")));
+                itemProperties.put("state", JsonUtil.unbox(queueItem.get("state")));
 
                 result.add(itemProperties);
             }
diff --git a/src/test/java/org/apache/sling/distribution/it/JsonUtil.java b/src/test/java/org/apache/sling/distribution/it/JsonUtil.java
new file mode 100644
index 0000000..11fabb1
--- /dev/null
+++ b/src/test/java/org/apache/sling/distribution/it/JsonUtil.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.distribution.it;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.AbstractMap;
+import java.util.Map.Entry;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonException;
+import javax.json.JsonNumber;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonString;
+import javax.json.JsonStructure;
+import javax.json.JsonValue;
+import javax.json.JsonValue.ValueType;
+
+public class JsonUtil {
+    public static JsonStructure parse(String input) throws JsonException {
+        return Json.createReader(new StringReader(input)).read();
+    }
+
+    public static JsonObject parseObject(String input) throws JsonException{
+        return (JsonObject) parse(input);
+    }
+
+    public static JsonArray parseArray(String input) throws JsonException {
+        return (JsonArray) parse(input);
+    }
+
+    public static Object unbox(JsonValue value, Function<JsonStructure, Object> convert) throws JsonException {
+        switch (value.getValueType()) {
+            case ARRAY:
+            case OBJECT:
+                return convert.apply((JsonStructure) value);
+            case FALSE:
+                return Boolean.FALSE;
+            case TRUE:
+                return Boolean.TRUE;
+            case NULL:
+                return null;
+            case NUMBER:
+                JsonNumber number = (JsonNumber) value;
+                return number.isIntegral() ? number.longValue() : number.doubleValue();
+            case STRING:
+                return ((JsonString) value).getString();
+            default:
+                throw new JsonException("Unknow value type");
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    public static <T> T unbox(JsonValue value) {
+        return (T) unbox(value, json -> json.getValueType() == ValueType.ARRAY ? 
+                ((JsonArray) json).stream()
+                    .map(JsonUtil::unbox)
+                    .collect(Collectors.toList())
+                :
+                ((JsonObject) json).entrySet().stream()
+                    .map(entry -> new AbstractMap.SimpleEntry<>(entry.getKey(),unbox(entry.getValue())))
+                    .collect(Collectors.toMap(Entry::getKey, Entry::getValue)));
+    }
+
+    public static String toString(JsonValue value) {
+        StringWriter writer = new StringWriter();
+        Json.createGenerator(writer).write(value).close();
+        return writer.toString();
+    }
+
+    public static String toString(JsonArrayBuilder builder) {
+        return toString(builder.build());
+    }
+    
+    public static String toString(JsonObjectBuilder builder) {
+        return toString(builder.build());
+    }
+}
diff --git a/src/test/java/org/apache/sling/distribution/it/MultipleForwardDistributionTest.java b/src/test/java/org/apache/sling/distribution/it/MultipleForwardDistributionTest.java
index 73bb488..a60def5 100644
--- a/src/test/java/org/apache/sling/distribution/it/MultipleForwardDistributionTest.java
+++ b/src/test/java/org/apache/sling/distribution/it/MultipleForwardDistributionTest.java
@@ -18,8 +18,6 @@
  */
 package org.apache.sling.distribution.it;
 
-import org.apache.sling.commons.json.JSONArray;
-import org.apache.sling.commons.json.JSONObject;
 import org.apache.sling.distribution.DistributionRequestType;
 import org.junit.After;
 import org.junit.Ignore;
@@ -27,6 +25,9 @@
 
 import java.io.IOException;
 
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+
 import static junit.framework.Assert.assertEquals;
 import static org.apache.sling.distribution.it.DistributionUtils.assertExists;
 import static org.apache.sling.distribution.it.DistributionUtils.assertNotExists;
@@ -70,10 +71,10 @@
         assertExists(publishClient, nodePath);
 
         {
-            JSONObject json = getResource(author, queueUrl("publish-multiple") + "/passivequeue1");
+            JsonObject json = getResource(author, queueUrl("publish-multiple") + "/passivequeue1");
 
-            JSONArray queueItems = json.getJSONArray("items");
-            assertEquals(1, queueItems.length());
+            JsonArray queueItems = json.getJsonArray("items");
+            assertEquals(1, queueItems.size());
             assertEquals(1, json.get("itemsCount"));
         }
 
@@ -81,10 +82,10 @@
         String content = doExport(author, "publish-multiple-passivequeue1", DistributionRequestType.PULL, null);
 
         {
-            JSONObject json = getResource(author, queueUrl("publish-multiple") + "/passivequeue1");
+            JsonObject json = getResource(author, queueUrl("publish-multiple") + "/passivequeue1");
 
-            JSONArray queueItems = json.getJSONArray("items");
-            assertEquals(0, queueItems.length());
+            JsonArray queueItems = json.getJsonArray("items");
+            assertEquals(0, queueItems.size());
             assertEquals(0, json.get("itemsCount"));
         }