Skip to content

Commit a868920

Browse files
committed
test_set_or_list_elem_deser_errors: Test all containers
1 parent 4f5faba commit a868920

File tree

1 file changed

+43
-14
lines changed

1 file changed

+43
-14
lines changed

scylla-cql/src/deserialize/value_tests.rs

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2035,25 +2035,54 @@ fn test_set_or_list_elem_deser_errors() {
20352035
};
20362036
let v = vec![123_i32];
20372037
let bytes = serialize(&ser_typ, &v);
2038+
let deser_type = ColumnType::Collection {
2039+
frozen: false,
2040+
typ: CollectionType::Set(Box::new(ColumnType::Native(NativeType::BigInt))),
2041+
};
2042+
2043+
// In contrary to the test above, here we could require owned deserialization, since
2044+
// ListLikeIterator can't be tested with that function anyway. For consistency and future ease of
2045+
// editing, I used the same approach as in the previous test anyway.
2046+
fn verify_elem_deser_err<'meta, 'frame, T: DeserializeValue<'frame, 'meta> + Debug>(
2047+
frame: &'frame Bytes,
2048+
meta: &'meta ColumnType<'meta>,
2049+
) {
2050+
let err = deserialize::<T>(meta, frame).unwrap_err();
2051+
let err = get_deser_err(&err);
2052+
assert_eq!(err.rust_name, std::any::type_name::<T>());
2053+
assert_eq!(err.cql_type, *meta);
2054+
let BuiltinDeserializationErrorKind::SetOrListError(
2055+
SetOrListDeserializationErrorKind::ElementDeserializationFailed(err),
2056+
) = &err.kind
2057+
else {
2058+
panic!("unexpected error kind: {}", err.kind)
2059+
};
2060+
let err = get_deser_err(err);
2061+
assert_eq!(err.rust_name, std::any::type_name::<i64>());
2062+
assert_eq!(err.cql_type, ColumnType::Native(NativeType::BigInt));
2063+
assert_matches!(
2064+
err.kind,
2065+
BuiltinDeserializationErrorKind::ByteLengthMismatch {
2066+
expected: 8,
2067+
got: 4
2068+
}
2069+
);
2070+
}
20382071

2072+
verify_elem_deser_err::<Vec<i64>>(&bytes, &deser_type);
2073+
verify_elem_deser_err::<BTreeSet<i64>>(&bytes, &deser_type);
2074+
verify_elem_deser_err::<HashSet<i64>>(&bytes, &deser_type);
2075+
2076+
// ListlikeIterator has to be tested separately.
20392077
{
2040-
let err = deserialize::<Vec<i64>>(
2041-
&ColumnType::Collection {
2042-
frozen: false,
2043-
typ: CollectionType::List(Box::new(ColumnType::Native(NativeType::BigInt))),
2044-
},
2045-
&bytes,
2046-
)
2047-
.unwrap_err();
2078+
let mut iterator = deserialize::<ListlikeIterator<i64>>(&deser_type, &bytes).unwrap();
2079+
let err = iterator.next().unwrap().unwrap_err();
20482080
let err = get_deser_err(&err);
2049-
assert_eq!(err.rust_name, std::any::type_name::<Vec<i64>>());
20502081
assert_eq!(
2051-
err.cql_type,
2052-
ColumnType::Collection {
2053-
frozen: false,
2054-
typ: CollectionType::List(Box::new(ColumnType::Native(NativeType::BigInt))),
2055-
},
2082+
err.rust_name,
2083+
std::any::type_name::<ListlikeIterator<i64>>()
20562084
);
2085+
assert_eq!(err.cql_type, deser_type);
20572086
let BuiltinDeserializationErrorKind::SetOrListError(
20582087
SetOrListDeserializationErrorKind::ElementDeserializationFailed(err),
20592088
) = &err.kind

0 commit comments

Comments
 (0)