From 49b4957270e04d3c406bf0e8ecb2fa437b5b3aa2 Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Sat, 7 Feb 2015 12:24:33 -0500 Subject: [PATCH] Fix Redis Synchronization Tests The "transaction" synchronization tests use a `QueueChannel`. The payload is a live reference to the Redis object. It is possible that the test for the returned size occurs after the "transaction" commits. Change the tests to extract the size() on the poller thread so that the size is always captured before the "transaction" commits. --- ...InboundChannelAdapterIntegrationTests.java | 27 +++++++++---------- .../redis/inbound/list-inbound-adapter.xml | 10 ++++--- .../redis/inbound/zset-inbound-adapter.xml | 5 +++- .../redis/rules/RedisAvailableTests.java | 4 +-- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/RedisStoreInboundChannelAdapterIntegrationTests.java b/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/RedisStoreInboundChannelAdapterIntegrationTests.java index cbd271a731..6a3cfa00b0 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/RedisStoreInboundChannelAdapterIntegrationTests.java +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/RedisStoreInboundChannelAdapterIntegrationTests.java @@ -29,7 +29,6 @@ import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.data.redis.support.collections.RedisList; import org.springframework.data.redis.support.collections.RedisZSet; import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.endpoint.SourcePollingChannelAdapter; @@ -59,14 +58,14 @@ public class RedisStoreInboundChannelAdapterIntegrationTests extends RedisAvaila spca.start(); QueueChannel redisChannel = context.getBean("redisChannel", QueueChannel.class); - Message> message = (Message>) redisChannel.receive(1000); + Message message = (Message) redisChannel.receive(1000); assertNotNull(message); - assertEquals(13, message.getPayload().size()); + assertEquals(Integer.valueOf(13), message.getPayload()); //poll again, should get the same stuff - message = (Message>) redisChannel.receive(1000); + message = (Message) redisChannel.receive(1000); assertNotNull(message); - assertEquals(13, message.getPayload().size()); + assertEquals(Integer.valueOf(13), message.getPayload()); this.deletePresidents(jcf); context.close(); } @@ -85,12 +84,12 @@ public class RedisStoreInboundChannelAdapterIntegrationTests extends RedisAvaila spca.start(); QueueChannel redisChannel = context.getBean("redisChannel", QueueChannel.class); - Message> message = (Message>) redisChannel.receive(1000); + Message message = (Message) redisChannel.receive(1000); assertNotNull(message); - assertEquals(13, message.getPayload().size()); + assertEquals(Integer.valueOf(13), message.getPayload()); //poll again, should get nothing since the collection was removed during synchronization - message = (Message>) redisChannel.receive(1000); + message = (Message) redisChannel.receive(1000); assertNull(message); assertEquals(Long.valueOf(13), template.boundListOps("bar").size()); template.delete("bar"); @@ -149,12 +148,12 @@ public class RedisStoreInboundChannelAdapterIntegrationTests extends RedisAvaila spca.start(); QueueChannel redisChannel = context.getBean("redisChannel", QueueChannel.class); - Message> message = (Message>) redisChannel.receive(1000); + Message message = (Message) redisChannel.receive(1000); assertNotNull(message); - assertEquals(13, message.getPayload().size()); + assertEquals(Integer.valueOf(13), message.getPayload()); //poll again, should get nothing since the collection was removed during synchronization - message = (Message>) redisChannel.receive(1000); + message = (Message) redisChannel.receive(1000); assertNull(message); assertEquals(Long.valueOf(13), template.boundListOps("bar").size()); template.delete("bar"); @@ -239,9 +238,9 @@ public class RedisStoreInboundChannelAdapterIntegrationTests extends RedisAvaila // get only presidents for 18th century zsetAdapterWithSingleScoreAndSynchronization.start(); - message = (Message>) otherRedisChannel.receive(2000); - assertNotNull(message); - assertEquals(2, message.getPayload().rangeByScore(18, 18).size()); + Message sizeMessage = (Message) otherRedisChannel.receive(2000); + assertNotNull(sizeMessage); + assertEquals(Integer.valueOf(2), sizeMessage.getPayload()); // ... however other elements are still available 13-2=11 zsetAdapterNoScore.start(); diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/list-inbound-adapter.xml b/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/list-inbound-adapter.xml index 6e41022409..ed95e1bf9f 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/list-inbound-adapter.xml +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/list-inbound-adapter.xml @@ -10,7 +10,7 @@ @@ -19,7 +19,7 @@ @@ -41,7 +41,7 @@ @@ -56,7 +56,7 @@ @@ -81,6 +81,8 @@ + + diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/zset-inbound-adapter.xml b/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/zset-inbound-adapter.xml index a44c63772c..075af8fee3 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/zset-inbound-adapter.xml +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/zset-inbound-adapter.xml @@ -37,7 +37,7 @@ @@ -53,6 +53,9 @@ + + diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/rules/RedisAvailableTests.java b/spring-integration-redis/src/test/java/org/springframework/integration/redis/rules/RedisAvailableTests.java index 03b32c02e9..1c72aafe22 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/rules/RedisAvailableTests.java +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/rules/RedisAvailableTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -129,7 +129,7 @@ public class RedisAvailableTests { ops.add("Ronald Reagan", 20); ops.add("William J. Clinton", 20); ops.add("Abraham Lincoln", 19); - ops.add("George Wahington", 18); + ops.add("George Washington", 18); } protected void deletePresidents(RedisConnectionFactory connectionFactory){