/* * 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.synapse.mediators.filters; import junit.framework.TestCase; import org.apache.synapse.MessageContext; import org.apache.synapse.config.xml.AnonymousListMediator; import org.apache.synapse.mediators.TestMediateHandler; import org.apache.synapse.mediators.TestMediator; import org.apache.synapse.mediators.TestUtils; import org.apache.synapse.mediators.base.SequenceMediator; import org.apache.synapse.util.xpath.SynapseXPath; import java.util.regex.Pattern; public class FilterMediatorTest extends TestCase { private static final String REQ = "<m:GetQuote xmlns:m=\"http://www.webserviceX.NET/\">\n" + "\t<m:symbol>IBM</m:symbol>\n" + "</m:GetQuote>"; private boolean filterConditionPassed = false; TestMediator testMediator = new TestMediator(); public void setUp() { testMediator = new TestMediator(); testMediator.setHandler( new TestMediateHandler() { public void handle(MessageContext synCtx) { setFilterConditionPassed(true); } }); } public void testFilterConditionTrueXPath() throws Exception { setFilterConditionPassed(false); // create a new filter mediator FilterMediator filter = new FilterMediator(); // set xpath condition to IBM SynapseXPath xpath = new SynapseXPath("//*[wsx:symbol='IBM']"); xpath.addNamespace("wsx", "http://www.webserviceX.NET/"); filter.setXpath(xpath); // set dummy mediator to be called on success filter.addChild(testMediator); // test validate mediator, with static enveope filter.mediate(TestUtils.getTestContext(REQ)); assertTrue(filterConditionPassed); } public void testFilterConditionFalseXPath() throws Exception { setFilterConditionPassed(false); // create a new filter mediator FilterMediator filter = new FilterMediator(); // set xpath condition to MSFT SynapseXPath xpath = new SynapseXPath("//*[wsx:symbol='MSFT']"); xpath.addNamespace("wsx", "http://www.webserviceX.NET/"); filter.setXpath(xpath); // set dummy mediator to be called on success filter.addChild(testMediator); // test validate mediator, with static enveope filter.mediate(TestUtils.getTestContext(REQ)); assertTrue(!filterConditionPassed); } public void testFilterConditionTrueRegex() throws Exception { setFilterConditionPassed(false); // create a new filter mediator FilterMediator filter = new FilterMediator(); // set source xpath condition to //symbol SynapseXPath source = new SynapseXPath("//wsx:symbol"); source.addNamespace("wsx", "http://www.webserviceX.NET/"); filter.setSource(source); // set regex to IBM Pattern regex = Pattern.compile("IBM"); filter.setRegex(regex); // set dummy mediator to be called on success filter.addChild(testMediator); // test validate mediator, with static enveope filter.mediate(TestUtils.getTestContext(REQ)); assertTrue(filterConditionPassed); } public void testFilterConditionFalseRegex() throws Exception { setFilterConditionPassed(false); // create a new filter mediator FilterMediator filter = new FilterMediator(); // set source xpath condition to //symbol SynapseXPath source = new SynapseXPath("//wsx:symbol"); source.addNamespace("wsx", "http://www.webserviceX.NET/"); filter.setSource(source); // set regex to MSFT Pattern regex = Pattern.compile("MSFT"); filter.setRegex(regex); // set dummy mediator to be called on success filter.addChild(testMediator); // test validate mediator, with static enveope filter.mediate(TestUtils.getTestContext(REQ)); assertTrue(!filterConditionPassed); } public void testFilterConditionWithThenElseKey() throws Exception { setFilterConditionPassed(false); // create a new filter mediator FilterMediator filter = new FilterMediator(); // set source xpath condition to //symbol SynapseXPath source = new SynapseXPath("//wsx:symbol"); source.addNamespace("wsx", "http://www.webserviceX.NET/"); filter.setSource(source); // set regex to MSFT Pattern regex = Pattern.compile("MSFT"); filter.setRegex(regex); MessageContext msgCtx = TestUtils.getTestContext(REQ); SequenceMediator seq = new SequenceMediator(); seq.setName("refSeq"); seq.addChild(testMediator); msgCtx.getConfiguration().addSequence("refSeq", testMediator); filter.setElseKey("refSeq"); // test validate mediator, with static enveope filter.mediate(msgCtx); assertTrue(filterConditionPassed); } public void testFilterConditionWithThenElse() throws Exception { setFilterConditionPassed(false); // create a new filter mediator FilterMediator filter = new FilterMediator(); // set source xpath condition to //symbol SynapseXPath source = new SynapseXPath("//wsx:symbol"); source.addNamespace("wsx", "http://www.webserviceX.NET/"); filter.setSource(source); // set regex to MSFT Pattern regex = Pattern.compile("MSFT"); filter.setRegex(regex); AnonymousListMediator seq = new AnonymousListMediator(); seq.addChild(testMediator); filter.setElseMediator(seq); // test validate mediator, with static enveope filter.mediate(TestUtils.getTestContext(REQ)); assertTrue(filterConditionPassed); } public boolean isFilterConditionPassed() { return filterConditionPassed; } public void setFilterConditionPassed(boolean filterConditionPassed) { this.filterConditionPassed = filterConditionPassed; } }