DonalEvans commented on a change in pull request #7227:
URL: https://github.com/apache/geode/pull/7227#discussion_r779218431



##########
File path: 
geode-for-redis/src/integrationTest/java/org/apache/geode/redis/internal/commands/executor/set/AbstractSMoveIntegrationTest.java
##########
@@ -163,24 +172,53 @@ public void 
ensureSetConsistency_whenRunningConcurrently() {
         i -> jedis.srem(sourceKey, movedMember),
         i -> moved.set(jedis.smove(sourceKey, destKey, movedMember)))
             .runWithAction(() -> {
-              // Check sdiffstore return size of diff
-              assertThat(moved).satisfiesAnyOf(
-                  smoveResult -> assertThat(smoveResult.get()).isEqualTo(0),
-                  smoveResult -> assertThat(smoveResult.get()).isEqualTo(1));
-              // Checks if values were moved or not from source key
-              assertThat(sourceKey).satisfiesAnyOf(
-                  source -> assertThat(jedis.smembers(source))
-                      .containsExactlyInAnyOrder(sourceMembers),
-                  source -> assertThat(jedis.smembers(source))
-                      .containsExactlyInAnyOrder(sourceMemberRemoved));
-              // Checks if values were moved or not to destination key
-              assertThat(destKey).satisfiesAnyOf(
-                  dest -> assertThat(jedis.smembers(dest))
-                      .containsExactlyInAnyOrder(destMembers),
-                  dest -> assertThat(jedis.smembers(dest))
-                      .containsExactlyInAnyOrder(destMemberAdded));
+              if (moved.get() == 1) {
+                assertThat(jedis.smembers(sourceKey))
+                    .containsExactlyInAnyOrder(sourceMemberRemoved);
+                
assertThat(jedis.smembers(destKey)).containsExactlyInAnyOrder(destMemberAdded);
+              } else {
+                assertThat(jedis.smembers(sourceKey))
+                    .containsExactlyInAnyOrder(sourceMemberRemoved);
+                
assertThat(jedis.smembers(destKey)).containsExactlyInAnyOrder(destMembers);
+              }
+              jedis.sadd(sourceKey, movedMember);
+              jedis.srem(destKey, movedMember);
+            });
+  }
+
+  @Test
+  public void 
ensureSetConsistency_whenRunningConcurrently_withSMovesFromSameSourceAndDifferentDestination()
 {
+    String[] sourceMemberRemoved = ArrayUtils.remove(sourceMembers, 0);
+    String[] destMemberAdded = ArrayUtils.add(destMembers, movedMember);
+    String[] nonExisistentMemberAdded = {movedMember};
+
+    jedis.sadd(sourceKey, sourceMembers);
+    jedis.sadd(destKey, destMembers);
+
+    final AtomicLong movedToNonExistent = new AtomicLong(0);
+    final AtomicLong movedToDest = new AtomicLong(0);
+    new ConcurrentLoopingThreads(1000,
+        i -> movedToNonExistent.set(jedis.smove(sourceKey, nonExistentSetKey, 
movedMember)),
+        i -> movedToDest.set(jedis.smove(sourceKey, destKey, movedMember)))
+            .runWithAction(() -> {
+              
assertThat(jedis.smembers(sourceKey)).containsExactlyInAnyOrder(sourceMemberRemoved);
+
+              if (movedToNonExistent.get() == 1) {
+                assertThat(jedis.smembers(nonExistentSetKey))
+                    .containsExactlyInAnyOrder(nonExisistentMemberAdded);
+              } else {
+                assertThat(jedis.exists(nonExistentSetKey)).isFalse();
+              }
+
+              if (movedToDest.get() == 1) {
+                
assertThat(jedis.smembers(destKey)).containsExactlyInAnyOrder(destMemberAdded);
+              } else {
+                
assertThat(jedis.smembers(destKey)).containsExactlyInAnyOrder(destMembers);
+              }

Review comment:
       It would be good to add an assertion here that only one of the moves 
returned 1, since it shouldn't be possible for both moves to succeed.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to