/* * 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 java.util.ArrayList; import java.util.List; import org.jboss.logging.Logger; import org.junit.Test; import org.kie.server.router.proxy.aggragate.XstreamXMLResponseAggregator; import org.w3c.dom.Document; import org.w3c.dom.NodeList; public class XstreamAggregatorTest extends AbstractAggregateTest { private static final Logger logger = Logger.getLogger(XstreamAggregatorTest.class); @Test public void testAggregateProcessDefinitions() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/process-def-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/process-def-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinitionList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList defs = xml.getElementsByTagName("processes"); assertNotNull(defs); assertEquals(1, defs.getLength()); NodeList processDefs = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinition"); assertNotNull(processDefs); assertEquals(5, processDefs.getLength()); } @Test public void testAggregateProcessDefinitionsTargetEmpty() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/process-def-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/process-def-empty.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinitionList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList defs = xml.getElementsByTagName("processes"); assertNotNull(defs); assertEquals(1, defs.getLength()); NodeList processDefs = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinition"); assertNotNull(processDefs); assertEquals(2, processDefs.getLength()); } @Test public void testAggregateProcessDefinitionsSourceEmpty() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/process-def-empty.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/process-def-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinitionList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList defs = xml.getElementsByTagName("processes"); assertNotNull(defs); assertEquals(1, defs.getLength()); NodeList processDefs = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinition"); assertNotNull(processDefs); assertEquals(3, processDefs.getLength()); } @Test public void testAggregateProcessDefinitionsEmpty() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/process-def-empty.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/process-def-empty.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinitionList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList defs = xml.getElementsByTagName("processes"); assertNotNull(defs); assertEquals(1, defs.getLength()); NodeList processDefs = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinition"); assertNotNull(processDefs); assertEquals(0, processDefs.getLength()); } @Test public void testAggregateProcessInstances() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/process-instance-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/process-instance-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.instance.ProcessInstanceList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList instances = xml.getElementsByTagName("processInstances"); assertNotNull(instances); assertEquals(1, instances.getLength()); NodeList processInstances = xml.getElementsByTagName("org.kie.server.api.model.instance.ProcessInstance"); assertNotNull(processInstances); assertEquals(3, processInstances.getLength()); } @Test public void testAggregateProcessInstancesTargetEmpty() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/process-instance-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/process-instance-empty.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.instance.ProcessInstanceList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList instances = xml.getElementsByTagName("processInstances"); assertNotNull(instances); assertEquals(1, instances.getLength()); NodeList processInstances = xml.getElementsByTagName("org.kie.server.api.model.instance.ProcessInstance"); assertNotNull(processInstances); assertEquals(1, processInstances.getLength()); } @Test public void testAggregateProcessInstancesSourceEmpty() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/process-instance-empty.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/process-instance-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.instance.ProcessInstanceList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList instances = xml.getElementsByTagName("processInstances"); assertNotNull(instances); assertEquals(1, instances.getLength()); NodeList processInstances = xml.getElementsByTagName("org.kie.server.api.model.instance.ProcessInstance"); assertNotNull(processInstances); assertEquals(2, processInstances.getLength()); } @Test public void testAggregateProcessInstancesEmpty() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/process-instance-empty.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/process-instance-empty.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.instance.ProcessInstanceList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList instances = xml.getElementsByTagName("processInstances"); assertNotNull(instances); assertEquals(1, instances.getLength()); NodeList processInstances = xml.getElementsByTagName("org.kie.server.api.model.instance.ProcessInstance"); assertNotNull(processInstances); assertEquals(0, processInstances.getLength()); } @Test public void testAggregateTaskSummaries() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/task-summary-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/task-summary-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.instance.TaskSummaryList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList tasks = xml.getElementsByTagName("tasks"); assertNotNull(tasks); assertEquals(1, tasks.getLength()); NodeList processInstances = xml.getElementsByTagName("org.kie.server.api.model.instance.TaskSummary"); assertNotNull(processInstances); assertEquals(5, processInstances.getLength()); } @Test public void testAggregateTaskSummariesTargetEmpty() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/task-summary-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/task-summary-empty.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.instance.TaskSummaryList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList tasks = xml.getElementsByTagName("tasks"); assertNotNull(tasks); assertEquals(1, tasks.getLength()); NodeList processInstances = xml.getElementsByTagName("org.kie.server.api.model.instance.TaskSummary"); assertNotNull(processInstances); assertEquals(3, processInstances.getLength()); } @Test public void testAggregateTaskSummariesSourceEmpty() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/task-summary-empty.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/task-summary-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.instance.TaskSummaryList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList tasks = xml.getElementsByTagName("tasks"); assertNotNull(tasks); assertEquals(1, tasks.getLength()); NodeList processInstances = xml.getElementsByTagName("org.kie.server.api.model.instance.TaskSummary"); assertNotNull(processInstances); assertEquals(2, processInstances.getLength()); } @Test public void testAggregateTaskSummariesEmpty() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/task-summary-empty.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/task-summary-empty.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.instance.TaskSummaryList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList tasks = xml.getElementsByTagName("tasks"); assertNotNull(tasks); assertEquals(1, tasks.getLength()); NodeList processInstances = xml.getElementsByTagName("org.kie.server.api.model.instance.TaskSummary"); assertNotNull(processInstances); assertEquals(0, processInstances.getLength()); } @Test public void testSortProcessDefinitions() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/process-def-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/process-def-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data, "ProcessId", true, 0, 2); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinitionList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList defs = xml.getElementsByTagName("processes"); assertNotNull(defs); assertEquals(1, defs.getLength()); NodeList processDefs = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinition"); assertNotNull(processDefs); assertEquals(2, processDefs.getLength()); NodeList processDefIds = xml.getElementsByTagName("id"); assertNotNull(processDefIds); assertEquals(2, processDefIds.getLength()); // make sure it's properly sorted and paged String value1 = processDefIds.item(0).getFirstChild().getNodeValue(); assertEquals("1", value1); String value2 = processDefIds.item(1).getFirstChild().getNodeValue(); assertEquals("2", value2); } @Test public void testSortProcessDefinitionsDescending() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/process-def-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/process-def-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data, "ProcessId", false, 0, 2); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinitionList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList defs = xml.getElementsByTagName("processes"); assertNotNull(defs); assertEquals(1, defs.getLength()); NodeList processDefs = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinition"); assertNotNull(processDefs); assertEquals(2, processDefs.getLength()); NodeList processDefIds = xml.getElementsByTagName("id"); assertNotNull(processDefIds); assertEquals(2, processDefIds.getLength()); // make sure it's properly sorted and paged String value1 = processDefIds.item(0).getFirstChild().getNodeValue(); assertEquals("5", value1); String value2 = processDefIds.item(1).getFirstChild().getNodeValue(); assertEquals("4", value2); } @Test public void testSortProcessDefinitionsNextPage() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/process-def-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/process-def-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data, "ProcessId", true, 1, 2); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinitionList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList defs = xml.getElementsByTagName("processes"); assertNotNull(defs); assertEquals(1, defs.getLength()); NodeList processDefs = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinition"); assertNotNull(processDefs); assertEquals(2, processDefs.getLength()); NodeList processDefIds = xml.getElementsByTagName("id"); assertNotNull(processDefIds); assertEquals(2, processDefIds.getLength()); // make sure it's properly sorted and paged String value1 = processDefIds.item(0).getFirstChild().getNodeValue(); assertEquals("3", value1); String value2 = processDefIds.item(1).getFirstChild().getNodeValue(); assertEquals("4", value2); } @Test public void testSortProcessDefinitionsNextPageDescending() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/process-def-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/process-def-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data, "ProcessId", false, 1, 2); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinitionList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList defs = xml.getElementsByTagName("processes"); assertNotNull(defs); assertEquals(1, defs.getLength()); NodeList processDefs = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinition"); assertNotNull(processDefs); assertEquals(2, processDefs.getLength()); NodeList processDefIds = xml.getElementsByTagName("id"); assertNotNull(processDefIds); assertEquals(2, processDefIds.getLength()); // make sure it's properly sorted and paged String value1 = processDefIds.item(0).getFirstChild().getNodeValue(); assertEquals("3", value1); String value2 = processDefIds.item(1).getFirstChild().getNodeValue(); assertEquals("2", value2); } @Test public void testSortProcessDefinitionsOutOfPage() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/process-def-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/process-def-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data, "ProcessId", true, 5, 2); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinitionList"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList defs = xml.getElementsByTagName("processes"); assertNotNull(defs); assertEquals(1, defs.getLength()); NodeList processDefs = xml.getElementsByTagName("org.kie.server.api.model.definition.ProcessDefinition"); assertNotNull(processDefs); assertEquals(0, processDefs.getLength()); } @Test public void testAggregateContainers() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/containers-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/containers-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("org.kie.server.api.model.ServiceResponse"); assertNotNull(processes); assertEquals(1, processes.getLength()); NodeList defs = xml.getElementsByTagName("result"); assertNotNull(defs); assertEquals(1, defs.getLength()); NodeList processDefs = xml.getElementsByTagName("kie-container"); assertNotNull(processDefs); assertEquals(6, processDefs.getLength()); } @Test public void testAggregateRawList() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/raw-list-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/raw-list-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("sql-timestamp"); assertNotNull(processes); assertEquals(5, processes.getLength()); } @Test public void testAggregateRawListWithPaging() throws Exception { String xml1 = read(this.getClass().getResourceAsStream("/xstream/raw-list-1.xml")); String xml2 = read(this.getClass().getResourceAsStream("/xstream/raw-list-2.xml")); XstreamXMLResponseAggregator aggregate = new XstreamXMLResponseAggregator(); List<String> data = new ArrayList<>(); data.add(xml1); data.add(xml2); String result = aggregate.aggregate(data, null, true, 1, 2); logger.debug(result); Document xml = toXml(result); assertNotNull(xml); NodeList processes = xml.getElementsByTagName("sql-timestamp"); assertNotNull(processes); assertEquals(2, processes.getLength()); } }