Skip to content

Commit 061c8d4

Browse files
nicktorwaldTotktonada
authored andcommitted
test: сheck support for named fields in update/upsert
Add required tests that show support for named fields introduced in Tarantool 2.3. This feature affects update and upsert operation triplets allowing to use field names specified as a space format. Closes: #220
1 parent f32bafa commit 061c8d4

File tree

2 files changed

+124
-16
lines changed

2 files changed

+124
-16
lines changed

src/test/java/org/tarantool/ClientOperationsIT.java

Lines changed: 122 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static org.junit.jupiter.api.Assertions.assertThrows;
55
import static org.junit.jupiter.api.Assertions.assertTrue;
66
import static org.tarantool.TestAssertions.checkRawTupleResult;
7+
import static org.tarantool.TestAssumptions.assumeMinimalServerVersion;
78

89
import org.tarantool.schema.TarantoolIndexNotFoundException;
910
import org.tarantool.schema.TarantoolSpaceNotFoundException;
@@ -78,8 +79,8 @@ void testStringInsert() {
7879
client.syncOps().insert("basic_test", Arrays.asList(1, "one"));
7980
client.syncOps().insert("basic_test", Arrays.asList(10, "ten"));
8081

81-
checkRawTupleResult(consoleSelect(1), Arrays.asList(1, "one"));
82-
checkRawTupleResult(consoleSelect(10), Arrays.asList(10, "ten"));
82+
checkRawTupleResult(consoleSelect("basic_test", 1), Arrays.asList(1, "one"));
83+
checkRawTupleResult(consoleSelect("basic_test", 10), Arrays.asList(10, "ten"));
8384
}
8485

8586
@Test
@@ -90,8 +91,8 @@ void testStringReplace() {
9091
client.syncOps().replace("basic_test", Arrays.asList(1, "one"));
9192
client.syncOps().replace("basic_test", Arrays.asList(10, "ten"));
9293

93-
checkRawTupleResult(consoleSelect(1), Arrays.asList(1, "one"));
94-
checkRawTupleResult(consoleSelect(10), Arrays.asList(10, "ten"));
94+
checkRawTupleResult(consoleSelect("basic_test", 1), Arrays.asList(1, "one"));
95+
checkRawTupleResult(consoleSelect("basic_test", 10), Arrays.asList(10, "ten"));
9596
}
9697

9798
@Test
@@ -103,9 +104,9 @@ void testStringDelete() {
103104
client.syncOps().delete("basic_test", Collections.singletonList(1));
104105
client.syncOps().delete("basic_test", Collections.singletonList(20));
105106

106-
assertEquals(Collections.emptyList(), consoleSelect(1));
107-
checkRawTupleResult(consoleSelect(10), Arrays.asList(10, "10"));
108-
assertEquals(Collections.emptyList(), consoleSelect(20));
107+
assertEquals(Collections.emptyList(), consoleSelect("basic_test", 1));
108+
checkRawTupleResult(consoleSelect("basic_test", 10), Arrays.asList(10, "10"));
109+
assertEquals(Collections.emptyList(), consoleSelect("basic_test", 20));
109110
}
110111

111112
@Test
@@ -118,9 +119,9 @@ void testStringUpdate() {
118119
clientOps.update("basic_test", Collections.singletonList(2), Arrays.asList("=", 1, "two"));
119120
clientOps.update("basic_test", Collections.singletonList(10), Arrays.asList("=", 1, "ten"));
120121

121-
checkRawTupleResult(consoleSelect(1), Arrays.asList(1, "one"));
122-
assertEquals(Collections.emptyList(), consoleSelect(2));
123-
checkRawTupleResult(consoleSelect(10), Arrays.asList(10, "ten"));
122+
checkRawTupleResult(consoleSelect("basic_test", 1), Arrays.asList(1, "one"));
123+
assertEquals(Collections.emptyList(), consoleSelect("basic_test", 2));
124+
checkRawTupleResult(consoleSelect("basic_test", 10), Arrays.asList(10, "ten"));
124125
}
125126

126127
@Test
@@ -142,9 +143,9 @@ void testStringUpsert() {
142143
Arrays.asList(10, "010"), Arrays.asList("=", 1, "ten")
143144
);
144145

145-
checkRawTupleResult(consoleSelect(1), Arrays.asList(1, "one"));
146-
checkRawTupleResult(consoleSelect(2), Arrays.asList(2, "002"));
147-
checkRawTupleResult(consoleSelect(10), Arrays.asList(10, "ten"));
146+
checkRawTupleResult(consoleSelect("basic_test", 1), Arrays.asList(1, "one"));
147+
checkRawTupleResult(consoleSelect("basic_test", 2), Arrays.asList(2, "002"));
148+
checkRawTupleResult(consoleSelect("basic_test", 10), Arrays.asList(10, "ten"));
148149
}
149150

150151
@Test
@@ -229,8 +230,114 @@ void testCreateSpaceAfterFailedRequest() {
229230
testHelper.executeLua("box.space.base_test_unknown:drop()");
230231
}
231232

232-
private List<?> consoleSelect(Object key) {
233-
return testHelper.evaluate(TestUtils.toLuaSelect("basic_test", key));
233+
@Test
234+
void testNamedFieldUpdate() {
235+
assumeMinimalServerVersion(testHelper.getInstanceVersion(), ServerVersion.V_2_3);
236+
testHelper.executeLua("box.space.basic_test:insert{1, '1'}");
237+
testHelper.executeLua("box.space.basic_test:insert{10, '10'}");
238+
239+
TarantoolClientOps<Integer, List<?>, Object, List<?>> clientOps = client.syncOps();
240+
clientOps.update("basic_test", Collections.singletonList(1), Arrays.asList("=", "val", "un"));
241+
clientOps.update("basic_test", Collections.singletonList(2), Arrays.asList("=", "val", "deux"));
242+
clientOps.update("basic_test", Collections.singletonList(10), Arrays.asList("=", "val", "dix"));
243+
244+
checkRawTupleResult(consoleSelect("basic_test", 1), Arrays.asList(1, "un"));
245+
assertEquals(Collections.emptyList(), consoleSelect("basic_test", 2));
246+
checkRawTupleResult(consoleSelect("basic_test", 10), Arrays.asList(10, "dix"));
247+
}
248+
249+
@Test
250+
void testWrongNamedFieldUpdate() {
251+
assumeMinimalServerVersion(testHelper.getInstanceVersion(), ServerVersion.V_2_3);
252+
testHelper.executeLua("box.space.basic_test:insert{1, '1'}");
253+
254+
TarantoolClientOps<Integer, List<?>, Object, List<?>> clientOps = client.syncOps();
255+
TarantoolException exception = assertThrows(
256+
TarantoolException.class,
257+
() -> clientOps.update("basic_test", Collections.singletonList(1), Arrays.asList("=", "wrong", "un"))
258+
);
259+
assertEquals(exception.getMessage(), "Field 'wrong' was not found in the tuple");
260+
}
261+
262+
@Test
263+
void testNamedFieldUpsert() {
264+
assumeMinimalServerVersion(testHelper.getInstanceVersion(), ServerVersion.V_2_3);
265+
testHelper.executeLua("box.space.basic_test:insert{1, '1'}");
266+
testHelper.executeLua("box.space.basic_test:insert{10, '10'}");
267+
268+
TarantoolClientOps<Integer, List<?>, Object, List<?>> ops = client.syncOps();
269+
ops.upsert(
270+
"basic_test", Collections.singletonList(1),
271+
Arrays.asList(1, "un"), Arrays.asList("=", "val", "one")
272+
);
273+
ops.upsert(
274+
"basic_test", Collections.singletonList(2),
275+
Arrays.asList(2, "deux"), Arrays.asList("=", "val", "two")
276+
);
277+
ops.upsert(
278+
"basic_test", Collections.singletonList(10),
279+
Arrays.asList(10, "dix"), Arrays.asList("=", "val", "ten")
280+
);
281+
282+
checkRawTupleResult(consoleSelect("basic_test", 1), Arrays.asList(1, "one"));
283+
checkRawTupleResult(consoleSelect("basic_test", 2), Arrays.asList(2, "deux"));
284+
checkRawTupleResult(consoleSelect("basic_test", 10), Arrays.asList(10, "ten"));
285+
}
286+
287+
@Test
288+
void testWrongNamedFieldUpsert() {
289+
assumeMinimalServerVersion(testHelper.getInstanceVersion(), ServerVersion.V_2_3);
290+
testHelper.executeLua("box.space.basic_test:insert{1, '1'}");
291+
292+
TarantoolClientOps<Integer, List<?>, Object, List<?>> ops = client.syncOps();
293+
TarantoolException exception = assertThrows(
294+
TarantoolException.class,
295+
() -> {
296+
ops.upsert(
297+
"basic_test", Collections.singletonList(1),
298+
Arrays.asList(1, "un"), Arrays.asList("=", "bad_field", "one")
299+
);
300+
}
301+
);
302+
assertEquals(exception.getMessage(), "Field 'bad_field' was not found in the tuple");
303+
}
304+
305+
@Test
306+
void testUpdateNamedFieldsOperations() {
307+
assumeMinimalServerVersion(testHelper.getInstanceVersion(), ServerVersion.V_2_3);
308+
testHelper.executeLua(
309+
"box.schema.space.create('animals', { format = " +
310+
"{ {name = 'id', type = 'integer'}," +
311+
" {name = 'name', type = 'string'}," +
312+
" {name = 'mph', type = 'integer'}," +
313+
" {name = 'habitat', type = 'string', is_nullable = true} } })",
314+
"box.space.animals:create_index('pk', { type = 'TREE', parts = {'id'} } )",
315+
316+
"box.space.animals:insert{1, 'Golden eagle', 200}",
317+
"box.space.animals:insert{2, 'Cheetah', 75}",
318+
"box.space.animals:insert{3, 'lion', 30, 'Africa'}"
319+
);
320+
321+
TarantoolClientOps<Integer, List<?>, Object, List<?>> ops = client.syncOps();
322+
ops.update("animals", Collections.singletonList(1), Arrays.asList("!", "habitat", "North America"));
323+
ops.update("animals", Collections.singletonList(3), Arrays.asList("=", "name", "Lion"));
324+
ops.update("animals", Collections.singletonList(3), Arrays.asList("+", "mph", 20));
325+
ops.update("animals", Collections.singletonList(3), Arrays.asList("#", "habitat", 1));
326+
ops.upsert(
327+
"animals", Collections.singletonList(4),
328+
Arrays.asList(4, "Swordfish", 60), Arrays.asList("=", "mph", 60)
329+
);
330+
331+
checkRawTupleResult(consoleSelect("animals", 1), Arrays.asList(1, "Golden eagle", 200, "North America"));
332+
checkRawTupleResult(consoleSelect("animals", 2), Arrays.asList(2, "Cheetah", 75));
333+
checkRawTupleResult(consoleSelect("animals", 3), Arrays.asList(3, "Lion", 50));
334+
checkRawTupleResult(consoleSelect("animals", 4), Arrays.asList(4, "Swordfish", 60));
335+
336+
testHelper.executeLua("box.space.animals:drop()");
337+
}
338+
339+
private List<?> consoleSelect(String spaceName, Object key) {
340+
return testHelper.evaluate(TestUtils.toLuaSelect(spaceName, key));
234341
}
235342

236343
}

src/test/java/org/tarantool/ServerVersion.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ public enum ServerVersion {
88
V_1_10("1", "10", "0"),
99
V_2_1("2", "1", "0"),
1010
V_2_2("2", "2", "0"),
11-
V_2_2_1("2", "2", "1");
11+
V_2_2_1("2", "2", "1"),
12+
V_2_3("2", "3", "0");
1213

1314
private final String majorVersion;
1415
private final String minorVersion;

0 commit comments

Comments
 (0)