INT-3850: Fix SpEL usage in the CacheWritingMH
JIRA: https://jira.spring.io/browse/INT-3850 **Cherry-pick to 4.1.x, 4.0.x, 3.0.x**
This commit is contained in:
committed by
Gary Russell
parent
b6467e1329
commit
bbfde40694
@@ -17,6 +17,7 @@
|
||||
package org.springframework.integration.gemfire.outbound;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
@@ -24,10 +25,15 @@ import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.data.gemfire.CacheFactoryBean;
|
||||
import org.springframework.data.gemfire.RegionFactoryBean;
|
||||
import org.springframework.expression.Expression;
|
||||
import org.springframework.expression.common.LiteralExpression;
|
||||
import org.springframework.integration.expression.ValueExpression;
|
||||
import org.springframework.integration.support.MessageBuilder;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.support.GenericMessage;
|
||||
|
||||
import com.gemstone.gemfire.cache.Cache;
|
||||
import com.gemstone.gemfire.cache.Region;
|
||||
@@ -37,6 +43,7 @@ import com.gemstone.gemfire.cache.Region;
|
||||
* @author David Turanski
|
||||
* @author Gunnar Hillert
|
||||
* @author Gary Russell
|
||||
* @author Artem Bilan
|
||||
* @since 2.1
|
||||
*/
|
||||
public class CacheWritingMessageHandlerTests {
|
||||
@@ -51,7 +58,11 @@ public class CacheWritingMessageHandlerTests {
|
||||
regionFactoryBean.afterPropertiesSet();
|
||||
Region<String, String> region = regionFactoryBean.getObject();
|
||||
assertEquals(0, region.size());
|
||||
|
||||
CacheWritingMessageHandler handler = new CacheWritingMessageHandler(region);
|
||||
handler.setBeanFactory(mock(BeanFactory.class));
|
||||
handler.afterPropertiesSet();
|
||||
|
||||
Map<String, String> map = new HashMap<String, String>();
|
||||
map.put("foo", "bar");
|
||||
Message<?> message = MessageBuilder.withPayload(map).build();
|
||||
@@ -61,14 +72,15 @@ public class CacheWritingMessageHandlerTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("unchecked")
|
||||
public void ExpressionsWriteToCache() throws Exception {
|
||||
CacheFactoryBean cacheFactoryBean = new CacheFactoryBean();
|
||||
Cache cache = cacheFactoryBean.getObject();
|
||||
RegionFactoryBean<String, String> regionFactoryBean = new RegionFactoryBean<String, String>() {};
|
||||
RegionFactoryBean<String, Object> regionFactoryBean = new RegionFactoryBean<String, Object>() {};
|
||||
regionFactoryBean.setName("test.expressionsWriteToCache");
|
||||
regionFactoryBean.setCache(cache);
|
||||
regionFactoryBean.afterPropertiesSet();
|
||||
Region<String, String> region = regionFactoryBean.getObject();
|
||||
Region<String, Object> region = regionFactoryBean.getObject();
|
||||
assertEquals(0, region.size());
|
||||
CacheWritingMessageHandler handler = new CacheWritingMessageHandler(region);
|
||||
|
||||
@@ -76,12 +88,23 @@ public class CacheWritingMessageHandlerTests {
|
||||
expressions.put("'foo'", "'bar'");
|
||||
expressions.put("payload.toUpperCase()", "headers['bar'].toUpperCase()");
|
||||
handler.setCacheEntries(expressions);
|
||||
handler.setBeanFactory(mock(BeanFactory.class));
|
||||
handler.afterPropertiesSet();
|
||||
|
||||
Message<?> message = MessageBuilder.withPayload("foo").copyHeaders(Collections.singletonMap("bar", "bar")).build();
|
||||
Message<?> message = MessageBuilder.withPayload("foo")
|
||||
.copyHeaders(Collections.singletonMap("bar", "bar"))
|
||||
.build();
|
||||
handler.handleMessage(message);
|
||||
assertEquals(2, region.size());
|
||||
assertEquals("BAR", region.get("FOO"));
|
||||
assertEquals("bar", region.get("foo"));
|
||||
|
||||
handler.setCacheEntryExpressions(Collections.<Expression, Expression>singletonMap(new LiteralExpression("baz"),
|
||||
new ValueExpression<Long>(10L)));
|
||||
|
||||
handler.handleMessage(new GenericMessage<String>("test"));
|
||||
assertEquals(3, region.size());
|
||||
assertEquals(10L, region.get("baz"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,19 +8,24 @@
|
||||
http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd
|
||||
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
|
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
|
||||
|
||||
|
||||
<gfe:cache />
|
||||
|
||||
<gfe:replicated-region id="region1"/>
|
||||
|
||||
|
||||
<gfe:replicated-region id="region2"/>
|
||||
|
||||
|
||||
<int-gfe:outbound-channel-adapter id="cacheChannel1" region="region1"/>
|
||||
|
||||
|
||||
<bean id="bar" class="java.lang.String">
|
||||
<constructor-arg value="bar"/>
|
||||
</bean>
|
||||
|
||||
<int-gfe:outbound-channel-adapter id="cacheChannel2" region="region2" order="19">
|
||||
<int-gfe:cache-entries>
|
||||
<entry key="payload.toUpperCase()" value="payload.toLowerCase()"/>
|
||||
<entry key="'foo'" value="'bar'"/>
|
||||
</int-gfe:cache-entries>
|
||||
<entry key="payload.toUpperCase()" value="payload.toLowerCase()"/>
|
||||
<entry key="'foo'" value="@bar"/>
|
||||
</int-gfe:cache-entries>
|
||||
</int-gfe:outbound-channel-adapter>
|
||||
|
||||
<int:chain input-channel="cacheChainChannel">
|
||||
|
||||
Reference in New Issue
Block a user