/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* 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.kie.server.router.proxy.aggregate;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.jboss.logging.Logger;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.Test;
import org.kie.server.router.proxy.aggragate.JSONResponseAggregator;
public class JSONAggregatorTest extends AbstractAggregateTest {
private static final Logger logger = Logger.getLogger(JSONAggregatorTest.class);
@Test
public void testAggregateProcessDefinitions() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/process-def-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/process-def-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONObject aggregated = new JSONObject(result);
assertNotNull(aggregated);
Object processes = aggregated.get("processes");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(8, processDefs.length());
}
@Test
public void testAggregateProcessDefinitionsTargetEmpty() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/process-def-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/process-def-empty.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONObject aggregated = new JSONObject(result);
assertNotNull(aggregated);
Object processes = aggregated.get("processes");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(5, processDefs.length());
}
@Test
public void testAggregateProcessDefinitionsSourceEmpty() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/process-def-empty.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/process-def-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONObject aggregated = new JSONObject(result);
assertNotNull(aggregated);
Object processes = aggregated.get("processes");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(3, processDefs.length());
}
@Test
public void testAggregateProcessDefinitionsEmpty() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/process-def-empty.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/process-def-empty.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONObject aggregated = new JSONObject(result);
assertNotNull(aggregated);
Object processes = aggregated.get("processes");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(0, processDefs.length());
}
@Test
public void testAggregateProcessInstances() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/process-instance-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/process-instance-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONObject aggregated = new JSONObject(result);
assertNotNull(aggregated);
Object processes = aggregated.get("process-instance");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(5, processDefs.length());
}
@Test
public void testAggregateProcessInstancesTargetEmpty() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/process-instance-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/process-instance-empty.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONObject aggregated = new JSONObject(result);
assertNotNull(aggregated);
Object processes = aggregated.get("process-instance");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(3, processDefs.length());
}
@Test
public void testAggregateProcessInstancesSourceEmpty() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/process-instance-empty.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/process-instance-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONObject aggregated = new JSONObject(result);
assertNotNull(aggregated);
Object processes = aggregated.get("process-instance");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(2, processDefs.length());
}
@Test
public void testAggregateProcessInstancesEmpty() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/process-instance-empty.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/process-instance-empty.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONObject aggregated = new JSONObject(result);
assertNotNull(aggregated);
Object processes = aggregated.get("process-instance");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(0, processDefs.length());
}
@Test
public void testAggregateTaskSummaries() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/task-summary-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/task-summary-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONObject aggregated = new JSONObject(result);
assertNotNull(aggregated);
Object processes = aggregated.get("task-summary");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(7, processDefs.length());
}
@Test
public void testAggregateTaskSummariesTargetEmpty() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/task-summary-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/task-summary-empty.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONObject aggregated = new JSONObject(result);
assertNotNull(aggregated);
Object processes = aggregated.get("task-summary");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(3, processDefs.length());
}
@Test
public void testAggregateTaskSummariesSourceEmpty() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/task-summary-empty.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/task-summary-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONObject aggregated = new JSONObject(result);
assertNotNull(aggregated);
Object processes = aggregated.get("task-summary");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(4, processDefs.length());
}
@Test
public void testAggregateTaskSummariesEmpty() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/task-summary-empty.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/task-summary-empty.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONObject aggregated = new JSONObject(result);
assertNotNull(aggregated);
Object processes = aggregated.get("task-summary");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(0, processDefs.length());
}
@Test
public void testSortProcessDefinitions() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/process-def-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/process-def-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String sorted = aggregate.aggregate(data, "ProcessId", true, 0, 2);
logger.debug(sorted);
JSONObject aggregated = new JSONObject(sorted);
assertNotNull(aggregated);
Object processes = aggregated.get("processes");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(2, processDefs.length());
// make sure it's properly sorted and paged
String value1 = ((JSONObject)processDefs.get(0)).getString("process-id");
assertEquals("1", value1);
String value2 = ((JSONObject)processDefs.get(1)).getString("process-id");
assertEquals("2", value2);
}
@Test
public void testSortProcessDefinitionsDescending() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/process-def-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/process-def-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String sorted = aggregate.aggregate(data, "ProcessId", false, 0, 2);
logger.debug(sorted);
JSONObject aggregated = new JSONObject(sorted);
assertNotNull(aggregated);
Object processes = aggregated.get("processes");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(2, processDefs.length());
// make sure it's properly sorted and paged
String value1 = ((JSONObject)processDefs.get(0)).getString("process-id");
assertEquals("8", value1);
String value2 = ((JSONObject)processDefs.get(1)).getString("process-id");
assertEquals("7", value2);
}
@Test
public void testSortProcessDefinitionsNextPage() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/process-def-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/process-def-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String sorted = aggregate.aggregate(data, "ProcessId", true, 1, 2);
logger.debug(sorted);
JSONObject aggregated = new JSONObject(sorted);
assertNotNull(aggregated);
Object processes = aggregated.get("processes");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(2, processDefs.length());
// make sure it's properly sorted and paged
String value1 = ((JSONObject)processDefs.get(0)).getString("process-id");
assertEquals("3", value1);
String value2 = ((JSONObject)processDefs.get(1)).getString("process-id");
assertEquals("4", value2);
}
@Test
public void testSortProcessDefinitionsNextPageDescending() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/process-def-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/process-def-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String sorted = aggregate.aggregate(data, "ProcessId", false, 1, 2);
logger.debug(sorted);
JSONObject aggregated = new JSONObject(sorted);
assertNotNull(aggregated);
Object processes = aggregated.get("processes");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(2, processDefs.length());
// make sure it's properly sorted and paged
String value1 = ((JSONObject)processDefs.get(0)).getString("process-id");
assertEquals("6", value1);
String value2 = ((JSONObject)processDefs.get(1)).getString("process-id");
assertEquals("5", value2);
}
@Test
public void testSortProcessDefinitionsOutOfPage() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/process-def-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/process-def-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String sorted = aggregate.aggregate(data, "ProcessId", true, 5, 2);
logger.debug(sorted);
JSONObject aggregated = new JSONObject(sorted);
assertNotNull(aggregated);
Object processes = aggregated.get("processes");
assertNotNull(processes);
assertTrue(processes instanceof JSONArray);
JSONArray processDefs = (JSONArray) processes;
assertEquals(0, processDefs.length());
}
@Test
public void testAggregateContainers() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/containers-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/containers-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONObject aggregated = new JSONObject(result);
assertNotNull(aggregated);
JSONObject content = (JSONObject)((JSONObject) aggregated.get("result")).get("kie-containers");
Object containers = content.get("kie-container");
assertNotNull(containers);
assertTrue(containers instanceof JSONArray);
JSONArray processDefs = (JSONArray) containers;
assertEquals(6, processDefs.length());
}
@Test
public void testAggregateRawList() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/raw-list-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/raw-list-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data);
logger.debug(result);
JSONArray aggregated = new JSONArray(result);
assertNotNull(aggregated);
assertEquals(5, aggregated.length());
}
@Test
public void testAggregateRawListWithPaging() throws Exception {
String json1 = read(this.getClass().getResourceAsStream("/json/raw-list-1.json"));
String json2 = read(this.getClass().getResourceAsStream("/json/raw-list-2.json"));
JSONResponseAggregator aggregate = new JSONResponseAggregator();
List<String> data = new ArrayList<>();
data.add(json1);
data.add(json2);
String result = aggregate.aggregate(data, null, true, 1, 2);
logger.debug(result);
JSONArray aggregated = new JSONArray(result);
assertNotNull(aggregated);
assertEquals(2, aggregated.length());
}
}