/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.core.routing.filters;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mule.runtime.api.message.Message.of;
import static org.mule.runtime.core.api.MessageExchangePattern.ONE_WAY;
import org.mule.runtime.api.message.Message;
import org.mule.runtime.core.api.Event;
import org.mule.runtime.core.internal.message.InternalMessage;
import org.mule.tck.junit4.AbstractMuleTestCase;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
public class MessagePropertyFilterTestCase extends AbstractMuleTestCase {
@Test
public void testMessagePropertyFilter() throws Exception {
MessagePropertyFilter filter = new MessagePropertyFilter("foo=bar");
Message message = of("blah");
assertTrue(!filter.accept(message, mock(Event.Builder.class)));
message = InternalMessage.builder(message).addOutboundProperty("foo", "bar").build();
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
}
@Test
public void testMessagePropertyFilterInboundScope() throws Exception {
Message message = of("blah");
MessagePropertyFilter filter = new MessagePropertyFilter("inbound:foo=bar");
assertEquals("inbound", filter.getScope());
assertFalse(filter.accept(message, mock(Event.Builder.class)));
message = InternalMessage.builder(message).addInboundProperty("foo", "bar").build();
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
}
@Test
public void testMessagePropertyFilterWithURL() throws Exception {
Message message = of("blah");
MessagePropertyFilter filter = new MessagePropertyFilter("inbound:foo=http://foo.com");
assertEquals("inbound", filter.getScope());
assertFalse(filter.accept(message, mock(Event.Builder.class)));
Map inboundProps = new HashMap();
inboundProps.put("foo", "http://foo.com");
message = InternalMessage.builder().payload("blah").inboundProperties(inboundProps).build();
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
// Checking here that a ':' in the value doesn't throw things off
filter = new MessagePropertyFilter("bar=http://bar.com");
// default scope
assertEquals("outbound", filter.getScope());
assertFalse(filter.accept(message, mock(Event.Builder.class)));
message = InternalMessage.builder(message).addOutboundProperty("bar", "http://bar.com").build();
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
}
@Test
public void testMessagePropertyFilterWithNot() throws Exception {
MessagePropertyFilter filter = new MessagePropertyFilter("foo!=bar");
Message message = of("blah");
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
message = InternalMessage.builder(message).addOutboundProperty("foo", "bar").build();
assertFalse(filter.accept(message, mock(Event.Builder.class)));
message = InternalMessage.builder(message).addOutboundProperty("foo", "car").build();
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
}
@Test
public void testMessagePropertyFilterWithNotNull() throws Exception {
MessagePropertyFilter filter = new MessagePropertyFilter("foo!=null");
Message message = of("blah");
assertFalse(filter.accept(message, mock(Event.Builder.class)));
message = removeProperty((InternalMessage) message, "foo");
assertFalse(filter.accept(message, mock(Event.Builder.class)));
message = InternalMessage.builder(message).addOutboundProperty("foo", "car").build();
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
}
@Test
public void testMessagePropertyFilterWithCaseSensitivity() throws Exception {
MessagePropertyFilter filter = new MessagePropertyFilter("foo=Bar");
Message message = of("blah");
message = InternalMessage.builder(message).addOutboundProperty("foo", "bar").build();
assertFalse(filter.accept(message, mock(Event.Builder.class)));
filter.setCaseSensitive(false);
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
}
@Test
public void testMessagePropertyFilterWithWildcard() throws Exception {
MessagePropertyFilter filter = new MessagePropertyFilter("foo=B*");
Message message = of("blah");
message = InternalMessage.builder(message).addOutboundProperty("foo", "bar").build();
assertFalse(filter.accept(message, mock(Event.Builder.class)));
filter.setCaseSensitive(false);
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
filter.setPattern("foo=*a*");
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
}
@Test
public void testMessagePropertyFilterDodgyValues() throws Exception {
MessagePropertyFilter filter = new MessagePropertyFilter();
assertFalse(filter.accept((InternalMessage) null, mock(Event.Builder.class)));
filter = new MessagePropertyFilter("foo = bar");
Message message = of("blah");
message = InternalMessage.builder(message).addOutboundProperty("foo", "bar").build();
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
filter.setCaseSensitive(false);
filter = new MessagePropertyFilter("foo2 =null");
message = removeProperty((InternalMessage) message, "foo2");
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
filter = new MessagePropertyFilter("foo2 =");
message = InternalMessage.builder(message).addOutboundProperty("foo2", "").build();
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
message = removeProperty((InternalMessage) message, "foo2");
assertFalse(filter.accept(message, mock(Event.Builder.class)));
}
private Message removeProperty(InternalMessage message, String property) {
return InternalMessage.builder(message).removeOutboundProperty(property).build();
}
@Test
public void testMessagePropertyFilterPropertyExists() throws Exception {
MessagePropertyFilter filter = new MessagePropertyFilter("foo!=null");
Message message = of("blah");
assertFalse(filter.accept(message, mock(Event.Builder.class)));
message = InternalMessage.builder(message).addOutboundProperty("foo", "car").build();
assertTrue("Filter didn't accept the message", filter.accept(message, mock(Event.Builder.class)));
}
@Test
public void testMessagePropertyWithEnum() throws Exception {
MessagePropertyFilter filter = new MessagePropertyFilter("foo=ONE_WAY");
Message message = of("");
assertFalse(filter.accept(message, mock(Event.Builder.class)));
message = InternalMessage.builder(message).addOutboundProperty("foo", ONE_WAY).build();
assertTrue(filter.accept(message, mock(Event.Builder.class)));
}
}