|
10 | 10 | import glide.api.models.configuration.GlideClientConfiguration; |
11 | 11 | import glide.api.models.configuration.NodeAddress; |
12 | 12 | import java.lang.reflect.Constructor; |
| 13 | +import java.nio.charset.StandardCharsets; |
13 | 14 | import java.util.Arrays; |
14 | 15 | import java.util.HashMap; |
15 | 16 | import java.util.HashSet; |
@@ -1628,6 +1629,145 @@ void send_command_set() { |
1628 | 1629 | assertTrue(resultSet.contains(member3), "SMEMBERS result should contain member3"); |
1629 | 1630 | } |
1630 | 1631 |
|
| 1632 | + @Test |
| 1633 | + void sadd_srem_smembers_command() { |
| 1634 | + String key = UUID.randomUUID().toString(); |
| 1635 | + String member1 = "member1"; |
| 1636 | + String member2 = "member2"; |
| 1637 | + String member3 = "member3"; |
| 1638 | + |
| 1639 | + long added = jedis.sadd(key, member1, member2, member3); |
| 1640 | + assertEquals(3L, added, "SADD should return 3 for three new members"); |
| 1641 | + |
| 1642 | + Set<String> members = jedis.smembers(key); |
| 1643 | + assertEquals(3, members.size(), "SMEMBERS should return 3 members"); |
| 1644 | + assertTrue(members.contains(member1)); |
| 1645 | + assertTrue(members.contains(member2)); |
| 1646 | + assertTrue(members.contains(member3)); |
| 1647 | + |
| 1648 | + long removed = jedis.srem(key, member1); |
| 1649 | + assertEquals(1L, removed, "SREM should return 1 for one removed member"); |
| 1650 | + |
| 1651 | + members = jedis.smembers(key); |
| 1652 | + assertEquals(2, members.size(), "SMEMBERS should return 2 members after srem"); |
| 1653 | + |
| 1654 | + String keyBinary = UUID.randomUUID().toString(); |
| 1655 | + byte[] keyBytes = keyBinary.getBytes(StandardCharsets.UTF_8); |
| 1656 | + byte[] m1 = "m1".getBytes(StandardCharsets.UTF_8); |
| 1657 | + byte[] m2 = "m2".getBytes(StandardCharsets.UTF_8); |
| 1658 | + jedis.sadd(keyBytes, m1, m2); |
| 1659 | + Set<byte[]> binaryMembers = jedis.smembers(keyBytes); |
| 1660 | + assertEquals(2, binaryMembers.size(), "SMEMBERS binary should return 2 members"); |
| 1661 | + Set<String> memberStrings = new HashSet<>(); |
| 1662 | + for (byte[] member : binaryMembers) { |
| 1663 | + memberStrings.add(new String(member, StandardCharsets.UTF_8)); |
| 1664 | + } |
| 1665 | + Set<String> expectedBinaryMembers = new HashSet<>(Arrays.asList("m1", "m2")); |
| 1666 | + assertEquals(expectedBinaryMembers, memberStrings, "SMEMBERS binary should contain m1 and m2"); |
| 1667 | + } |
| 1668 | + |
| 1669 | + @Test |
| 1670 | + void set_commands_scard_sismember_smismember_spop_srandmember_smove() { |
| 1671 | + String key = UUID.randomUUID().toString(); |
| 1672 | + jedis.sadd(key, "a", "b", "c"); |
| 1673 | + assertEquals(3L, jedis.scard(key), "SCARD should return 3"); |
| 1674 | + assertTrue(jedis.sismember(key, "a"), "SISMEMBER a should be true"); |
| 1675 | + assertFalse(jedis.sismember(key, "z"), "SISMEMBER z should be false"); |
| 1676 | + |
| 1677 | + List<Boolean> smismember = jedis.smismember(key, "a", "b", "z"); |
| 1678 | + assertEquals( |
| 1679 | + Arrays.asList(true, true, false), |
| 1680 | + smismember, |
| 1681 | + "SMISMEMBER should return [true, true, false]"); |
| 1682 | + |
| 1683 | + String popped = jedis.spop(key); |
| 1684 | + assertNotNull(popped, "SPOP should return a member"); |
| 1685 | + Set<String> expectedMembers = new HashSet<>(Arrays.asList("a", "b", "c")); |
| 1686 | + assertTrue(expectedMembers.contains(popped), "SPOP should return one of a,b,c"); |
| 1687 | + assertEquals(2L, jedis.scard(key), "SCARD should be 2 after spop"); |
| 1688 | + |
| 1689 | + String rand = jedis.srandmember(key); |
| 1690 | + assertNotNull(rand, "SRANDMEMBER should return a member"); |
| 1691 | + List<String> randList = jedis.srandmember(key, 2); |
| 1692 | + assertEquals(2, randList.size(), "SRANDMEMBER count 2 should return 2"); |
| 1693 | + |
| 1694 | + String srcKey = UUID.randomUUID().toString(); |
| 1695 | + String dstKey = UUID.randomUUID().toString(); |
| 1696 | + jedis.sadd(srcKey, "x", "y"); |
| 1697 | + jedis.sadd(dstKey, "z"); |
| 1698 | + long moved = jedis.smove(srcKey, dstKey, "x"); |
| 1699 | + assertEquals(1L, moved, "SMOVE should return 1"); |
| 1700 | + assertFalse(jedis.sismember(srcKey, "x"), "x should be removed from source"); |
| 1701 | + assertTrue(jedis.sismember(dstKey, "x"), "x should be in destination"); |
| 1702 | + } |
| 1703 | + |
| 1704 | + @Test |
| 1705 | + void set_commands_sinter_sintercard_sinterstore_sunion_sunionstore_sdiff_sdiffstore() { |
| 1706 | + String key1 = UUID.randomUUID().toString(); |
| 1707 | + String key2 = UUID.randomUUID().toString(); |
| 1708 | + String dest = UUID.randomUUID().toString(); |
| 1709 | + jedis.sadd(key1, "a", "b", "c"); |
| 1710 | + jedis.sadd(key2, "b", "c", "d"); |
| 1711 | + |
| 1712 | + Set<String> inter = jedis.sinter(key1, key2); |
| 1713 | + Set<String> expectedInter = new HashSet<>(Arrays.asList("b", "c")); |
| 1714 | + assertEquals(expectedInter, inter, "SINTER should return b,c"); |
| 1715 | + |
| 1716 | + // SINTERCARD was added in Redis 7.0 |
| 1717 | + if (SERVER_VERSION.isGreaterThanOrEqualTo("7.0.0")) { |
| 1718 | + long interCard = jedis.sintercard(key1, key2); |
| 1719 | + assertEquals(2L, interCard, "SINTERCARD should return 2"); |
| 1720 | + } |
| 1721 | + |
| 1722 | + long interStoreLen = jedis.sinterstore(dest, key1, key2); |
| 1723 | + assertEquals(2L, interStoreLen, "SINTERSTORE should store 2 elements"); |
| 1724 | + Set<String> expectedInterStore = new HashSet<>(Arrays.asList("b", "c")); |
| 1725 | + assertEquals(expectedInterStore, jedis.smembers(dest), "SINTERSTORE result should be b,c"); |
| 1726 | + |
| 1727 | + Set<String> union = jedis.sunion(key1, key2); |
| 1728 | + Set<String> expectedUnion = new HashSet<>(Arrays.asList("a", "b", "c", "d")); |
| 1729 | + assertEquals(expectedUnion, union, "SUNION should return a,b,c,d"); |
| 1730 | + |
| 1731 | + String destUnion = UUID.randomUUID().toString(); |
| 1732 | + long unionStoreLen = jedis.sunionstore(destUnion, key1, key2); |
| 1733 | + assertEquals(4L, unionStoreLen, "SUNIONSTORE should store 4 elements"); |
| 1734 | + |
| 1735 | + Set<String> diff = jedis.sdiff(key1, key2); |
| 1736 | + Set<String> expectedDiff = new HashSet<>(Arrays.asList("a")); |
| 1737 | + assertEquals(expectedDiff, diff, "SDIFF key1-key2 should return a"); |
| 1738 | + |
| 1739 | + String destDiff = UUID.randomUUID().toString(); |
| 1740 | + long diffStoreLen = jedis.sdiffstore(destDiff, key1, key2); |
| 1741 | + assertEquals(1L, diffStoreLen, "SDIFFSTORE should store 1 element"); |
| 1742 | + Set<String> expectedDiffStore = new HashSet<>(Arrays.asList("a")); |
| 1743 | + assertEquals(expectedDiffStore, jedis.smembers(destDiff), "SDIFFSTORE result should be a"); |
| 1744 | + } |
| 1745 | + |
| 1746 | + @Test |
| 1747 | + void set_commands_sscan() { |
| 1748 | + String key = UUID.randomUUID().toString(); |
| 1749 | + jedis.sadd(key, "m1", "m2", "m3"); |
| 1750 | + ScanResult<String> result = jedis.sscan(key, "0"); |
| 1751 | + assertNotNull(result, "SSCAN result should not be null"); |
| 1752 | + assertNotNull(result.getCursor(), "SSCAN cursor should not be null"); |
| 1753 | + assertNotNull(result.getResult(), "SSCAN result list should not be null"); |
| 1754 | + assertTrue( |
| 1755 | + result.getResult().size() >= 1 && result.getResult().size() <= 3, |
| 1756 | + "SSCAN should return 1-3 members in first iteration"); |
| 1757 | + Set<String> expectedMembers = new HashSet<>(Arrays.asList("m1", "m2", "m3")); |
| 1758 | + for (String member : result.getResult()) { |
| 1759 | + assertTrue(expectedMembers.contains(member), "SSCAN should return valid members: " + member); |
| 1760 | + } |
| 1761 | + |
| 1762 | + ScanResult<String> withParams = jedis.sscan(key, "0", new ScanParams().count(10)); |
| 1763 | + assertNotNull(withParams.getResult(), "SSCAN with params should return result"); |
| 1764 | + for (String member : withParams.getResult()) { |
| 1765 | + assertTrue( |
| 1766 | + expectedMembers.contains(member), |
| 1767 | + "SSCAN with params should return valid members: " + member); |
| 1768 | + } |
| 1769 | + } |
| 1770 | + |
1631 | 1771 | @Test |
1632 | 1772 | void send_command_binary_data() { |
1633 | 1773 | String key = UUID.randomUUID().toString(); |
|
0 commit comments