@@ -83,6 +83,7 @@ public class LettuceClusterConnectionTests implements ClusterConnectionTests {
83
83
private static final byte [] KEY_1_BYTES = LettuceConverters .toBytes (KEY_1 );
84
84
private static final byte [] KEY_2_BYTES = LettuceConverters .toBytes (KEY_2 );
85
85
private static final byte [] KEY_3_BYTES = LettuceConverters .toBytes (KEY_3 );
86
+ private static final byte [] KEY_4_BYTES = LettuceConverters .toBytes (KEY_4 );
86
87
87
88
private static final byte [] SAME_SLOT_KEY_1_BYTES = LettuceConverters .toBytes (SAME_SLOT_KEY_1 );
88
89
private static final byte [] SAME_SLOT_KEY_2_BYTES = LettuceConverters .toBytes (SAME_SLOT_KEY_2 );
@@ -91,6 +92,7 @@ public class LettuceClusterConnectionTests implements ClusterConnectionTests {
91
92
private static final byte [] VALUE_1_BYTES = LettuceConverters .toBytes (VALUE_1 );
92
93
private static final byte [] VALUE_2_BYTES = LettuceConverters .toBytes (VALUE_2 );
93
94
private static final byte [] VALUE_3_BYTES = LettuceConverters .toBytes (VALUE_3 );
95
+ private static final byte [] VALUE_4_BYTES = LettuceConverters .toBytes (VALUE_4 );
94
96
95
97
private static final GeoLocation <String > ARIGENTO = new GeoLocation <>("arigento" , POINT_ARIGENTO );
96
98
private static final GeoLocation <String > CATANIA = new GeoLocation <>("catania" , POINT_CATANIA );
@@ -179,7 +181,34 @@ void shouldCreateClusterConnectionWithPooling() {
179
181
} finally {
180
182
factory .destroy ();
181
183
}
184
+ }
185
+
186
+ @ Test // GH-2888
187
+ void shouldPipelineAdvancedClusterApi () {
188
+
189
+ LettuceConnectionFactory factory = createConnectionFactory ();
190
+
191
+ ConnectionVerifier .create (factory ) //
192
+ .execute (connection -> {
182
193
194
+ connection .set (KEY_1_BYTES , VALUE_1_BYTES );
195
+ connection .set (KEY_2_BYTES , VALUE_2_BYTES );
196
+ connection .set (KEY_4_BYTES , VALUE_4_BYTES );
197
+
198
+ connection .openPipeline ();
199
+ connection .keyCommands ().randomKey ();
200
+ connection .stringCommands ().mGet (KEY_1_BYTES , KEY_2_BYTES );
201
+
202
+ List <Object > objects = connection .closePipeline ();
203
+
204
+ assertThat (objects ).hasSize (2 );
205
+ assertThat (objects ).element (0 ).isInstanceOf (byte [].class );
206
+ assertThat (objects ).element (1 ).isInstanceOf (List .class );
207
+
208
+ List <Object > mget = (List <Object >) objects .get (1 );
209
+ assertThat (mget ).containsExactly (VALUE_1_BYTES , VALUE_2_BYTES );
210
+
211
+ }).verifyAndClose ();
183
212
}
184
213
185
214
@ Test // DATAREDIS-315
@@ -2821,13 +2850,13 @@ void bitFieldIncrByWithOverflowShouldWorkCorrectly() {
2821
2850
2822
2851
assertThat (clusterConnection .stringCommands ().bitField (LettuceConverters .toBytes (KEY_1 ),
2823
2852
create ().incr (unsigned (2 )).valueAt (BitFieldSubCommands .Offset .offset (102L )).overflow (FAIL ).by (1L )))
2824
- .containsExactly (1L );
2853
+ .containsExactly (1L );
2825
2854
assertThat (clusterConnection .stringCommands ().bitField (LettuceConverters .toBytes (KEY_1 ),
2826
2855
create ().incr (unsigned (2 )).valueAt (BitFieldSubCommands .Offset .offset (102L )).overflow (FAIL ).by (1L )))
2827
- .containsExactly (2L );
2856
+ .containsExactly (2L );
2828
2857
assertThat (clusterConnection .stringCommands ().bitField (LettuceConverters .toBytes (KEY_1 ),
2829
2858
create ().incr (unsigned (2 )).valueAt (BitFieldSubCommands .Offset .offset (102L )).overflow (FAIL ).by (1L )))
2830
- .containsExactly (3L );
2859
+ .containsExactly (3L );
2831
2860
assertThat (clusterConnection .stringCommands ().bitField (LettuceConverters .toBytes (KEY_1 ),
2832
2861
create ().incr (unsigned (2 )).valueAt (BitFieldSubCommands .Offset .offset (102L )).overflow (FAIL ).by (1L ))).isNotNull ();
2833
2862
}
@@ -2837,7 +2866,7 @@ void bitfieldShouldAllowMultipleSubcommands() {
2837
2866
2838
2867
assertThat (clusterConnection .stringCommands ().bitField (LettuceConverters .toBytes (KEY_1 ),
2839
2868
create ().incr (signed (5 )).valueAt (BitFieldSubCommands .Offset .offset (100L )).by (1L ).get (unsigned (4 )).valueAt (0L )))
2840
- .containsExactly (1L , 0L );
2869
+ .containsExactly (1L , 0L );
2841
2870
}
2842
2871
2843
2872
@ Test // DATAREDIS-562
@@ -2847,13 +2876,13 @@ void bitfieldShouldWorkUsingNonZeroBasedOffset() {
2847
2876
clusterConnection .stringCommands ().bitField (LettuceConverters .toBytes (KEY_1 ),
2848
2877
create ().set (INT_8 ).valueAt (BitFieldSubCommands .Offset .offset (0L ).multipliedByTypeLength ()).to (100L )
2849
2878
.set (INT_8 ).valueAt (BitFieldSubCommands .Offset .offset (1L ).multipliedByTypeLength ()).to (200L )))
2850
- .containsExactly (0L , 0L );
2879
+ .containsExactly (0L , 0L );
2851
2880
assertThat (
2852
2881
clusterConnection .stringCommands ()
2853
2882
.bitField (LettuceConverters .toBytes (KEY_1 ),
2854
2883
create ().get (INT_8 ).valueAt (BitFieldSubCommands .Offset .offset (0L ).multipliedByTypeLength ()).get (INT_8 )
2855
- .valueAt (BitFieldSubCommands .Offset .offset (1L ).multipliedByTypeLength ()))). containsExactly ( 100L ,
2856
- -56L );
2884
+ .valueAt (BitFieldSubCommands .Offset .offset (1L ).multipliedByTypeLength ())))
2885
+ . containsExactly ( 100L , -56L );
2857
2886
}
2858
2887
2859
2888
@ Test // DATAREDIS-1103
@@ -2864,7 +2893,7 @@ void setKeepTTL() {
2864
2893
2865
2894
assertThat (
2866
2895
clusterConnection .stringCommands ().set (KEY_1_BYTES , VALUE_2_BYTES , Expiration .keepTtl (), SetOption .upsert ()))
2867
- .isTrue ();
2896
+ .isTrue ();
2868
2897
2869
2898
assertThat (nativeConnection .ttl (KEY_1 )).isCloseTo (expireSeconds , Offset .offset (5L ));
2870
2899
assertThat (nativeConnection .get (KEY_1 )).isEqualTo (VALUE_2 );
0 commit comments