Search in sources :

Example 21 with JsonString

use of javax.json.JsonString in project sling by apache.

the class TeleporterHttpClient method verifyCorrectBundleState.

void verifyCorrectBundleState(String bundleSymbolicName, int timeoutInSeconds) throws IOException {
    final String url = baseUrl + "/system/console/bundles/" + bundleSymbolicName + ".json";
    final long end = System.currentTimeMillis() + timeoutInSeconds * 1000;
    final ExponentialBackoffDelay d = new ExponentialBackoffDelay(50, 250);
    while (System.currentTimeMillis() < end) {
        String jsonBody = waitForStatus(url, 200, timeoutInSeconds * 1000);
        // deserialize json (https://issues.apache.org/jira/browse/SLING-6536)
        try (JsonReader jsonReader = Json.createReader(new StringReader(jsonBody))) {
            // extract state
            JsonArray jsonArray = jsonReader.readObject().getJsonArray("data");
            if (jsonArray == null) {
                throw new JsonException("Could not find 'data' array");
            }
            JsonObject bundleObject = jsonArray.getJsonObject(0);
            String state = bundleObject.getString("state");
            if ("Active".equals(state)) {
                return;
            }
            // otherwise evaluate the import section
            JsonArray propsArray = bundleObject.getJsonArray("props");
            if (propsArray == null) {
                throw new JsonException("Could not find 'props' object");
            }
            // iterate through all of them until key="Imported Packages" is found
            for (JsonValue propValue : propsArray) {
                if (propValue.getValueType().equals(ValueType.OBJECT)) {
                    JsonObject propObject = (JsonObject) propValue;
                    if ("Imported Packages".equals(propObject.getString("key"))) {
                        JsonArray importedPackagesArray = propObject.getJsonArray("value");
                        String reason = null;
                        for (JsonValue importedPackageValue : importedPackagesArray) {
                            if (importedPackageValue.getValueType().equals(ValueType.STRING)) {
                                String importedPackage = ((JsonString) importedPackageValue).getString();
                                if (importedPackage.startsWith("ERROR:")) {
                                    reason = importedPackage;
                                }
                            }
                        }
                        // only if ERROR is found there is no more need to wait for the bundle to become active, otherwise it might just be started in the background
                        if (reason != null) {
                            throw new IllegalStateException("The test bundle '" + bundleSymbolicName + "' is in state '" + state + "'. This is due to unresolved import-packages: " + reason);
                        }
                    }
                }
            }
        } catch (JsonException | IndexOutOfBoundsException e) {
            throw new IllegalArgumentException("Test bundle '" + bundleSymbolicName + "' not correctly installed. Could not parse JSON response though to expose further information: " + jsonBody, e);
        }
        d.waitNextDelay();
    }
    throw new IOException("Bundle '" + bundleSymbolicName + "' was not started after " + timeoutInSeconds + " seconds. The check at " + url + " was not successfull. Probably some dependent bundle was not started.");
}
Also used : JsonException(javax.json.JsonException) JsonValue(javax.json.JsonValue) JsonObject(javax.json.JsonObject) JsonString(javax.json.JsonString) IOException(java.io.IOException) JsonArray(javax.json.JsonArray) StringReader(java.io.StringReader) JsonReader(javax.json.JsonReader) JsonString(javax.json.JsonString)

Aggregations

JsonString (javax.json.JsonString)21 JsonObject (javax.json.JsonObject)18 StringReader (java.io.StringReader)14 JsonReader (javax.json.JsonReader)12 Test (org.junit.Test)10 JsonArray (javax.json.JsonArray)5 HashMap (java.util.HashMap)4 JsonException (javax.json.JsonException)4 JsonValue (javax.json.JsonValue)4 IOException (java.io.IOException)3 ArrayList (java.util.ArrayList)2 Map (java.util.Map)2 ParseException (org.apache.sling.jcr.contentparser.ParseException)2 TableRef (com.torodb.core.TableRef)1 File (java.io.File)1 FileNotFoundException (java.io.FileNotFoundException)1 FileReader (java.io.FileReader)1 FilenameFilter (java.io.FilenameFilter)1 StringWriter (java.io.StringWriter)1 Calendar (java.util.Calendar)1